大数据面试算法[牛客笔记]

来源:互联网 发布:借贷软件 编辑:程序博客网 时间:2024/06/10 18:21

1、bitmap
10亿个IP地址的排序:
10亿个IP,2^32存储足够,新建2^32的bit型数组(512M),每一位可以为0或1,遍历10亿IP并将相应的位置置1,最后输出。
2、hashmap
10亿人年龄的排序:
建立一个1-200的无符号型整数的数组,4字节足够存储10亿,整个数组足以存放所有的年龄。
**区别:**1是数组足够大,但是数组的内容只能为0或1;2正好相反。
3、20亿个32位整数的出现次数
区别:数组足够大,内容(计数也得足够大),但是内存(2G)有限制。
利用hash函数(相同的数将被分到同一小文件)将大文件分成多个小文件,分别计算小文件中整数出现的次数即可。
这类问题的基本步骤:
(1)根据内存限制决定分区的大小;
(2)对小区间进行操作;
(3)综合。

通常利用服务器集群来设计和实现数据缓存:
(1)将数据ID转换成hash值;
(2)hash%N(N为机器台数)的值即为数据所在机器编号。
问题:增删机器,数据迁移较大(N改变,hash/N改变,数据需要迁移)。
改进:一致性hash
<1>将数据ID转换为hash值,并组成一个环形结构;
<2>同样将机器码转换为hash值,加入环中,数据属于它顺时针的下一台机器;
增加机器:将改机器码转换为hash值加入环中,并将改hash值到逆时针的前一台机器之间的数据从顺时针的下一台机器迁移到该机器上即可。
删除机器:将该机器上的数据迁移到顺时针的下一台机器上。

原创粉丝点击