大规模数据的排序问题
有一亿个单词,其中有大量单词是重复的,现在需要统计其中出现的频率最高的十个单词,怎样设计算法?
我只想出了最笨的一种方法:
定义一个结构体:
struct
有这样一个问题,向高手请教: 有一亿个单词,其中有大量单词是重复的,现在需要统计其中出现的频率最高的十个单词,怎样设计算法? 我只想出了最笨的一种方法: 定义一个结构体: struct word { char *p; //用来记录单词 int num; //用来记录该单词出现的次数 }; 将所有的单词分几次读入内存,这里假设每次读100万个,共需要读100次,这里不妨称得到了100个“词块”,利用逐个扫描的方法统计出每个“词块”中,各个词汇出现的次数。再利用归并的方法,将100个“词块”的统计结果合并成一个完整的“词表”,这样就统计出了每个单词出现的次数。 再设计一个结构体数组word[10],将“词表”中的前10条数据根据单词出现次数的大小排序,并按降序存储到结构体数组word[10]中。然后依次读取“词表”中的其他单词,如果某个单词出现的次数比word[9].num要大,则将其插入到word[10]数组对应的位置。这样将整个词表再次扫描一次之后大数据排序,最终存储在word[10]数组中的就是出现次数最多的10个单词。 现在向各位高手请教,有没有更好的算法,精确的和近似的算法都可以,谢谢。 (编辑:通辽站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |