牛客网常见算法思路 (十一)大数据处理

有用麻烦点个赞哦

解题关键
1、分而治之,通过hash将大任务分流到机器
2、常用的hashMap或bitMap
难点:通讯、时间、空间的估算
这类型的题目适合面试不适合笔试

案例一
请对10亿个ipv4地址进行排序,每个ip只会出现一次
ipv4约等于42亿
普通方法
ip地址转化无符号整数,排序后再转化为ip地址
一个ip地址大约4字节,10亿个整数约4G
更优解
1、申请一个长度为2^32的bit类型数组,每个位置只可表示1或0,共128m
2、因为长为2^32,所以bitmap可以表示任何一个32位无符号数,当对应的数出现时,bitmap对应位置涂黑,重复10亿次
3、从0位置开始遍历,把ip地址还原

案例二
请对10亿个数进行排序
思想
年龄必定在0-200之间,计数排序即可

案例三
一个包含20亿个32位整数的大文件,在其中找到出现次数最多的数,但是内存限制只有2G
思想
hashmap记录所有数出现的次数
key->4字节->整型->具体某一个数
value->4字节->整型->这种数出现的次数
一条记录8字节,记录条数为2亿是,大约1.6G内存,20亿时内存可能不足(如果出现20亿个数都不一样)
因此要先用hash函数分流成16个小文件
因为同一个文件不会被分流到不同的部分,全部处理完成后,得到16个文件中各自的第一名再比较出第一名

案例四
32位无符号整数的范围0-4294967295。现在有一个正好包含40亿个无符号整数的文件,所以在整个范围中必然有没出现过的数,可以使用最多10M的内存,只用找到一个没出现的数,如何寻找
思想
hashmap记录,需要16G内存
bitmap记录,需要500M
首先0-232-1范围分成64个区间,单个区间232/64
总范围42亿,但数一共为40亿,所以必然有区间计数不满
找到一个没满的区间用bitmap检索一边即可

案例五
搜索词汇量是百亿的搜索公司,设计出每天最热词100的可行办法
思想
还是先hash分流(具体机器和面试官沟通得出),甚至还可以分流后再分流
处理每一个小文件,得到每个小文件中的词频统计,利用小根堆选出top100
小文件的top100汇总外排序或小根堆求出每台机器的top100,再求出最后的top100

案例六
工程师常使用服务器集群来设计和实现数据缓存,以下是常见的策略。1、无论是添加、查询还是删除,都先将数据的id通过哈希函数转换成一个hash值,记为key。2、如果目前有机器N台,则计算key%N的值,这个值就是该数据所属的机器编号,无论是添加、删除、还是查询,都只在这台机器上进行。请分析这种缓存策略可能带来的问题,并提出改进方案
思考
如果增加/删除机器,数据迁移的代价很大
一致性哈希算法(建议详细了解)
数据id hash计算后结果0-2^32,假设收尾相连成环
假设机器问n个,均匀分布在环上,数据id映射在环上一点,向前走遇到第一台机器的节点,就存储在当前机器节点上,增加删除节点时只需要移动变动节点附近的数据即可。

有用麻烦点个赞哦

发布了23 篇原创文章 · 获赞 24 · 访问量 3063

猜你喜欢

转载自blog.csdn.net/weixin_44303896/article/details/104090209