加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大规模数据的排序问题

发布时间:2022-12-06 15:02:41 所属栏目:大数据 来源:网络
导读: 有这样一个问题,向高手请教:
有一亿个单词,其中有大量单词是重复的,现在需要统计其中出现的频率最高的十个单词,怎样设计算法?
我只想出了最笨的一种方法:
定义一个结构体:
struct

有这样一个问题,向高手请教:

有一亿个单词,其中有大量单词是重复的,现在需要统计其中出现的频率最高的十个单词,怎样设计算法?

我只想出了最笨的一种方法:

定义一个结构体:

struct word

{

char *p; //用来记录单词

int num; //用来记录该单词出现的次数

};

将所有的单词分几次读入内存,这里假设每次读100万个,共需要读100次,这里不妨称得到了100个“词块”,利用逐个扫描的方法统计出每个“词块”中,各个词汇出现的次数。再利用归并的方法,将100个“词块”的统计结果合并成一个完整的“词表”,这样就统计出了每个单词出现的次数。

再设计一个结构体数组word[10],将“词表”中的前10条数据根据单词出现次数的大小排序,并按降序存储到结构体数组word[10]中。然后依次读取“词表”中的其他单词,如果某个单词出现的次数比word[9].num要大,则将其插入到word[10]数组对应的位置。这样将整个词表再次扫描一次之后大数据排序,最终存储在word[10]数组中的就是出现次数最多的10个单词。

现在向各位高手请教,有没有更好的算法,精确的和近似的算法都可以,谢谢。

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!