it-swarm.cn

我是CS学生,说实话,我听不懂Knuth的书

我偶然发现了比尔·盖茨的这句话:“如果您能读懂全部内容,则绝对应该给我一份简历。”他在谈论编程艺术书。所以我很好奇,想读全部。但老实说,我不明白。

我真的不是那个知识分子。因此,这应该是我无法理解的原因,但我渴望学习。我目前正在阅读有关基本算法的第1卷。有没有适合我的新手/慢人使用的书籍,这些书籍将有助于积累我的知识,以便将来我可以轻松阅读Knuth的书?

52
Rho

甚至我也认为Knuth的书有点高级,很难理解。这些书绝对是针对研究级算法学家恕我直言的。

那么,有没有书籍适合像我这样的新手/慢人呢?

CLRS算法简介 更加简单。

[〜#〜]编辑[〜#〜]

不过,如果您来阅读Knuth的书,则您应该首先进行 具体数学 。 Knuth希望他的学生了解算法分析的基本数学部分。

39
Prasoon Saurav

确保阅读盖茨的所有报价,包括以下内容:

“我花了难以置信的纪律和几个月的时间来阅读它。我研究了20页,放了一周,再回来又读了20页。如果某人太勇敢以至于他们以为自己知道一切,那么Knuth会帮助他们了解这个世界是复杂的。”

它们不是一本容易的书,也并非旨在。请记住,Knuth的目标之一是 将严格的数学知识带给计算机科学 。如果您想证明一个算法的知识,那太好了,但是如果您只想知道它是如何工作的,那不是很好。

迈克尔·多夫曼(Michael Dorfman)有几条 阅读有关在Stackoverflow上(现在已删除)问题的答案的阅读书籍的好技巧,该问题关于我从阅读拍卖品中能得到什么? 。如果您没有10k代表,您仍然可以在 后退机器 上查看问题及其答案。

阅读很多东西会得到什么?计算机科学的优秀基础。您将了解计算机的运行方式,从逻辑门到编译器。您将考虑从未真正知道是问题的问题(即最快的乘法方式是什么?),并查看您从未想到的相关事物之间的算法联系(例如,带动词,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将是在文本上发布特定问题的好地方。

对于其他资源,我发现浏览备受推崇的计算机科学学校的课程大纲很有用。例如,用于开始算法课程的教科书:

57
Corbin March

克努斯(Knuth)是历史上最受尊敬,被引用,谈论最多和最受尊敬的计算机科学作家。他的书装饰着所有认真的软件开发人员的书架,并且人们对《圣经》和《孙子兵法》的尊重程度相同。

我什至听说some人们实际上在Knuth的书中有read部分。

大多数人只是意图来。

就我个人而言,我将其保存下来以供退休

29
Steven A. Lowe

Knuth的书永远改变了算法领域。他本人曾说过:“我书中的2页是某人的整个职业生涯”,他的书很难读。这本书包含了计算机科学领域多年工作的浓缩材料。

如果您听不懂,就不会感到难过。

正如Prasoon所说,CLRS是一本比较简单的书。

您还可以轻松理解Rajaskaran,Sahni等人的算法。

20
Arjun J Rao

刚毕业的时候,我拿起了TAOCP的前三册作为自己的毕业礼物,并试图通读它们。从来没有管理过。这些天,我已经读完了前三卷的1/3(没有特别的顺序)。这种材料绝对是致密的,但是我学到的三个技巧对我们很有帮助。

首先,不要试图从头到尾阅读。 TAOCP实际上是任何参考工作,并且我发现,当与您要解决的问题相关时,最好阅读本节。就像世界上的许多事物一样,一旦遇到解决方案要解决的问题,了解解决方案就容易得多。

接下来,这是本书前面的流程图,它不仅有点幽默,而且实际上是一个有用的技巧。迭代地阅读您正在研究的部分,首先从总体概念开始,然后逐渐深入数学。

最后,请随身携带一些好的老式纸和铅笔,以完成所描述的算法,并解决一些简单的问题。它可以帮助您巩固正在阅读的内容。

12
Cercerilla

不用担心,大多数人不了解计算机编程的艺术(TAOCP)。因此,不要以为自己很慢或不懂新手,就像其他人一样99.99%的人不了解。

如果您想达到可以阅读The TAOCP的水平,则您非常有野心[轻松。我本人只是翻阅这些书,然后才将它们收起来。这个星球上可能只有少数人了解TAOCP。

请查看该帖子: 书籍程序员没有真正读过 by the Lizard。

大量其他书籍列出,其中可读可理解,则可以立即受益

我个人喜欢:

10
spong

我从比尔·盖茨(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卷(搜索和排序)。这些应该是您的近期目标。然后,稍后(很久以后)处理第四卷(组合算法),然后处理第二卷(半数值算法)。

如果一开始不懂的话,不要难过。多年来(十年),我一直在尝试通过第一和第三册。

而且您也不应该对它施加太大的压力。不要这样做来向某人或您自己证明某些东西。这样做是因为您对智力上感兴趣。您只需使用CLRS的书(或那里的任何优秀的研究生课程),就可以精通算法。

务实,让自己休息一下。将浏览Knuth的书视为长期的个人抱负,而不是直接证明您是CS的物质;)

还有其他更重要的事情(就职业而言);

8
luis.espinal

在开始使用Knuth之前,我必须先完成四本不同的书的学习。前两个是 Sedgewick书籍 关于算法。这些概述以实际实现的形式列出了大多数算法和数据结构,因此您可以看到它们是什么以及它们如何工作。这些书有不同的语言版本-我用C语言阅读,但是iirc最初是用Pascal编写的,并且有C++和Java版本。

之后,我研究了Cormen算法书中的大部分内容,并使用了Sedgewick和Flajolet的 算法分析简介 作为补充文本,因为它更符合Knuth的数学严谨性而不是科尔曼书。我仍然没有完成其中任何一个,主要是挑选我认为需要的零件。

读完这些并获得数学学位后,我可以阅读TAOCP的some,但这很难读。那并不是说它没有用。 TAOCP是一些最出色的算法参考手册,但是认为您可以使用它们“完全”理解任何内容都有些问题。

4
Justin Hamilton