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

       最近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

    

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值