首页 > 其他分享 >10月9日总结

10月9日总结

时间:2023-10-16 12:45:38浏览次数:32  
标签:总结 10 32 num let 哈希 bit numIndex

有100亿个url被加入了黑名单,现在提供一个url要去判断是否属于黑名单。也就是一个很简单的一个东西是否属于一个集合的问题。

一般来说用set就能解决这种问题,但是由于url数目太多,内存中无法开辟一个这么大的空间去存放所有url,这个时候就需要我们去使用一种结构,去减少状态信息存储所需要的内存,而布隆过滤器就可以很好地实现这个功能。

2.基本知识

在了解布隆过滤器算法前,需要先了解一些前置知识,例如哈希函数和位图
哈希函数

哈希函数就是一个映射函数,可以把任意长的输入位(或字节)变化成固定长的输出字符串的一种函数。理想的哈希函数是从所有可能的输入值得到所可能的有限输出值的一个随机映射。

性质

哈希函数保证有离散性,即当m1和m2 这两个输入有一点差别的时候,最终经过哈希函数计算的输出结果可能完全不同,离散开来。
对于相同的输入,哈希函数计算的输出一定会相同,反过来只要输出不相同,那么输入一定就不会相同。对于不同的输入,极小概率下,哈希函数的计算输出会相同(即哈希碰撞),一般都不同。
同时哈希函数也保证有均匀性,即在输出的大范围里,每一小片区域中存在的值的个数是相近的(举例:一共有1000个值被输出,在整个输出范围里,每一小片区域里包含的值的个数基本相同)。
hash函数为单向函数,给定消息m可以很容易计算h(m),但对于给定的x,不能求出满足x=h(m)的m

总而言之,哈希函数就是一个映射函数,计算的结果H(m)会在值域上离散均匀分布
位图

位图,bitmap或者bitarray,就是用bit位去存储信息的一种结构。正常的数组要么是int数组或者是long数组,每个元素是4字节或者8字节,也就是32bit或者64bit的信息表示一个元素或者一种状态。而bitarray就是1个bit表示数组里的一个元素或者一种状态,这样的优点就是非常省空间,本来用几十个bit表达的信息被它用1个bit就表达了(前提是信息能用位图表达的情况下)。

下面一串数字0和1即是位图的表示,一共有32个数字,分别表示数组里的32个元素,这些元素的值要么是0要么是1。

因为位图的每一个元素只有2个值,一般可以用来判断一个数是否出现过这种简单的布尔值是或否的问题。

如何实现一个位图?因为我们的数字都是32或64bit的,所以需要借助真实的数字来实现bitmap。现在设一个数字是32个bit,现在有一个长度位10的数组,这个数组可以用来表示长度为320的bit类型的数组,然后通过位运算去实现从bit数组里面取值
复制代码

const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
let i = 199 //想要获取bit数组里第199个元素的值
let numIndex = Math.floor(i / 32) //找到arr里的对应的元素
let bitIndex = i % 32 //找到对应元素里的位数
let value = (arr[numIndex] >> bitIndex) & 1 //获取第199位的值

复制代码

对bitarray进行赋值操作

arr[numIndex] = arr[numIndex] | (1 << bitIndex) //将第199位变成1
arr[numIndex] = arr[numIndex] & (~(1 << bitIndex)) //将199位变成0

实现BitMap类

代码、案例如下
复制代码

class BitMap {
    constructor(size) {
        this.size = Math.ceil(size / 32)
        this.bitArray = new Array(this.size).fill(0)
    }
    getNumber(num) {
        //获取位数
        let numIndex = Math.floor(num / 32)
        let bitIndex = num % 32
        return (this.bitArray[numIndex] >> bitIndex) & 1
    }
    isExist(num) {
        //判断一个数是否存在
        let value = this.getNumber(num)
        return value == 1
    }
    addNumber(num) {
        //添加一个数
        let numIndex = Math.floor(num / 32)
        let bitIndex = num % 32
        this.bitArray[numIndex] = this.bitArray[numIndex] | (1 << bitIndex)
    }

标签:总结,10,32,num,let,哈希,bit,numIndex
From: https://www.cnblogs.com/lmyy/p/17767105.html

相关文章

  • 10月12日总结
    在前面我们基本把应用框架的基础设施搭建完成。接下来我们就得着手处理一下种子数据的问题。在一个基础框架里面,种子数据很重要,比如一些基础数据,初始用户等等,这些都需要初始化,否则程序启动却无法使用就很尴尬了。IDataSeeder#首先定义一个种子数据接口usingWheel.DependencyI......
  • 10月11日总结
    Chiplet封装是什么介绍Chiplet前,先说下SOC。Chiplet和SOC是两个相互对立的概念,刚好可以用来互为参照。SOC(SystemOnChip,系统级芯片)——是指将多个负责不同类型计算任务的单元,通过光刻的形式制作到同一片晶圆上。目前主流智能手机的SOC芯片上,基本都集成了CPU、GPU、DSP、IS......
  • 10月10日总结
    南丁格尔玫瑰图是一种用极坐标下的柱状图或堆叠柱状图来展示数据的图表。虽然南丁格尔玫瑰图外观类似饼图,但是表示数据的方式不同,它是以半径来表示数值的,而饼图是以扇形的弧度来表达数据的。所以,南丁格尔玫瑰图在视觉上会夸大数据的比例,因为半径和面积之间是平方关系。因此,当......
  • 10月13日总结
    .NET高性能开发-位图索引(一)首先来假设这样一个业务场景,大家对于飞机票应该不陌生,大家在购买机票时,首先是选择您期望的起抵城市和时间,然后选择舱等(公务舱、经济舱),点击查询以后就会出现航班列表,随意的点击一个航班,可以发现有非常多组价格,因为机票和火车票不一样,它的权益、规则更......
  • 10月15日《需求分析与系统设计》阅读笔记二
    需求分析与系统设计(二)阅读笔记同样这本书也提到些关于uml“统一建模语言”,除了在上本书中的阅读笔记中所说的外,统一建模语言还是一种通用的、可视化的建模语言,用于对软件系统的人工制品进行详细说明、可视化、构造和文档化。它捕获对必须构建的系统的决策和理解,用于理解、设计、......
  • 1024福利来啦,这一份活动攻略快收好!(附奖品图)
    活动时间2023年10月16日——2023年10月24日15:51活动页面戳此直达>>>活动攻略1、免费摇色子,实体礼品免费送6面色子,3面有实体礼品。摇中概率嘎嘎的~每日免费赠送1次摇色子次数,还有次数增加通道(戳此直达>>)机械键盘“悟空熊”冰箱贴“悟空熊”勋章2、新人福利:0元领大号鼠标垫如果你未......
  • P1019 [NOIP2000 提高组] 单词接龙
    P1019[NOIP2000提高组]单词接龙注意:1.相邻不包含2.每个单词最多使用两次3.如果两部分可以接龙,直接退出,因为如果再继续,长度一定变短(因为相邻的会抵销)4.加个特殊字符,这样就可以不用特判了因为n很小,直接暴力枚举1.如果两个可以接龙直接合并(注意相邻相同要抵消)2.暴力枚举每个单......
  • T175410 分成互质组
    T175410分成互质组因为n很小,直接暴力枚举两种状态:1.放入桶中。如果当前数字可以放入某个桶中,放入。如果可以放入多个桶,先一个一个来,全部枚举。注意:枚举完之后记得恢复现场2.新开辟一个桶。如果不能放入,则开辟一个桶。如果可以放入,也可以选着不放入,再新开辟一个桶:防止遗留......
  • Secure Code Warrior Introduction to OWASP Top 10 Awareness (with latest updates
    MissingFunctionAccessControlAccesstothesefunctionalitiesshouldberestrictedtoauthenticatedusers.However,thecurrentmechanismonlycheckswhetherauserexists.Anyuser,authenticatedornot,willbeabletoaccessrestrictedinformation.U......
  • 1024排行榜福利,Top1得HuaWei智能手表(前三皆有奖)
    1024排行榜福利来啦!(戳此直达>>)正在发文的博主们被精选/推荐的文章数量越高排行榜越高奖品越丰厚都有什么礼品?TO1是华为WATCHGT3TOP2是VGNV98Pro机械键盘TOP3是倍思充电宝20W快充活动时间限制?10月16日——10月24日15:51“你”的文章可以被精选/推荐吗?只要你有一篇图文并茂的技......