
数据结构/算法
文章平均质量分 85
ageofnodoubt
https://crayonai.net/
展开
-
布隆过滤器之误识别率FPP公式的推导
在《什么是布隆过滤器(Bloom Filter)?》一文中,多次提到了误识别率(FPP,false positive probabilistic)。那么误识别率到底是多大,应该如何计算呢?假设布隆过滤器大小为m比特,存储了n个元素,使用k次散列函数来计算元素的存储位置。添加1个元素,则任一比特为1的概率为:1/m,任一比特为0的概率:1-1/m;添加1个元素,执行k次散列之后,则任一比特为0的概率:(1-1/m)^k,任一比特为1的概率:1-(1-1/m)^k;如果添加n个元素,那么任一比特为0原创 2020-10-27 16:13:57 · 2114 阅读 · 1 评论 -
什么是布隆过滤器(Bloom Filter)?
在日常工作中,有一个比较常见的需求,就是需要判断一个元素是否在集合中。例如以下场景:给定一个IP黑名单库,检查指定IP是否在黑名单中?在接收邮件的时候,判断一个邮箱地址是否为垃圾邮件?在文字处理软件中,检查一个英文单词是否拼写正确?遇到这种问题,通常直觉会告诉我们,应该使用集合这种数据结构来实现。例如,先将IP黑名单库的所有IP全部存储到一个集合中,然后再拿指定的IP到该集合中检查是否存在,如果存在则说明该IP命中黑名单。通过一段Java代码,来模拟IP黑名单库的存储和检查。public原创 2020-10-26 09:23:46 · 880 阅读 · 1 评论 -
有n个人,按顺序围成一圈,从第1个开始报数,第m个出列,直至所有人都出列...
问题:有n个人,按顺序围成一圈,从第1个开始报数,第m个出列,直至所有人都出列。 1、设计思路1)使用集合存放n个值;循环n次 { 每次获取第m个,并删除第m个} 1.1)循环n次通过for循环n次,或者通过while语句遍历集合至空为止 1.2)每次获取第m个,并删除第m个循环查找,每次循环计数1,当计数值count==m时,获取值并删除...原创 2014-03-09 21:24:04 · 3157 阅读 · 0 评论 -
经典的Times 33 哈希算法
一个好的散列函数通常倾向于“为不相等的对象产生不相等的散列码”。理想情况下,散列函数应该把集合中不相等的实例均匀地分布到所有可能的散列值上。要想完全达到这种理想的情形是非常困难的。幸运的是,相对接近这种理想情形则并不太困难。由Daniel J. Bernstein教授多年前在comp.lang.c发表的Times 33算法。 它是有史以来发布的最有效的哈希函数之一。算法介绍首先,引...原创 2018-07-13 08:15:19 · 2591 阅读 · 0 评论 -
为什么Java String哈希乘数为31?
发表文章之后,发现很多图片显示不了,请阅读我的公众号文章,以获得本文最佳体验:为什么Java String哈希乘数为31? 前面简单介绍了[ 经典的Times 33 哈希算法 ],这篇我们通过分析Java 1.8 String类的哈希算法,继续聊聊对乘数的选择。String类的hashCode()源码/** Cache the hash code for the strin...原创 2018-07-15 16:55:41 · 2491 阅读 · 2 评论 -
Leetcode-计算两个排序数组的中位数
题目描述给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。示例 1:nums1 = [1, 3]nums2 = [2]中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]中位数是 (2 + 3)/2 = 2.5算...原创 2018-07-22 00:43:28 · 553 阅读 · 0 评论