大数据和空间限制
BBBgreat
这个作者很懒,什么都没留下…
展开
-
40亿个非负整数中找到出现两次的数和中位数
问题 现有40亿个32位的无符号整数(0~4294967295),可以最多使用1GB,找出出现两次的数 补充问题:最多用10MB,找到中位数 思路 问题一:可以申请一个长度为 4294967295 * 2 的bitmap,用两个位置表示一个词频,首次遇到数num,则bitArr[num2 + 1]和bitArr[num2] 置为01,第二次出现置为10,第三次出现置为11,之后再出现则不予理睬 再次遍历bitArr,若bitArr[i2 + 1]和bitArr[i2]为10,那么就对该数进行记录 问题二:需原创 2020-07-03 11:57:25 · 357 阅读 · 0 评论 -
40亿非负整数中找到未出现的数
题目 现有一个包含40亿个无符号整数(32位,0~4294967295)的文件,找到其中所有未出现过的数 要求 内存限制1GB 思路 可以申请一个长度为4294967295的bitArr,每个位置只可以为0或1。8个bit为1B,所以内存大约要500MB。 遍历40亿个无符号整数,遇到某个数A就将bitArr[A]置为1 遍历完成后,再次遍历bitArr,哪些位置不是1,则哪些数就没出现过 进阶问题 内存限制为10MB,但是只需要找到一个未出现的数即可 思路 将4294967295分成64个区间(由内存限制原创 2020-07-03 11:26:04 · 336 阅读 · 0 评论 -
只用2GB内存在20亿个数中找到次数最多的数
题目 有一个包含20亿个全是32位整数的大文件,在其中找到出现次数最多的数 要求 内存限制2GB 思路 使用哈希表进行存储的话,key需要4B,value需要4B,20亿个数需要16GB,2亿个数需要1.6GB 把包含20亿个数的大文件哦那个过哈希函数(假设哈希函数足够优秀)分成16个小文件(由内存限制决定),根据哈希函数的性质,同一种数不会分到不同的小文件上,同时每个小文件的数不会大于2亿种。 接下来就通过哈希表进行统计,最后选出16个小文件中各自的第一名即可。 ...原创 2020-07-03 11:08:02 · 282 阅读 · 0 评论 -
认识布隆过滤器
通过一个案例来认识布隆过滤器 题目: 不安全的网页黑名单包含100亿个黑名单网页,每个网页最多占用64B。现在想要实现一个网页过滤器系统,可根据URL判断该网页是否在黑名单上。 要求: 该系统允许有一定的判断失误率(不高于万分之一) 使用的额外空间不超过30GB 首先认识哈希函数 典型的哈希函数都有无限的输入值域 当哈希函数传入相同的输入值时,返回值一样 给哈希函数传入不同的输入值时,返回值可能一样也可能不一样(输出域有限S) 很多不同的输入值所得到的返回值会均匀分布在S上(决定哈希函数的优略) 布原创 2020-07-02 11:11:11 · 186 阅读 · 0 评论