算法——(1)大数据算法

一、基本概念:

1. Hash函数

通过哈希函数,将输入域(可以是非常大的范围)指定到一个固定范围的输出域s上。

具有四大性质

1. 拥有无限的输入域

2. 如果输入值相同,返回值一样

3. 如果输入值不相同,返回值可能相同,可能不同

4. 不同输入值得到的哈希值,整体均匀的分布在输出域s中——优秀哈希函数的判断。

经典算法:MD5、SHA1

 

2. 一致性哈希算法

例如,服务器集群中,如果目前的机器数为N,如果使用取余的哈希算法中,一旦增减或减少一台机器,则所有的数据都要重新取余计算器对应的机器。

一致性哈希算法特点

将HASH函数计算后得到的数据当作一个环,每个数据和每台机器都对应在环上的一个位置,对于一个数据来说,找到它分属的机器,就是以它自己为起点,在环上顺时针找到离它最近的机器即可。

所以增减、迁移数据的代价很小。

3. Map/Reduce

Map:把大任务利用HASH分成若干小任务,在机器中运行

Reduce:将小任务得到的结果并发处理,得到最终的结果

 

4. 解题套路——词频统计

 1. 根据内存的限制,对整个数据根据哈希函数分配到不同的机器上/或者分流。

例如:如果数字是0~232,内存限制是10M,则意味着每个区域最大的范围是:10M,所以所需要的分区数是:232/10M= 64

2. 在每个分区上根据bitmap,对每个数据进行词频统计

对于bitmap,每一位只能有0/1,第k-1位代表的就是数字k是否出现

例如:对于0~232范围内的数据,只需要长度为232的bit数组,也就是:128M

3. 如果要选出TOP-K,则利用最大堆/最小堆

4. 综合所有分区,得到结果。

二、遇到的题目:

1. 统计一篇文章中每个单词的词频

(1)预处理——抓取全部有效单词

  • 去掉标点符号
  • 补全缩写字母
  • 连词处理(换行)
  • 大小写处理

(2)利用Map:生成每个单词词频为1的记录:(dog, 1)、(pig, 1)、(dog,1)——>可能有重复

通过hash函数得到每个单词的哈希值,根据哈希值分配成若干组。——相同单词一定分在一个组

(3)在每个分组中,利用reduce单词记录合并。最后再将所有的单词记录合并。

 

2. 对10亿个IPV4的地址进行排序,每个Ip只出现一次

1)申请一个128M的bitmap,在bitmap中每个位置对应的值只能是0/1代表出现/不出现

2)将ipv4地址——>整数,如果出现在相应的bitmap中的位置设为1

3)遍历bitmap,得到未出现的数字

 

3. 对10亿人的年龄进行排序

基数排序

 

4. 有一个包含20亿个全部是32为整数的大文件,在其中找到出现次数最多的数,但是内存限制为2G

1)根据内存限制进行分区。

20亿/2G = 16个

2)在每一个区间内,使用hash表统计词频,选出词频最多的数

3)综合每个分区的词频第一,得到最终的第一。

 

5. 32位无符号函数的范围:0~4294967295.现在有一个包含了20多亿个无符号整数的文件,在无符号范围内找到一个未出现的数,内存<10M

1)根据内存限制,对232差不多42亿个数字,进行分组:

分组个数:232/10M =64

2)若一个分区词频的数字<它的长度,则代表有缺失

3)在这个有缺失的分区,利用bitmap找出缺失的那个数

 

6. 从百亿词汇中,找到最热的100个词

1)根据哈希函数,分流到各个机器,如果每台机器的内存不够,则进一步分流到分区中

2)在每个可处理的最小分区中,利用hashmap统计词频

3)在每个分区中,利用最小堆选出TOP100

4)综合所有,利用外排序/最小堆得到最终的TOP100

posted @ 2017-03-17 16:29  lesleysbw  阅读(1240)  评论(0编辑  收藏  举报