最优判断问题

美丽海洋 2010-03-18 08:24:54
文件中有9999990个无重复的从1-10000000的数字,怎么以最快的速度把不存在的10个数字找出来?谢谢
...全文
145 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
美丽海洋 2010-03-26
  • 打赏
  • 举报
回复
可以用位图,怎么实现能不能给几行伪代码?谢谢
x642458 2010-03-20
  • 打赏
  • 举报
回复
貌似在《编程珠玑》上第一章提到过这个。
就是用位图,第一次遍历为位图赋值,第二次查找。
线性时间,而且省空间。
美丽海洋 2010-03-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sbwwkmyd 的回复:]
位图?
[/Quote]

说详细点,
我知道可以这样实现
#define qianwan 10000000
main()
{
BOOL b[qianwan ] = {FALSE};
while(file!=eof)
{
int num = read(file);
b[num-1] = FALSE;
}

for(int i=0;i<qianwan;i++)
{ if(b[i] == TRUE)
{
printf(i+1);
}}
}
}
xiuxianshen 2010-03-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yayang17 的回复:]
开一个1000万的数组,把文件里读出来的数做下标给数组做记号就好了。
[/Quote]
实现方法的思路应该差不多,但是在编程实现中就可以有很多不同的方法,主要表现在遍历方式和判断方式上,即使用位图实际上也是利用2维数组而已,主要运算在遍历和赋值上,多线程和多维数组优化稍稍可以提高效果
michael122 2010-03-18
  • 打赏
  • 举报
回复
2楼正解,线性速度应该是最快的了
showjim 2010-03-18
  • 打赏
  • 举报
回复
位图?
yayang17 2010-03-18
  • 打赏
  • 举报
回复
开一个1000万的数组,把文件里读出来的数做下标给数组做记号就好了。

33,008

社区成员

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

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