一个让人蛋疼的面试题啊

ababababab 2010-03-24 06:20:49
假设有一个文件,里面每一行一个关键字,如

篮球
足球
姚明
足球
....


怎么样得出每个关键字的出现的次数,并按倒序排列。假设文件很大,10G,不能直接读到内存中统计。

面试已经两次遇到这样的问题了,大家什么思路,用C#怎么做啊,谢谢各位大大
...全文
579 45 打赏 收藏 转发到动态 举报
写回复
用AI写文章
45 条回复
切换为时间正序
请发表友善的回复…
发表回复
ababababab 2010-03-25
  • 打赏
  • 举报
回复
assiwe你有什么好的想法啊 现在大家都说是用hash减少存储空间
chrile 2010-03-25
  • 打赏
  • 举报
回复
这就蛋痛了,我不知道楼主的蛋还安好否?
assiwe 2010-03-25
  • 打赏
  • 举报
回复
另外如果真是汉语词排序,用桶排序时间很可能逼近o(n2)的
assiwe 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 superdullwolf 的回复:]

还有,用脑子想一想,人类到底有多少个词?
http://baike.baidu.com/view/6713.htm?fr=ala0_1_1
《辞海》共10,5400余条。才10万多。
http://news.qq.com/a/20081006/001065.htm
韩大学称用30年完成世界最大汉字词典编撰
约45万个单词,不到2的19次方524288
我们就算信息大爆炸,一种语言的词……
[/Quote]

你也要用脑子想一想,人家出这道题是考你技术的,还是考你会不会用语文角度思考问题的
ErnestChen2go 2010-03-25
  • 打赏
  • 举报
回复
学习!
ababababab 2010-03-25
  • 打赏
  • 举报
回复

构造数字来代表哈希关键字,减少控件
哈希去计算重复重复
排序用桶O(n)

我在研究研究 谢谢各位高手
sjz123426 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 superdullwolf 的回复:]
还有,用脑子想一想,人类到底有多少个词?
http://baike.baidu.com/view/6713.htm?fr=ala0_1_1
《辞海》共10,5400余条。才10万多。
http://news.qq.com/a/20081006/001065.htm
韩大学称用30年完成世界最大汉字词典编撰
约45万个单词,不到2的19次方524288
我们就算信息大爆炸,一种语言的词汇……
[/Quote]
高手。
ycagri 2010-03-25
  • 打赏
  • 举报
回复
题目应该不怪
存在就是道理
gsq_0912 2010-03-25
  • 打赏
  • 举报
回复
學習了!!
egg206 2010-03-25
  • 打赏
  • 举报
回复
学习学习。
S314324153 2010-03-25
  • 打赏
  • 举报
回复
很少用Has,现在出去面试咱可能过不了第一轮
Flower_GF 2010-03-25
  • 打赏
  • 举报
回复
继续学习!
balancenada 2010-03-25
  • 打赏
  • 举报
回复
学习了!
hyfzz123 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lost_painting 的回复:]
蛋疼?为什么,这个面试题很简单吧.

除非这10G文件每行都不一样,或者非重复数据读入到Dictionary里面超过内存1.7G在X86下
X64下,内存足够可以直接无视,不过要使用64位编程,仍然无法使用超过1.7G
如果真是这样,可以考虑牺牲一些效能放数据库里面去

在给定以下前提下,代码简单的很:
1.10G文件非重复数据读入Dictionary不超过1.7G
2.X86架构……
[/Quote]
upup
流氓兔 2010-03-25
  • 打赏
  • 举报
回复
one2zero 2010-03-25
  • 打赏
  • 举报
回复
悲剧~~~~
学习!
truelove7283159 2010-03-25
  • 打赏
  • 举报
回复
如果是文本文件txt格式,我估计想都别想了。那个东西支持64k的。超过这个数字到10/20/30M的文件都尝试过,不太容易操作了。要是10g。很够呛的 。

本题目的考法,跟人感觉就是看应聘者知道不知道在win32系统下面文件操作函数支持大小和类型。
以前呢是4G。 现在把int/long 这些都改成sizeof_t了 ,这个定义跟time的那个一样 都是一个64位的。
这下就可以操作这个大文件了。 我指定打开,指定位置读多少个。 负责int/long这个类型的position 就不好用了。 这是一个考点了

另外一个就是效率问题。

还有一个就是用一些 hash dictionary之类 这些本身能处理多大的数据 ,内存能接受多少 。

反正现场程序我肯定不写的,大概思路 方法 我写写就OK了

[Quote=引用 16 楼 happyponder 的回复:]
有谁真正试验过10G的文本文件?!
[/Quote]
truelove7283159 2010-03-25
  • 打赏
  • 举报
回复
这题目怎么就让人蛋疼了,不明白的.
怎么就说复制别人的面试题不行呢.
上次是100G,这次10G 不要太友好啊.
还是用sizeof_t,分段页式,外加多线程处理
用数据结构或者数据库都行.



[Quote=引用楼主 ababababab 的回复:]
假设有一个文件,里面每一行一个关键字,如

篮球
足球
姚明
足球
....


怎么样得出每个关键字的出现的次数,并按倒序排列。假设文件很大,10G,不能直接读到内存中统计。

面试已经两次遇到这样的问题了,大家什么思路,用C#怎么做啊,谢谢各位大大
[/Quote]
hshxf 2010-03-25
  • 打赏
  • 举报
回复
32位下可以使用/3g参数,这样.net就能访问2g以上内存了。
txw86855191 2010-03-25
  • 打赏
  • 举报
回复
我看还是用数组取出阿里排序..哈希表
加载更多回复(24)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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