海量数据Top K算法(C实现)

来源:互联网 发布:java程序员的自我介绍 编辑:程序博客网 时间:2024/05/01 04:12

       最近2天受到http://blog.csdn.net/v_JULY_v/archive/2011/05/08/6403777.aspx的影响,从头开始实现了这个算法。收获还是挺大的:(1)实现了Hash链表(2)实现了堆;(3)熟悉了C语言的文件操作;

     海量数据处理的Top K 算法就是在很大的文件中找出重复出现次数最多的前K个字符串;

     如果数据可以一次读入内存,那么可以按照如下思路来解决:

    (1)首先遍历文件,将其加入Hash链表;Hash链表的节点定义为:

word指向字符串,count为出现的次数;

   (2)建立一个容量为K的最小堆,然后遍历Hash表中剩下的元素;如果找到了一个元素的count值比这个元素值大,那么交换这个节点和堆顶节点;

     完整全部代码如下:在Eclipse + CDT + mingw 下调试通过

     程序有待完善的地方:

     (1)存在一个位置bug:改变HASHLEN的值,程序崩溃;

      (2)HASH链表的遍历不正确,应该遍历到每一个节点的时候,在判断该节点的next是否为空;

 

    

    

   运行结果:

100000个树中重复出现次数最多的前5个数:

the top K is as follows
49 , and its count is 372
4 , and its count is 374
249 , and its count is 373
246 , and its count is 380
227 , and its count is 376

    

原创粉丝点击