我偶然发现了比尔·盖茨的这句话:“如果您能读懂全部内容,则绝对应该给我一份简历。” 他在谈论编程艺术书籍。所以我很好奇,想读全部。但老实说,我不明白。
我真的不是那个知识分子。因此,这应该是我无法理解的原因,但我渴望学习。我目前正在阅读有关基本算法的第1卷。有没有适合像我这样的新手/新手入门的书籍,可以帮助我建立知识,以便将来我能轻松阅读Knuth的书?
我偶然发现了比尔·盖茨的这句话:“如果您能读懂全部内容,则绝对应该给我一份简历。” 他在谈论编程艺术书籍。所以我很好奇,想读全部。但老实说,我不明白。
我真的不是那个知识分子。因此,这应该是我无法理解的原因,但我渴望学习。我目前正在阅读有关基本算法的第1卷。有没有适合像我这样的新手/新手入门的书籍,可以帮助我建立知识,以便将来我能轻松阅读Knuth的书?
Answers:
甚至我也认为Knuth的书有点高级,很难理解。这些书绝对是针对研究级算法学家恕我直言的。
那么,有没有书籍适合像我这样的新手/慢人呢?
CLRS的算法介绍要简单得多。
编辑:
不过,如果您想阅读Knuth的书,则应首先阅读《具体数学》。Knuth希望他的学生了解算法分析的基本数学部分。
确保阅读盖茨的所有报价,包括以下内容:
“我花了难以置信的纪律和几个月的时间来阅读它。我研究了20页,放了一周,再回来又读了20页。如果某人太勇敢以至于他们以为自己知道一切,那么Knuth会帮助他们了解这个世界是复杂的。”
它们不是一本容易的书,也并非旨在。请记住,Knuth的目标之一是将严格的数学引入计算机科学。如果您想证明某种算法,那就太好了,但是如果您只想知道它是如何工作的,那就太好了。
迈克尔·多夫曼(Michael Dorfman )在回答关于Stackoverflow(现在可以删除)的问题(现在已删除)时,有一些阅读书籍的好技巧。。如果您没有10k代表,您仍然可以在Wayback机器上查看问题及其答案。
阅读很多东西会得到什么?计算机科学的优秀基础。您将了解计算机的运行方式,从逻辑门到编译器。您将考虑从未真正知道的问题,即问题(即最快的乘法方式是什么?),并查看从未想到的相关事物之间的算法联系(例如,混响,RNA和嵌套括号)。
我完全不同意那些说“构建软件而不是阅读有关构建软件的人们”的说法-软件工程和计算机科学的学科之间存在差异。TAOCP是关于后者的。
如果您还没有开始,我有几点建议。
首先,您可能想从第4卷开始。这是一些令人兴奋的资料,是最新的,并且Knuth的幽默感闪耀出来。另外,还有一些视频(在Stanford SPCD网站或Stanford iTunes上),其中Knuth讨论了各个部分。强烈推荐这些视频。第4卷的分册0、1、2、3和4可作为单独的平装本获得。总的来说,已出版的V4材料比前三册中的任何一册都更大,但被切成一口大小的零食。(我想知道如果每卷都以单章平装本的形式出版的话,第1-3卷是否会让人们感到恐惧呢?)
根据您的数学背景,我建议您第一次略读第1章,然后根据需要重新学习。实际上,您可能想要(至少)阅读两次(至少一次),第一次是快速阅读,只是为了了解参数的直觉和要旨,然后慢慢地仔细地理解每个步骤。
确保阅读MMIX上的第1卷第1集,而不是MIX上的旧章节。MMIX在许多方面都比较好,并且最好不要将文本中的MIX转换为MMIX,而要跨越两个世界。
一般规则:不要跳过练习。问题(和答案)的内容很多。尽可能多地做运动;但请仔细阅读所有内容(一旦对问题采取了措施,或者决定通过考试,请阅读答案)。
最后,如果您确实发现了该错误:请阅读索引。许多伟大的笑话藏在那里。
自然地,如果有问题出现,StackOverflow将是在文本上发布特定问题的好地方。
对于其他资源,我发现浏览备受推崇的计算机科学学校的课程大纲很有用。例如,用于开始算法课程的教科书:
克努斯(Knuth)是历史上最受尊敬,被引用,谈论最多和最受尊敬的计算机科学作家。他的书装饰着所有认真的软件开发人员的书架,并且人们对《圣经》和《孙子兵法》的尊重程度相同。
我什至听说有些人实际上已经阅读过Knuth的书。
大多数人只是打算。
就我个人而言,我将其保存下来供我退休
Knuth的书永远改变了算法领域。他本人曾说过:“我书中的2页是某人的整个职业生涯”,他的书很难读。这本书包含了计算机科学领域多年工作的浓缩材料。
如果您听不懂,就不会感到难过。
正如Prasoon所说,CLRS是一本比较简单的书。
您也可以轻松理解Rahasekaran,Sahni等人的算法。
刚毕业的时候,我拿起了TAOCP的前三册作为自己的毕业礼物,并试图通读它们。从来没有管理过。这些天,我已经读完了前三册的1/3(没有特别的顺序)。这种材料绝对是致密的,但是我学到的三个技巧对我们很有帮助。
首先,不要试图从头到尾阅读。TAOCP实际上是任何参考工作,并且我发现,当与您要解决的问题相关时,最好阅读本节。就像世界上的许多事物一样,一旦遇到解决方案要解决的问题,了解解决方案就容易得多。
接下来,这是本书前面的流程图,它不仅有点幽默,而且实际上是一个有用的技巧。反复阅读您正在研究的部分,首先从总体概念开始,然后逐渐深入数学。
最后,请随身携带一些好的老式纸和铅笔,以完成所描述的算法,并解决一些简单的问题。它可以帮助您巩固正在阅读的内容。
我从比尔·盖茨(Bill Gates)的那句话中偶然发现:“如果您能阅读全部内容,则绝对应该给我一份简历。” 他说的是编程艺术。.所以我很好奇,想读全部,但老实说,我一点都不懂
I'm really not that highly intellectual being
...所以这应该是我不明白的原因,但我很想学习。.我目前正在阅读有关基础算法的第1卷。.那么,有没有书籍对像我这样的新手/慢人友好?所以我可以建立自己,希望将来我可以轻松阅读Knuth的书。
如果您将自己定义为,not a highly intellectual being
那么您会将自己的期望值降低。如果您想做一些值得麻烦的事情,就必须打破这种想法。毫无疑问,您可以取得成就。此外,实现它并不意味着您将轻松实现它。
值得追求的事情是困难的……而这并不是陈词滥调。在软件,工程以及整个生活中,如果要实现某个目标,就必须去做艰难的事情,人们回避的事情,而不是为事物的最低公分标准而感到满足。
首先,不清楚您的CS背景是什么。努斯的书要求一定的成熟度。拥有CS学历的人很少可以轻松地通过它。我不希望刚刚完成算法第一门课程的CS学生实际上甚至能够阅读Knuth的一本书。获得它所需的成熟度还不存在,这与学生的心理能力无关。
您需要使算法的基础变得冷酷而清晰,并且需要掌握大量的编程知识(工作和/或学术)-我想说,至少要获得40学分的编程知识。您还需要扎实的CS数学。
如果您不掌握离散数学(以及可能的计算理论),就无法走得更远。
并不是您需要了解知识来解决Knuth的问题,而是需要具备成熟的知识,才能通过这类材料。
首先选择一本书和仅一本书(如先前建议的那样,选择CLRS的书),并从头到尾进行处理。尽可能执行实现算法的程序。不要使用Java或C#,甚至不要使用C ++。转至裸露的骨头C,并从裸露的金属屑中获得建造东西的感觉。
如果您还没有完成离散数学和计算理论的课程,还可以获取Knuth的“具体数学”书。同样,这对您也很有帮助。
然后处理Knuth的百科全书,一本全书,一次一章。在不掌握第一章的情况下,请不要再阅读另一章。
我建议您先阅读第I卷(基本算法),然后再阅读第III卷(搜索和排序)。这些应该是您的近期目标。然后,稍后(很久以后)处理第IV卷(组合算法),然后处理第II卷(半数值算法)。
如果一开始不懂的话,不要难过。多年来(十年),我一直在尝试通过第一和第三册。
而且您也不应该对它施加太大的压力。不要这样做来向某人或您自己证明某些东西。这样做,因为你是智力这样做感兴趣。您只需使用CLRS的书(或那里的任何优秀的研究生水平的书)就可以精通算法。
务实,让自己休息一下。将浏览Knuth的书视为长期的个人抱负,而不是直接证明您具有CS知识;)
还有其他更重要的事情(就职业而言);
在开始使用Knuth之前,我必须先完成四本不同的书的学习。前两本是有关算法的Sedgewick书。这些概述以实际实现的形式列出了大多数算法和数据结构,因此您可以了解它们是什么以及它们如何工作。这些书有不同的语言版本-我用C语言阅读,但iirc最初是用Pascal编写的,那里有C ++和Java版本。
之后,我研究了Cormen算法书的大部分内容,并使用了Sedgewick和Flajolet的《算法分析导论》作为补充教科书,因为它比Cormen书更符合Knuth的数学严谨性。我仍然没有完成其中任何一个,主要是挑选我认为需要的零件。
阅读这些内容并获得数学学位后,我可以阅读一些 TAOCP,但这很难读。那并不是说它没有用。TAOCP是一些最出色的算法参考手册,但是认为您可以使用它们“完全”理解任何内容都有些问题。