传说功力不强的人阅读高深的武功秘籍容易伤身甚至走火入魔。看来这本书已经逼近自己的极限。
不过好消息是挺过这个过程传说功力就能上一甲子。
我阅读本书的前两章是一个翻过-》退回去-》再翻过的痛苦过程,直到我把所有东西都搞懂。如同前言所说,不要急着看完它,多想想。
相比某些奇技淫巧华而不实的编程难题,书中列举了许多现实中实实在在的困难需求,以及魔法一般的解决方法。这些方法在我看来是如此帅气,以至于有的我即使看了答案,还要花1天甚至更久的时间来理解(感谢电力出版社那个烂烂烂的翻译)。
比如这个问题 编程珠玑(第二版)第二章 问题A
给定一个包含32位整数的顺序文件,它至多包含40亿个这样的整数,并且次序是随机的。请查找一个此文件不存在的32位整数(2^32>40亿,所以必然有遗漏)。内存空间只有上百字节以及若干备用文件的磁盘空间可以使用
http://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15750-s04/www/HW4_sol.txt
天杀的这答案翻译还翻译错了,我花了一天的时间想了一下,然后看了上面的链接,再想了半天,总算明白了。网上有网友的解释跟代码实现,但我一看,错了。作者明明白白的说明,这个解法,不需要对表进行排序。而网友给出的答案,是对表进行分割,然后分割到小文件可以放进内存以后,进行排序,这不是作者答案的意思。
我自己还在学习笔记里记下:二分查找法之前需要对表进行排序。现在看了这个问题以后,完全推翻了笔记中的结论。作者之前说明,只要给定一个范围,并且能将这个范围二分,并且保证答案就在这个更小的范围里头,或者原本就不存在就可以了。
实际的答案意思是(如同大学里某些牛人教授,跳过了关键解题步骤,让我这种一般人情和以堪):算法读取所有记录,将他们分为高位为1,以及高位为0两类放到不同文件里(用低位也可以),这个过程不需要多少工作内存,几十个byte足够。
ok,书作者没有说清楚的在这里。通过这次分拣,他就知道遗漏的数字在哪一堆,不需要排序。why?因为第32位为1的数字必定有2^31个,算法中必定有个计数器,做完跟2^31比较一下,比它小的话,那么遗漏的数字肯定就在这一堆。
依次类推,在遗漏数字的这一堆,再二分为31位为1跟31位为0两堆,再二分……
刚刚发现这个东西,絮絮叨叨写出来作为笔记,高手勿笑,谢谢观看,再见!
这是一本有可能让我提前掉头发的书
对“这是一本有可能让我提前掉头发的书”的回应
《编程珠玑》热门书评
-
不只是算法
122有用 7无用 Jeao&Leon 2009-11-12
05年的时候,同学去华为工作,因为华为需要一段时间的军训洗脑,为了消磨时间,他顺带买了一本《编程珠玑》来研究,当时他和我说:一起来研究算法吧。当时粗略的在网上看了一下,觉得只是把一些常用算法罗列了而已,于是并不在意,也就这么放弃了。 06年的时候,半了一张上海图书馆的借书证,恰巧图书馆里面有这本书的...
-
思考的乐趣
61有用 2无用 hcwang 2007-12-05
薄薄的一本书,丝毫无愧于珠玑两个字能把书写薄写精的人都是无比厉害的人物,相信看过K&R的<C Progamming Language>的人都有类似的体会只要看了第一章,我相信你会对这本书佩服得五体投地。一个简洁的小例子,几个看似简单的算法,实际上包含了很多算法设计的思想.看完第一...
-
这是一本有可能让我提前掉头发的书
25有用 0无用 younghawk 2010-07-30
传说功力不强的人阅读高深的武功秘籍容易伤身甚至走火入魔。看来这本书已经逼近自己的极限。不过好消息是挺过这个过程传说功力就能上一甲子。我阅读本书的前两章是一个翻过-》退回去-》再翻过的痛苦过程,直到我把所有东西都搞懂。如同前言所说,不要急着看完它,多想想。相比某些奇技淫巧华而不实的编程难题,书中列举了...
-
思从深而行从简
22有用 2无用 interma 2009-01-16
记得第一次看《编程珠玑》还是上学的时候,当时正在准备g的实习申请,在图书馆闲而无事翻到这本小书。之前早已了解《珠》之大名,欣喜之余,2天之内就囫囵吞枣地将其翻完。合卷之时,却有些失落,书中没有讲到什么高深的算法,只是随便说说2分查找,简单dp就能给本书这么崇高的地位?如今2年多过去了,我已经明白本书...
-
将数学和编程完美结合
5有用 3无用 彬彬有你 2009-12-31
打开书本看了第一章,突然被这一章所吸引住了。真正完美的将算法和编程完美的结合,第一次这编程有美的感受,或者说编程能像数学一样优雅。也告诉我们,向别人求助时一定要准确的定位问题。只有准确的定位出问题才能真正找到适合的算法。在看第一章这前我将前言看了一下,然后我也思考了一下怎样实现,没想到最后的实现结果...
书名: 编程珠玑
作者: [美] Jon Bentley
出版社: 人民邮电出版社
出版年: 2006-11
页数: 239 页
定价: 28.0
装帧: 平装
ISBN: 9787115151711