假如有1千万条数据,用尽可能快的方法打印重复的内容,算法如何?

ryangio 2010-06-29 01:13:49
这个小弟今天遇到的面试题,,,请教算法?
...全文
199 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
gunsand 2010-07-12
  • 打赏
  • 举报
回复
肯定是HASH最快了。如果外村很大的话。
毕竟1000万数据就是记一个标志位也占内存的。
O(1)时间复杂度。
当然HASH函数要弄好。
bobo364 2010-07-12
  • 打赏
  • 举报
回复
面试怎么老是问这个,什么超大数据量判断,字符串匹配最快的目前只有hash了
jansonleader 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cattycat 的回复:]
整数的话,可以用位图,如果是字符串,可以先计算MD5签名,也就是相当于hash,然后统计这些签名是否有相同的,相同的就是重复的,因为这个是128位整数,可以很好的避免重复
[/Quote]
这个方法我在工作中试过,但是感觉还不是很完美。我处理的数据是60W行URL,大致是这样的:
while(fgets(oneDate,1024,fp))
{
int md5 = getMd5(oneData);
if (findInMd5(md5,Container) == 1) printf("Repeat %s",oneData);
else insertIntoContainer(Container,oneData);
}
执行效率不是很满意。请问还有更好的方法吗?
赵4老师 2010-06-30
  • 打赏
  • 举报
回复
先排序
再遍历
abcdef0966 2010-06-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cattycat 的回复:]
整数的话,可以用位图,如果是字符串,可以先计算MD5签名,也就是相当于hash,然后统计这些签名是否有相同的,相同的就是重复的,因为这个是128位整数,可以很好的避免重复
[/Quote]

学习了
cattycat 2010-06-29
  • 打赏
  • 举报
回复
整数的话,可以用位图,如果是字符串,可以先计算MD5签名,也就是相当于hash,然后统计这些签名是否有相同的,相同的就是重复的,因为这个是128位整数,可以很好的避免重复
sharco 2010-06-29
  • 打赏
  • 举报
回复
以IP地址为例的话,可以用二叉平衡数解决
liutengfeigo 2010-06-29
  • 打赏
  • 举报
回复
枚举法~
wolibaba 2010-06-29
  • 打赏
  • 举报
回复
规定了范围内的整数的话,位图应该就可以了。
编程珠玑上的第一个例子就是个这样的问题。
do_fork 2010-06-29
  • 打赏
  • 举报
回复
序列化,再hash计数
ryangio 2010-06-29
  • 打赏
  • 举报
回复
好像没说具体什么类型的。。
abcdef0966 2010-06-29
  • 打赏
  • 举报
回复
什么样的数据?是整数?位图法可以吧

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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