如果人生是一条隐含马尔科夫模型,那维特比算法告诉我已经偏离最优路线了,但如果起点是现在呢?
分类: 大数据
2013-04-06 17:00:34
背景:由于内存限制,长度为一亿的某类型的数组无法全部放入内存进行排序,进而无法取出前100的元素,多见于搜索排名,更恶劣的情况是这一亿条数据还分布在多台机器上
原理与简化:遍历长度为N的数组的前K个元素构建小顶堆,对于剩余的N-K的元素:小于其根节点的过滤掉,大于根节点则替换之并heapify该小顶堆,时间复杂度近似为N*O(logK),因此只要实现一个定制版的heapify函数即可!
关键代码如下:
点击(此处)折叠或打开
invincibleliu2013-04-14 16:20:46
"这一亿条数据还分布在多台机器上"这句话不是本人随意编的,hadoop的Reducer数量是随Partition函数指定的,仅仅能保证每个分区的key唯一,key总量以及分布状况不做任何承诺,如果对于输出的word count[1]做排序的话,该算法不失为一良策
[1]http://hadoop.apache.org/docs/stable/mapred_tutorial.html#Example%3A+WordCount+v1.0