算法-知识点总结(持续更新中)

本文总结了位图法及其在在线用户状态跟踪中的应用,布隆过滤器在判断字符串不存在上的优势,稳定排序与非稳定排序的差别,BF算法(暴风算法)的基本概念,深度优先搜索与广度优先搜索的策略及回溯与剪枝技巧,马拉车算法在寻找最长回文串的高效解决方案,字典树(Trie树)在快速查找和前缀匹配中的作用,以及分治法和动态规划的思想,并提到了并查集数据结构在处理不相交集合问题中的用途。
摘要由CSDN通过智能技术生成

1. 位图法  bimap算法

应用场景:快速在大量的数中查找一个数、去除重复的数

优点:节省内存、查找速度快

  • 假设有1亿个数,要在1亿个数里面找到是否存在666这个数,那么可以构建一个bitmap结构。用一个数组存0、1,将这一亿个数存到这个数组,数组只存0、1,默认数组所有位置的值设置为0,将一亿个数的值作为数组的下标将对应数组的位置赋值为1,比如数字10则将array[10]=1,构建好bitmap结构后查找一个数是否存在只需要o1,比如查找666这个数是否存在这一亿个数里面,只需要判断array[666]是否为1即可。
  • 利用bitmap算法统计在线用户, 将用户id作为对应的位,1表示用户在线,0表示不在线。可以通过redis的setbit、getbit命令实现,例子 : setbit user_login 666 1。通过getbit user_login 666获取到userid为666的值为1即可知道该用户在线,通过bitcount user_login即可获取到在线用户数。

2. 布隆过滤器

应用场景:基于bitmap的扩展,可用于判断某个字符串一定不存在,但不能判断某个字符串一定存在

优点:节省内存空间,查找速度快

基于bitmap思想,由于字符串无法当作数组下标,因此可以通过多种hash算法,计算字符串的hash值,将获取到的hash值作为数组下标,之所以要用多种hash算法是为了提高准确性,避免过多hash碰撞导致准确率过低。假设3个hash算法,首先要构建一个数组,将每个要存放的字符串通过三种hash算法计算得到三个hash值,将hash值作为数组下标,将数组对应下标的值置为1。如果要查找字符串abcd是否一定不存在,则对abcd进行hash,假设算出hash值10、21、34三个值,通过判断数组这三个下标的值是否都为1即可判断一个字符串是否一定不存在。

为什么是只能判断一定不存在,不能判断一定存在?因为不管有几个hash算法,都会存在碰撞的情况,假设abcd字符串算出的三个hash值对应的数组位置之前已经都被置为1了,那么这个时候就不能说这三个位置都为1所以abcd一定存在。而且hash算法个数也不是越多越好,越多说明一个字符串占位越多,占用的空间和碰撞的机率也会提高。

基于以上的点有一条计算公式k表示hash算法个数,m表示数组容量,n表示插入的元素个数,k=m/n * ln2

redis同样也有布隆过滤器相关支持的插件,这里就不扩展,可参考掘金里这篇文章 https://juejin.im/post/5bc7446e5188255c791b33

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值