本帖最后由 pig2 于 2014-4-7 10:53 编辑
分析:
常规方法是先排序,在遍历一次,找出重复最多的前10条。但是排序的算法复杂度最低为nlgn。
可以设计一个hash_table, hash_map<string, int>,依次读取一千万条短信,加载到hash_table表中,并且统计重复的次数,与此同时维护一张最多10条的短信表。
这样遍历一次就能找出最多的前10条,算法复杂度为O(n)。
实现如下:
复制代码
使用g++编译如下:
g++ main.cpp -o main
短信文本文件为:msg.txt
运行:./main < msg.txt
输出结果为:
maxlength (string,num):
(点点母婴坊,4)
(农机配件维修,5)
(红胜超市,6)
(龙溪大酒店,8)
(张记饺子馆,3)
(友谊旅店,3)
(明珠通讯,3)
(金源旅馆,3)
(洞庭山天然泉水,2)
(清源超市,3)
csdn
|