社区
数据结构与算法
帖子详情
如何快速找出字符串的出现频率
firePhoenix1981
2009-08-10 11:26:26
今天被面到这样一道题:假设有一数组,包含数十万个字符串,里面有一些重复出现的字符串,如何统计各字符串出现的频率,并按从大到小的顺序显示出来。我当时的回答是先进行hash,对每个桶里面的字符串构造一个查找二叉树,统计其出现次数,并且每个桶里面的单词的统计次数按照从大到小的顺序排列,排列的算法采用堆排序(相当于动态维护堆),最后对所有桶里面的统计次数做一个归并排序即可。
我的方法似乎麻烦了一点,当时感觉不是很好。不知各位有没有什么更好的方法?
...全文
377
12
打赏
收藏
如何快速找出字符串的出现频率
今天被面到这样一道题:假设有一数组,包含数十万个字符串,里面有一些重复出现的字符串,如何统计各字符串出现的频率,并按从大到小的顺序显示出来。我当时的回答是先进行hash,对每个桶里面的字符串构造一个查找二叉树,统计其出现次数,并且每个桶里面的单词的统计次数按照从大到小的顺序排列,排列的算法采用堆排序(相当于动态维护堆),最后对所有桶里面的统计次数做一个归并排序即可。 我的方法似乎麻烦了一点,当时感觉不是很好。不知各位有没有什么更好的方法?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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 ; ?
黄舒颖 咸丫蛋
2009-08-11
打赏
举报
回复
可行的一种方法。
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
打赏
举报
回复
二叉排序树。。。
MFC 查找文件中指定
字符串
一个入门的,简单的小程序,用MFC写的一个查找文件指定
字符串
的
出现
总个数、行号以及
频率
,刚实习的培训第一个任务!!
C#中用Split计算英文
字符串
中单词个数[收集].pdf
C#中用Split计算英文
字符串
中单词个数[收集].pdf
Python 47个
字符串
方法
# Python 47个
字符串
方法## 课程介绍同学们是否总是要搜资料、查官网后,才知道怎么操作
字符串
?如果是,来学学本课程吧,本课程以讲解官网文档的方式,讲解 Python 47个
字符串
方法,涉及替换、删除、连接、查找、...
关于多个字符选出
频率
最大的一个
在输入大量单词时
找出
出现
单词次数最多的那个单词,如果
出现
一样多,则是最后一个
计算输入文本
字符串
的熵:计算用户输入
字符串
的熵。-matlab开发
要计算熵,必须
找出
每个字符的
出现
频率
。 因此可以通过将每个字符
频率
值除以
字符串
消息的长度来
找出
每个字符
出现
的概率。 使用熵的数学定义,可以计算
字符串
的熵。
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章