如何快速找出字符串的出现频率

firePhoenix1981 2009-08-10 11:26:26
今天被面到这样一道题:假设有一数组,包含数十万个字符串,里面有一些重复出现的字符串,如何统计各字符串出现的频率,并按从大到小的顺序显示出来。我当时的回答是先进行hash,对每个桶里面的字符串构造一个查找二叉树,统计其出现次数,并且每个桶里面的单词的统计次数按照从大到小的顺序排列,排列的算法采用堆排序(相当于动态维护堆),最后对所有桶里面的统计次数做一个归并排序即可。

我的方法似乎麻烦了一点,当时感觉不是很好。不知各位有没有什么更好的方法?
...全文
377 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
编程农场 2009-08-18
  • 打赏
  • 举报
回复
采用我开发的数据结构即可实现:
请参考:http://topic.csdn.net/u/20090818/15/73cfd34b-cdfd-4e5f-9cf2-e069137cce43.html?
61140

步骤
1、先把字符串插入到有序HASH树中,统计相同键值的数量
2、以升序遍历此树即可。

e-mail:freeland007@163.com
QQ: 723273055
komai908 2009-08-14
  • 打赏
  • 举报
回复
map<string,int> word ; ?
  • 打赏
  • 举报
回复
可行的一种方法。
Hash+Hash
1、先进行hash,对每个字符串,统计其出现次数,最大出现次数m
2、根据出现次数放到桶里面
数组List<int> t[m]
如t[1]中记录出现次数为1的字符串。

3、直接逆向读出来就排好了序了。

[Quote=引用楼主 firephoenix1981 的回复:]
今天被面到这样一道题:假设有一数组,包含数十万个字符串,里面有一些重复出现的字符串,如何统计各字符串出现的频率,并按从大到小的顺序显示出来。我当时的回答是先进行hash,对每个桶里面的字符串构造一个查找二叉树,统计其出现次数,并且每个桶里面的单词的统计次数按照从大到小的顺序排列,排列的算法采用堆排序(相当于动态维护堆),最后对所有桶里面的统计次数做一个归并排序即可。

我的方法似乎麻烦了一点,当时感觉不是很好。不知各位有没有什么更好的方法?
[/Quote]
zb_fly 2009-08-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fancymouse 的回复:]
trie
[/Quote]

同意
firePhoenix1981 2009-08-11
  • 打赏
  • 举报
回复
呵呵,电面的。
单纯的二叉排序数应该没有先hash再来二叉排序树好吧,另外最后要求出出现次数从大到小的排列。TRIE以前一直没有弄明白过,至此好好看看
LeonTown 2009-08-11
  • 打赏
  • 举报
回复
mark
面试官有什么反映吗。。。
showjim 2009-08-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 firephoenix1981 的回复:]
呵呵,电面的。
单纯的二叉排序数应该没有先hash再来二叉排序树好吧,另外最后要求出出现次数从大到小的排列。TRIE以前一直没有弄明白过,至此好好看看
[/Quote]
内存足够大的话可以用trie;否则先hash统计再桶排序.
firePhoenix1981 2009-08-11
  • 打赏
  • 举报
回复
我觉得面试官心里想要的就是这个答案吧


[Quote=引用 2 楼 fancymouse 的回复:]
trie
[/Quote]
firePhoenix1981 2009-08-11
  • 打赏
  • 举报
回复
这个方法不错,桶排序,比我的要好


[Quote=引用 6 楼 vshuang 的回复:]
可行的一种方法。
Hash+Hash
1、先进行hash,对每个字符串,统计其出现次数,最大出现次数m
2、根据出现次数放到桶里面
数组List <int> t[m]
如t[1]中记录出现次数为1的字符串。

3、直接逆向读出来就排好了序了。

引用楼主 firephoenix1981 的回复:
今天被面到这样一道题:假设有一数组,包含数十万个字符串,里面有一些重复出现的字符串,如何统计各字符串出现的频率,并按从大到小的顺序显示出来。我当时的回答是先进行hash,对每个桶里面的字符串构造一个查找二叉树,统计其出现次数,并且每个桶里面的单词的统计次数按照从大到小的顺序排列,排列的算法采用堆排序(相当于动态维护堆),最后对所有桶里面的统计次数做一个归并排序即可。

我的方法似乎麻烦了一点,当时感觉不是很好。不知各位有没有什么更好的方法?

[/Quote]
FancyMouse 2009-08-11
  • 打赏
  • 举报
回复
trie
勤奋的沉沦 2009-08-11
  • 打赏
  • 举报
回复
貌似2叉排序树可行呀。

先hash好了,然后将读到得字符串先从树里remove, 如果有则更新下节点, 没有就新加1个节点,然后插入树中, 最后用先序遍历,或者后续遍历的方式能得到1个排好序的序列
acdbxzyw 2009-08-10
  • 打赏
  • 举报
回复
二叉排序树。。。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧