免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3031 | 回复: 4
打印 上一主题 下一主题

低智儿童求教二分算法问题——编程珠玑 第二章问题A [复制链接]

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-21 11:19 |只看该作者 |倒序浏览
问题是:

1个顺序文件(支持顺序读写)中有40亿个随机32位数(2的32方 4294967296),里面至少缺少一个数,请把这个数找出来

答案是(条件为可以使用几个稀疏顺序文件,只有几百字节大小内存)

依次读入文件,根据数字的最末尾 0 或者 1将其分割成两个文件,后面方法类推——倒数第二位0 或者 1再分割

===========

关于这个答案我真心看不懂嘛意思哇

假设只缺少一个数,OK,那么分开的两个文件必然有一个文件的数字数目不对,再对该文件进行二分查找,这样的查找次数应该是log2 N

但是假如不只少一个数,请问是不是对分开的文件如果数字数目不对(N/2),就需要对文件做二分查找

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [报告]
发表于 2012-01-21 12:12 |只看该作者
数是否有重复?一般没有标明不重复限定的,则不能假定其不重复。

看不懂什么叫“里面至少缺少一个数”?
“2的32方 4294967296” - “40亿个” = 294967296个,所以里面至少缺少294967296个数,而不是“里面至少缺少一个数”。如果限定为数不重复,那么就是里面缺少294967296个数(没有“至少”)


论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
3 [报告]
发表于 2012-01-21 12:53 |只看该作者
看原题:http://hi.baidu.com/renzherl/blo ... 68bddda78669ae.html
答案中很狗屎

1。“大约所需要40 0000 0000/8Byte=500MB的内存”
因为不知道缺失哪些数,所以是 4294967296/8Byte = 512MB的内存

2。 “读取n=40亿个整数,第1个bit为0或为1的放到不同的文件中(每个至多为n/2亿)”
第1个bit为0的32bits数一共有 21.47亿个,所以文件中至多需要保存 min(n,21.47亿) 个32bits整数,而不是 n/2亿个整数

3。使用所谓的“0-1二分查找”,单个文件大小需要 2^32/2*4字节,即 8G 大小的文件,而所谓的“位向量表示法”只需要 512M,而且代码复杂度和运行效率上也是差距很大

4。但作者一句瞎话“不过要一次性将所有数都映射到内存中”就把她打死了

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
4 [报告]
发表于 2012-01-21 13:08 |只看该作者
看完了这个帖子 http://www.iteye.com/topic/1050323,整整十四页,没有答案

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2012-01-21 13:39 |只看该作者
这个...难道是翻译问题?真心看不懂哇...

位图确实方便,一次性读入,不过需要500MB左右的内存

关键是这个题目太模糊了——40亿个数,明明2 ^ 32比40亿大黑多{:3_188:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP