菜鸟前来请教一个 排序 问题~~求指导

chen_q07 2012-01-03 08:39:37
前两天看到有个人问如何对4000 0000(即40M行)的文本文件进行排序并且去重。

想了想,感觉没有什么好方法,故此来请教下各位大侠。

(简要说说算法和时间复杂度和内存占用就可以了,不用详细分析。给个参考链接更佳)。
...全文
264 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wide288 2012-01-29
  • 打赏
  • 举报
回复
导入到数据库再操作不是更好
cnmhx 2012-01-28
  • 打赏
  • 举报
回复
对于海量数据,太大规模的数据只能分割成多个小规模数据,逐个实现小规模排序。
但不同时计算。要能同时计算(譬如你有256G的内存!),还分什么?
然后将各个小规模的排序结果,逐个插入合并。
jiantheone 2012-01-23
  • 打赏
  • 举报
回复
BindingSource.Sort = "id" '排序
超级大笨狼 2012-01-23
  • 打赏
  • 举报
回复
先分段,再每段分别排序去重,再归并。

4千万行算什么啊。 O(N)一分就变成子问题了。


排序可以做到N*logN
分段N=∑n
(∑n)*log(∑n) >> max(n*logn)

大规模数据缩小成多个小规模数据同时计算,这就是云计算,网格计算速度快的原因
不知道这个数学原理,都是伪云
fxltsbl 2012-01-21
  • 打赏
  • 举报
回复
如果是整形数字的话,可以考虑用bloom filter,时间复杂度,O(n),空间占不了多少,1亿条8位的整形也就是十几兆;不过是自动去重(想不去重都难,);可以网上搜搜
参考:http://hi.baidu.com/iseeyou100/blog/item/21f4c53be06bdcde9e3d62a5.html
SmallBoat2000 2012-01-20
  • 打赏
  • 举报
回复
这个要取决于你用什么机器。如果是在服务器端计算的话,一般像样点服务器都有128G以上的内存,这样的话完全可以装到内存中,例如:vector<string>中,再排序:sort()。最后再遍历去重。

或者直接用set<string>来装,这样就连排序和去重都省了。
绝伤残影 2012-01-05
  • 打赏
  • 举报
回复
用快速排序吧!
喜欢送 2012-01-04
  • 打赏
  • 举报
回复
吾生也有涯,而知无涯
接分
just_swizard 2012-01-04
  • 打赏
  • 举报
回复
这两天好像很多什么1亿个QQ号排序之类的……
数据库咋做的你也咋做就肯定没错,而且B+树算法啊什么的本身并不算复杂,当然如果你没有更简单的做法的话……

33,008

社区成员

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

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