第一图书网

编程珠玑

Jon Bentley 人民邮电出版社
出版时间:

2006-11  

出版社:

人民邮电出版社  

作者:

Jon Bentley  

页数:

239  

Tag标签:

无  

内容概要

  本书针对程序设计人员探讨了一系列的实际问题,这些问题是对现实中常见问题的归纳总结。作者虽然没有给出解决这些问题的具体代码,但始终非常富有洞察力和创造力地围绕着这些折磨程序员的实际问题展开讨论,从而引导读者理解问题并学会解决问题的技能,这些都是程序员实际编程生涯中的基本技能。为此,本书给出了一些精心设计的有趣而且颇具指导意义的程序,这些程序能够为那些复杂的编程问题提供清晰而且完备的解决思路,书中还充满了对实用程序设计技巧及基本设计原则的清晰而睿智的描述。  本书在第一版的基础上增加了3个方面的新内容:测试、调试和计量,集合表示,字符串问题,并对第一版的所有程序都进行了改写,生成了等量的新代码。  作者简介:  Jon Bentley是位于新泽西州Murray Hill的朗讯贝尔实验室计算机科学研究中心的技术委员会委员,Jon自1998年就成为Dr. Dobbs Joumal杂志的特约编辑,他的“编程珠玑”专栏多年来一直是顶级学术杂志Communications of the ACM最风行的特色专栏之一,而本书正是建立在这些专栏的基础之上。

作者简介

  Jon Bentley是位于新泽西州Murray Hill的朗讯贝尔实验室计算机科学研究中心的技术委员会委员,Jon自1998年就成为Dr. Dobbs Joumal杂志的特约编辑,他的“编程珠玑”专栏多年来一直是顶级学术杂志Communications of the ACM最风行的特色专栏之一,而本书正是建立在这些专栏的基础之上。

书籍目录

Part I:PRELIMINARIESColumn 1:Cracking the OysterA Friendly Conversation·Precise Problem Statement·Program Design·Implementation Sketch·Principles·Problems·Further ReadingColumn 2:Aha! AlgorithmsThree Problems·Ubiquitous Binary Search·The Power of Primitives·Getting It Together: Sorting·Principles · Problems·Further Reading·Implementing an Anagram ProgramColumn 3:Data Structures ProgramsA Survey Program·Form-Letter Programming·An Array of Examples·Structuring Data·Powerful Tools for Specialized Data·Principles·Problems·Further ReadingColumn 4:Writing Correct ProgramsThe Challenge of Binary Search·Writing the Program·Understanding the Program·Principles·The Roles of Program Verification·Problems·Further ReadingColumn 5:A Small Matter of ProgrammingFrom Pseudocode to C·A Test Harness·The Art of Assertion·Automated Testing·Timing·The Complete Program·Principles·Problems·Further Reading·DebuggingPart II:PERFORMANCEColumn 6:Perspective on PerformanceA Case Study·Design Levels·Principles·Problems·Further ReadingColumn 7:The Back of the EnvelopeBasic Skills·Performance Estimates·Safety Factors·Littles Law·Principles·Problems·Further Reading·Quick Calculations in Everyday LifeColumn 8:Algorithm Design TechniquesThe Problem and a Simple Algorithm·Two Quadratic Algorithms·A Divide-and-Conquer Algorithm·A Scanning Algorithm·What Does It Matter?·Principles·Problems·Further ReadingColumn 9:Code TuningA Typical Story·A First Aid Sampler·Major Surgery—Binary Search·Principles·Problems·Further ReadingColumn 10:Squeezing SpaceThe Key—Simplicity·An Illustrative Problem·Techniques for Data Space·Techniques for Code Space·Principles·Problems·Further Reading·A Big SqueezePart III:THE PRODUCTColumn 11:SortingInsertion Sort·A Simple Quicksort·Better Quicksorts·Principles·Problems·Further ReadingColumn 12:A Sample ProblemThe Problem·One Solution·The Design Space·Principles·Problems·Further ReadingColumn 13:SearchingThe Interface·Linear Structures·Binary Search Trees·Structures for Integers·Principles·Problems·Further Reading·A Real Searching ProblemColumn 14:HeapsThe Data Structure·Two Critical Functions·Priority Queues·A Sorting Algorithm·Principles·Problems·Further ReadingColumn 15:Strings of PearlsWords·Phrases·Generating Text·Principles·Problems·Further ReadingEpilog to the First EditionEpilog to the Second EditionAppendix 1:a Catalog of AlgorithmsAppendix 2:An Second EditionAppendix 3:Cost Models for Time and SpaceAppendix 4:Rules for Code TuningAppendix 5:C++Classes for SearchingHints for Selected ProblemsSolutions to Setected ProblemsIndex


编辑推荐

  《编程珠玑》第一版是我早期职业生涯中阅读过的对我影响较大的书籍之一,在书中首次接触到的很多观点都让我长期受益。作者在这一版本中做了重要更新。新增加的很多例子让我耳目一新。  ——Steve McConnell,《代码大全》作者  如果让程序员们列举他们喜欢的书籍,Jon Bentley的《编程珠玑》一定可以归于经典之列。如同精美的珍珠出自饱受沙砾折磨的牡蛎,程序员们的精彩设计也来源于曾经折磨他们的实际问题。Bentley的“珍珠”基于坚实的工程学基础,为那些麻烦的问题提供了富于智慧性和创造性的解决方案。本书通过一些有趣的具有指导意义的程序,对程序设计技巧和基本设计原理进行了清晰而睿智的描述。因此本书对各个层次的程序员都具有很高的价值。  在这一版本中,作者对第一版本中的大多数素材进行了彻底更新,以反映现在的程序设计方法和环境。此外还增加了三方面的新内容:测试、调试和计时,集合表示,字符串问题。所有原始程序都重新进行了改写,并生成了等量的新代码。读者可以从本书网站获取所有程序的C或C++实现。  在新版本中,作者对于程序设计问题本质仍然保持了极大的关注,并针对这些问题给出了实用的解决方案。不论您是第一次阅读这本经典读物,还是已经阅读过第一版,这本书都会成为您最喜爱的图书之一。

图书封面

图书标签Tags

广告

下载页面


编程珠玑 PDF格式下载



  这本书介绍了很多小技巧,小手段。虽然都不是些什么了不起的东西,但也能让读者感受到编程的魅力。
  作者介绍的恰恰是入门程序员所应该掌握的技巧——思考的技巧和算法的技巧——很简单很巧妙的代码段子,但掌握这些以后,却可以去做大事,这恐怕就是珠玑的含义吧。


  不知道翻译问题,还是本来太高深,竟然看不懂。
  比如:21页(3.1调查程序)第三行中,“在实际问题中,共有25列,表示8个类别以及3个类似的输出页面……”这是毛呀,25列从何而来,输出页面有为何物。真是莫名其妙。既然是调查程序,这段程序的目标是什么都没有。。。(原谅我的无知,请辩驳解答)


  就中国电力出版社这个版本,翻译真不是一般的烂。
  翻译真不是一般的烂。
  翻译真不是一般的烂。
  翻译真不是一般的烂。
  翻译真不是一般的烂。
  翻译真不是一般的烂。
  翻译真不是一般的烂。
  翻译真不是一般的烂。
  翻译真不是一般的烂。
  翻译真不是一般的烂。
  翻译真不是一般的烂。
  翻译真不是一般的烂。
  翻译真不是一般的烂。
  翻译真不是一般的烂。
  


  一直追寻像以前阅读组合数学时那种淋漓尽致的思维冲击体验,但要遇到一本对口味的书殊为不易。最近几年渐渐失去了的阅读的冲动,当阅读变成了填充知识库的活动时,乐趣就殆尽了。
  这个作品给我带来了乐趣,同时能拓展视野,告诉我一些别的算法书籍上不会论及的事物。


  浏览了一遍,有亮点但是内容少,试想一下1988左右写的书里面举的例子会是什么样的。。。想学算法去看《算法导论》吧。希望看第二遍能有所收获。想看项目管理可以去瞄瞄其他的。本书真不值得推荐。哎。各位高手勿喷,真心觉得不咋滴


  我以前教别人学习编程,这是我的爱好,也是我以前的工作,我也像每个喜欢编程的人推荐这本,每次看到它就想起里面的点点滴滴,从位图排序到二分搜索,还是很多收获的~唯一的败笔是本书翻译上问题不少,增加了阅读本书的难度~另外我本人并不喜欢伪代码~其他就没什么了~每个人都该看的编程书~


  《编程珠玑》第一版是我早期职业生涯中阅读过的对我影响较大的书籍之一,在书中首次接触到的很多观点都让我长期受益。作者在这一版本中做了重要更新,新增加的很多例子让我耳目一新。——Steve McConnell,《代码大全》作者  如果让程序员列举出他们喜欢的书籍,Jon Bentley的《编程珠玑》一定可以归于经典之列。如同精美的珍珠出自饱受沙砾折磨的牡蛎,程序员们的精彩设计也来源泉于曾经折磨他们的实际问题。Bentley的“珍珠”基于坚实的工程学基础,为那些麻烦的问题提供了富于智慧性和创造性的解决方案。本书通过一些有趣的具有指导意义的程序,对程序设计技巧和基本设计原理进行了清晰而睿智的描述。因此本书对各个层次的程序员都具有很高的价值。  本书作者的“编程珠玑”专栏多年来一直是顶级学术杂志Communications of the ACM最风行的特色专栏之一,而本书正是建立在这些专栏的基础之上。


  计算机的世界,只有苦B二字!原理计算机才是重点额!读的过程真是一种享受。看到好的代码,好的思想,总会忍不住默记几遍。     看到觉得有点意味的地方最好多想想来龙去脉,想想为什么,因为紧接着的会是令人惊.........
  


   读的过程真是一种享受。看到好的代码,好的思想,总会忍不住默记几遍。
    
     看到觉得有点意味的地方最好多想想来龙去脉,想想为什么,因为紧接着的会是令人惊喜的解说。 多写写书上的代码,感觉不错(写完以后感觉忘了很久的算法又重新回来了)。 每章的“原理”部分是高度性的概括,"习题"是很好的,促使你去思考,做习题是很有必要的,不想“浪费”时间去“做习题”了的结果可能是以后会用更多的时间才能想清这些问题,还有不要只想着看答案,你会很失望,因为有些题目是没有答案的 :) ps:有很多面试题来自其中的习题
    
     对一些算法有了更好的理解,也许是看第二遍的原因,也许是从不同的角度看会有不同的效果(所以好书要多读,每重读一次会有新的收获)。比如:在动态规划算法里,程序可以用递归算法和用表格化方法实现。递归算法的缺点是:有部分值会被重算,解决方法是用一个数组把已经计算过的值存起来,这样就不会重复计算了。表格化的算法是:没有递归算法好理解,解决办法是:在代码开头加个注释,注释就是那几条递归规则,大不了再加上说明“此代码用的是动态规划”。 ps:linux里diff的基本算法就是动态规划吧,感觉和最长公共子串类似。
    
     读这本书收获很多,列举几个吧:
     1. 书里的“程序验证” 技术很靠谱,让程序看起来清晰易懂,还能从一定程度保证正确性。
     2. “哨兵”(Sentinel value )被几次用到了,感觉还不错,代码看起来更简单了,还能带来一点小小效率。
     3. 时空折中与双赢。在原始设计的算法并非最佳方案时,通过改善算法是可以达到双赢的。
     4. 用只分配一个较大内存块的方案来替换通用内存分配,这样就消除了很多 开销较大的调用,而且也使用空间的利用更加有效。
     5. 数学模型的建立是很重要的。把数a想成用集合[a,a + 1)表示是第9章中二分查找代码调优的核心思想。数组旋转那个算法也实在是太nb了。
  


  本人才疏学浅! 正如书名,珠玑编程中的精华部分!我必须承认有句话叫仁者见仁智者见智!我不想驳斥任何人的观点,所以不喜勿评!先说点题外话本人是个前端开发人员对C/C++这等底层语言很是崇拜,可能不如写这类底层语言的大牛小牛你们专业。书回正传,我曾google百度下这本书想真正的传达什么思想?如果真的是本算法书籍!我想书名肯定不会这么叫,我发现很多评论或者读后感都在讲这书如何如何牛X,如何如何字字珠玑!我想正在看评论的你会问“楼主,你怎么看?”。
  本书三个部门,1、基础 2、性能 3、应用。别着急我慢慢分析书中内容,咱先说基础部分,基础部分5章(开篇、啊哈算法、数据决定程序结构、编写正确程序、编程小事),当我第一次看目录的时候我也觉得每章之间没有任何关系,可以挑你喜欢的看,但我本人的习惯就是从头到尾,当我读完第一部分的时候,先不说里面有些算法如何精妙,我对第一部分最大的领悟就是它在教你怎么针对一个编程问题写好一个正确不冗余的程序。开篇我们可以理解就是正确沟通前提下正确的理解问题,如果一个问题你理解有一点失误可能导致的就是后续所有工作功亏一篑。在理解正确的前提下,你要考虑一个精妙的算法,‘懒’程序员往往不会先动手去编程,他们往往会想出至少两个解决方案,第三部门就是明确算法之后我们要用一种数据结构或者多种数据结构的组合来设计程序结构(数据结构决定程序结构),注意到现在我们还没有开始具体的代码实现,一切可以用伪代码勾勒在你的纸上,下一步就是写代码了(你最喜欢的一部分),第四章tell你如何写出正确的程序(具体内容例如断言等技巧),既然写完了初步程序你需要保证程序的正确性!第五章就讲了如何利用脚手架测试你的程序,书中经典的二分算法就是其中例子!第一部分到底讲什么呢?自己总结下吧!
  第二部分,首先我还要说我是一个前端攻城师,性能这章我觉得就是告诉你在程序正确性保证的前提下,我们要考虑如何高性能的跑起来!老实说作者当年所处的时代是个内存低,CPU差的时期!性能这块是个硬伤!在这个随处可见8G内存的时代(当然32系统的用户咱不敢恭维,当初串个机器的时候见一哥们买了两个4G内存,说回家装个XP,另外XP上的IE6容我fuck一下),CPU随处可见双核甚至4核(你电脑不是双核你都不好意思出门跟人家打招呼)。性能已经不是程序猿的主题了!加上商业时代,雇主也不会多花精力搞这个,赶紧卖出去就完事!不过你还是多看看怎么实现时间和空间双盈的算反,没准microsoft、google让你面试呢。
  第三部分,扯犊子扯了半天第三部门章节误导了一些高人!他们看了目录就认定这就是TM的算法书籍你看看,11章排序(这不明显是搞算法的嘛?)12章取样问题(这不是算法跟数学的巧妙结合吗?)13章搜索(这不也是算法问题嘛),等等。我想说第三部门主题是应用!它告诉你用前面思考编程方式在具体每个章节实现,用他前面教会你分析问题,定位问题,选择一个实现过程和一个好的数据结构,编写代码,测试and so on。
  所以我认为本书形散神不散。


   在青番茄上面借了这书,下班后阅读和在公车上阅读。话说很多看不懂啊。快速的翻完了,有印象的就是粗略估算了。学习到了72法则。还有个Litter定律,嘿嘿,这个在排队等候中太有用了。谁叫中国排队的队伍都很长呢?


  那个数据结构的加速,真是不错,在Linux内核中,使用了红黑树的EXT3文件系统,和使用了B-,B+树的btrfs.. 以及使用链表的数据结构,他们的效率,不在 一个水平线上。
  以前认为效率就是在计算机里的执行时间,没有其他特别的意义,经过这个物理学试验之后,突然之间发现,效率是如此的现实。可以从1天变成1年。。 而且真切的发生在我们的身边。 如果自己一生可以干完的事情,让计算机帮个忙。。 一天搞定。。那余下的时候,我们是不是可以到处玩了。。。


  Rick Lemons 说在调试中他上过的最好的一堂课就是观看魔术表演了。 魔术师耍了6个于理不通的戏法,Lemons 发现他自己也倾向于相信它们了。 然后他提醒自己这些于理不通的事情绝对是不可能的,他还仔细观察每一个特技, 以便解开它明显的矛盾。他先从他熟悉的基本原理--物理定律---开始,从那开始着手找出每一个戏法的简单解释。 这种态度使Lemons 成为我曾经见过的最优秀的调试员之一。
  
  作为一名C程序员, 看到这样的段子,真得引人入胜。 这段文字真是一针见血的说出了调试的秘密。


   这本书最大的优点是它描绘出了程序员编程活动的概貌,告诉大家关于编程的方方面面的知识。其他的优点还包括给出了解决具体编程问题的各种方法,以及推荐了很多有价值的参考书目。
   我个人觉得理解清楚整本书的布局比知道具体的算法更加重要。
   第一部分介绍了编程活动的流程:首先分析清楚你遇到的是什么问题,能不能突破思维的框架来重新审视这个问题;其次是
  考虑用什么合适的算法来解决这个问题;再次是使用怎样的结构来描述问题中的数据,这对于大型软件开发来说是尤其重要的;
  然后是在编程细节上注意怎样正确的编程以及最后怎么防御性编程,怎么测试代码这些编程活动都会遇到的琐碎的小事。
   第二部分介绍了怎么提高程序性能的各种技巧,这对于对速度要求很高的编程来说是很有参考价值的。第六章从各个层次上概括了性能优化的各种方法,非常值得一读。
   第三部分介绍了一些实际编程中会遇到的数据结构方面的问题。
  总的来说,对于初级程序员来说,这本书是不可多得的珍宝;中高级程序员读读也会有不少的收获。
  


   读的过程真是一种享受。看到好的代码,好的思想,总会忍不住默记几遍。
  
   看到觉得有点意味的地方最好多想想来龙去脉,想想为什么,因为紧接着的会是令人惊喜的解说。 多写写书上的代码,感觉不错(写完以后感觉忘了很久的算法又重新回来了)。 每章的“原理”部分是高度性的概括,"习题"是很好的,促使你去思考,做习题是很有必要的,不想“浪费”时间去“做习题”了的结果可能是以后会用更多的时间才能想清这些问题,还有不要只想着看答案,你会很失望,因为有些题目是没有答案的 :) ps:有很多面试题来自其中的习题
  
   对一些算法有了更好的理解,也许是看第二遍的原因,也许是从不同的角度看会有不同的效果(所以好书要多读,每重读一次会有新的收获)。比如:在动态规划算法里,程序可以用递归算法和用表格化方法实现。递归算法的缺点是:有部分值会被重算,解决方法是用一个数组把已经计算过的值存起来,这样就不会重复计算了。表格化的算法是:没有递归算法好理解,解决办法是:在代码开头加个注释,注释就是那几条递归规则,大不了再加上说明“此代码用的是动态规划”。 ps:linux里diff的基本算法就是动态规划吧,感觉和最长公共子串类似。
  
   读这本书收获很多,列举几个吧:
   1. 书里的“程序验证” 技术很靠谱,让程序看起来清晰易懂,还能从一定程度保证正确性。
   2. “哨兵”(Sentinel value )被几次用到了,感觉还不错,代码看起来更简单了,还能带来一点小小效率。
   3. 时空折中与双赢。在原始设计的算法并非最佳方案时,通过改善算法是可以达到双赢的。
   4. 用只分配一个较大内存块的方案来替换通用内存分配,这样就消除了很多 开销较大的调用,而且也使用空间的利用更加有效。
   5. 数学模型的建立是很重要的。把数a想成用集合[a,a + 1)表示是第9章中二分查找代码调优的核心思想。数组旋转那个算法也实在是太nb了。


   大概读了下吧,英文版的,自己英文水平也不是很好,所以读的也不是特别顺。但是觉得这本书所讲的东西,还是属于比较初级的、科普性质的东西吧,比如那些算法,并不是像算法教科书一样分析算法复杂度什么的,所以感觉还是比较适合入门程序员来读一下吧,不过里面的问题也不是那么简单的。推荐计算机专业大一的学生好好读一下。


  非常好的一本书,很少有人能把计算机类的书籍写的这么引人入胜。虽然书中有些东西我还不是很明白(非计算机专业出身的就是这点悲剧啊...),但是这本书却给我了一个方向,确实如封面上评论该书的那三句话一样:"历史上最伟大的计算机科学著作之一;融深邃思想、实战技术与趣味轶事于一炉的奇书;带你真正领略计算机科学之美"。
  书中有些例子,在读的时候并没有仔细的推敲,所以我对于这本书的解读还很不够;另外,本书中出现的源代码都可以下载到,都是些非常非常精巧和实用的小函数。每个章节的课后题也都设计的非常巧妙,既让人深入思考文中所涉及到的问题,又让人开阔了视野。遗憾的是,我只是偶尔看了一下部分的问题,而且稍微有点难度的问题就被卡住了,只能求助于书后的答案。哎,算法(编程)真是一门既吸引人又需要详细思考和大胆创新的艺术。
  另外,书中反复提到了Knuth和Sedgewick的算法教材,还专门提起,每个程序员都该在家里和办公室都放一套Knuth的书。看来真是得花时间好好拜读一下这些著作。
  本书后面的跋是作者自己采访自己而写成的,很有意思。程序员并不都是geek ^_^,或者说程序员也有很有意思的geek^_^
  很少写这么多文字类的东西了,o(∩∩)o...哈哈,希望没有耽误你coding...


  温故而知新
  
  第一遍阅读的时候很策略,只是通读了过去,很功利的想法,想尽快阅读完,没有实现书中的程序、课后的习题
  
  第二遍阅读,踏实了许多,把每章感兴趣的问题都自己实现了一遍,课后的习题也做了一部分
  
  但是还是有很多问题没有彻底解决,有些内容还是不能理解透,诸如第 13 章、第 15 章
  
  今天在 taobao 上买了本复印版的《编程珠玑 II》


  第7章的开头:
  "那就是 Bob Martin 介绍的"封底计算工程技术的精彩(古怪)方式. 该思想在工程学校中是标准食粮, 但对大多数从业工程师来说, 则是面包和黄油了. 不幸的是, 忽视计算的现象太常见了"
  
  看到这里, 我被 "但对大多从业工程师来说" 里面的"但"字搞糊涂了, 这里明明是并列而不是转折怎么用"但"呢?
  
  找出英文版的来对照了一下, 果然, 别人明明用的是 and:
  The idea is standary fare in engineering schools and is bread and butter for most practicing engineers.
  
  我晕, 太不负责了吧.
  
  后面这句也不对,
  原文是: "Unfortunately, it is too often neglected in computing"
  原文的意思是抱怨这种思想经常被忽视, "idea"是主语.
  他的翻译把"忽视计算的现象"当主语, 完全牛头不对马嘴嘛.
  
  我不要求翻译到达信雅达的程度, 至少要做到不要曲解原文的意思吧.
  
  这么一个好书, 被这样粗制滥造, 痛惜啊.


  在卓越订了有将近两周了,先前早就见评论,相当不错,看了两章,很合我胃口,着重训练读者的思维,如何抽象问题-->罗列条件-->分析综合-->求解?层层引入读者,值得细细品尝,可惜翻译有点差,早知道就买本影印版了


  Programming pearls is essentially a collection of column articles written by author in the 80s. Each article delivers an insight to the practical problem every programmer will meet in their daily job. It differ from the introduction to algorithm that programming pearls does not aim at to providing a complete list of data structures and generic algorithms. On the contrary, it shows people how to code smart after spotting the right problem. It also provides some interesting discussions about tuning codes. I'd say if you need a book to sharpen you skill, you need it. And it is light and small. You can read anytime anywhere you like.


  首先,要对此书名的最初翻译者表示敬意,“珠玑”二字是真无愧于“信雅达”。
  
  此书先前曾图书馆借来英文版,看过排序一章,而后就因故没再翻动直到归还,但那一章的精妙却给我留下了深刻的印象。
  
  某日逛新华书店,发现此一中译本,以为缘分便原价入手。
  
  阅毕,确实有趣,只恨相识过晚,如果在早期的时候碰上此书相信收益更多。
  
  这绝不是一本枯燥的书,里面有着许多的名人轶事,如求“最大连续子序列之和”,当年在OJ上抓头皮做类似的这道题时候不曾想再次以这样的方式重遇,不忍小唏嘘了下。
  
  书中还推荐了许多的经典名著,本书的难度起点并不高,但是却较能激发出你的兴趣和好奇心,有深入了解的需要就可以按这些推荐书目求索了。
  
  关于书后习题,个人时间问题虽然没有一一完成,但确实值得回味,仅是浏览问题也会引发思考。
  对照答案也不时会令人情不禁的发出 “啊哈“,”哈哈”
  
  书后的两个版本的跋也相当的有趣,大湿们的生活态度和情趣也相当值得学习~
  
  如果硬是要挑些刺儿的话...
  本书代码的风格有时候看着不甚舒服,不时的跳转与不是很伪的伪代码和带有严重C风格的C++,左花括号后没有空行...
  
  不过我承认是自己的原因,相较国内的某些教材缩进都乱七八糟的一坨坨Times New Roman代码,面对这些简洁明了的良好缩进且是Courier New的代码还能挑剔什么呢?
  
  还没看的赶紧去拿本英文原版的开始旅程吧~
  


  传说功力不强的人阅读高深的武功秘籍容易伤身甚至走火入魔。看来这本书已经逼近自己的极限。
  不过好消息是挺过这个过程传说功力就能上一甲子。
  
  我阅读本书的前两章是一个翻过-》退回去-》再翻过的痛苦过程,直到我把所有东西都搞懂。如同前言所说,不要急着看完它,多想想。
  
  相比某些奇技淫巧华而不实的编程难题,书中列举了许多现实中实实在在的困难需求,以及魔法一般的解决方法。这些方法在我看来是如此帅气,以至于有的我即使看了答案,还要花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两堆,再二分……
  
  
  刚刚发现这个东西,絮絮叨叨写出来作为笔记,高手勿笑,谢谢观看,再见!
  


你把这本书读完了吗?我感觉怎么那么糟糕呀,不知道如何下手


哈哈,曾经学过编程,可是什么都看不懂


不错 看懂了 根据高位和地位实现


高手,编程珠玑其他章节有研究过么?


这本书已经再让我掉头发了...


看了一点,不敢再看了。。。


看了你的笔记,让我对这本书非常感兴趣,准备入手一本了。


看明白了,应对这种大牛级的书,功力还不够啊


mark回头细细品味~


相关图书