我是CS学生,说实话,我听不懂Knuth的书[关闭]


52

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

我真的不是那个知识分子。因此,这应该是我无法理解的原因,但我渴望学习。我目前正在阅读有关基本算法的第1卷。有没有适合像我这样的新手/新手入门的书籍,可以帮助我建立知识,以便将来我能轻松阅读Knuth的书?


嗯,我想我会理解(而且我猜你也是),但是这会花费很多时间,而且如今的书也更容易
Nils

22
它们可能很难阅读,可能更容易阅读,但是无论如何您都应该阅读它们。到目前为止,我只读过第一本书,但我不理解其中的一切!但这是值得的。计算机科学很难。您越早意识到自己不够聪明,无法理解它,就越早可以开始学习如何学习它。
Michael

2
他们是数学爱好者的数学倾向。CS在最近几年中得到了发展,并且有很多非数学领域的有益领域。您想向哪个方向发展?如果是算法之类的话,它们可能是不错的读物,如果是其他领域的话,它们将扩大您的视野,但与阅读有关生物学主题的书一样多。因此,根据您所在的地区,它们可以在任何地方使用,从关键任务到几乎没有用。
编码员

1
从什么时候起程序员就认为比尔·盖茨具有权威性?
乔治(Giorgio)2012年

2
Coursera有6门关于算法的免费课程(算法第1和2部分,算法设计和分析第1和2部分,以及分析组合学第1和2部分)。
安东尼

Answers:


39

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

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

CLRS的算法介绍要简单得多。

编辑

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


5
算法设计手册更加轻松/易于使用-读起来几乎很有趣
Martin Beckett

算法入门是一本很棒的书。我们在第一门CSE算法课程中使用了此方法,我很喜欢它。尽管我必须说我花了很多次迭代来研究相同的示例,但实际上却说我理解它们。
克里斯,

4
@SidCool:有一个CLRS第三版,其中有许多新章节。
比尔蜥蜴

10
Knuth的书是《编程的战争与和平》。它们虽然很好,但通常用于使书架看起来令人印象深刻。
Gaurav

6
“即使我认为Knuth的书有点高级”?谦虚eh :)
occulus 2012年

57

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

“我花了难以置信的纪律和几个月的时间来阅读它。我研究了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将是在文本上发布特定问题的好地方。

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


:以这样的链接被打破了,但我发现一个职位,我想是类似stackoverflow.com/questions/1022167/...
asjohnson

为Way Way Machine上的原始帖子和这些大学的图书清单+1
安东尼

+1建议从第4卷开始,分册0、1、2、3和4开始阅读,也可以阅读MMIX而不是MIX。结果,我将从第1卷第1集开始,因为它涵盖了MMIX。
Shaun Luttin 2014年

作为一名Java / c程序员,我觉得<Java中的数据结构和算法分析>非常容易理解和实践。
埃里克·王

29

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

我什至听说有些人实际上已经阅读过Knuth的书。

大多数人只是打算

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


22
这就是为什么陈旧的二手副本比新副本更有价值的原因!
马丁·贝克特

13
如果您了解《孙子兵法》,您将认识到,您只需要让人们认为您不了解Knuth,反之亦然,那就是您不了解Knuth。如果没有,您就不会。而且,如果您了解《五环之书》的第五本书,您甚至无需谈论克努斯。而且,如果您读过ESR的《 Unix编程的艺术》并理解了Koans,您甚至不需要Knuth,因为您已经超越了复杂性的壁垒。
Christopher Mahan

20

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

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

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

您也可以轻松理解Rahasekaran,Sahni等人的算法。


真让人惊讶..我以为我是唯一在阅读本书时遇到麻烦的人..非常感谢
Rho

7
@Raymond Ho:我认为没有人真的喜欢阅读Knuth的书。我知道至少有一个人将它们放在书架上只是为了使书架看起来令人印象深刻。
FrustratedWithFormsDesigner

12

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

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

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

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


10

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

你是很雄心勃勃的,如果你想要去的地方,您可以阅读TAOCP水平轻松。我本人只是翻阅这些书,然后才将它们收起来。这个星球上可能只有少数人了解TAOCP。

查看帖子:蜥蜴人比尔(Bill the Lizard)真正读过《书籍程序员》

那里列出了许多其他书籍,这些书籍非常易读易懂,您可以立即受益

我个人喜欢:


8

我从比尔·盖茨(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知识;)

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


2
注意:您两次引用第三卷,而从未引用第二卷,而是为第三卷命名两个不同的名称。
选项

感谢您让我知道(+1)。我要说的顺序如下:首先是第一卷(基本算法),然后是第三卷(搜索和排序),然后是第四卷(组合算法),然后是第二卷(半数值算法。)
luis.espinal

6
+1 不是因为困难所以我们不敢;因为我们不敢感到困难。-塞内卡
mouviciel 2012年

4

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.