1亿个数可重无序排列,找出其中没出现的最小的数

mammonyy 2015-11-29 05:24:07
1亿个数可重无序排列,找出其中没出现的最小的数

虽然没要求时间没要求内存,但是我觉得要尽量小

我想的是用布隆过滤 把这1亿个数哈希到1GB的位上面,然后再从1开始从小到大去哈希到位上 判断是否是1……

但是依旧感觉费时很长。。 求大神贴下想法,有C/C++代码更好
...全文
138 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2015-11-29
  • 打赏
  • 举报
回复
1亿个数哈希到125MBytes的位上面找到最大值最小值 你可以一次判断32Bits,或者64Bits 4或者8 Byte 如此只需要 32M 或者16M左右次搜索 也就是只要1000万次左右的比较这个还算比较快了 如果开四个或者8个线程,那就是几百万级的,已经很快了 我记intelX86 有cmps 串比较指令,也就是一个线程 几百万条指令而已。 换页,高级缓存造成的效率损失,比比较操作严重多了。
chehw_1 2015-11-29
  • 打赏
  • 举报
回复
假设最小值的重复次数不超过64K(64 * 1024)个 (0)先取前64K个数,用数组的方式建一个最大堆H; (1) 依次读取后续的数字,若1亿个数读取完毕,则跳转至(5); (2)将读取的数字与堆顶元素进行比较,如果大于堆顶元素,则返回(1); (3)如果小于等于堆顶元素,则用该数字替换堆顶元素,重建最大堆H; (4)返回(1) (5)用任意方法对H进行排序,找出其中的最小值(允许有重复,最多不超过64K个)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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