如何学习算法和数据结构?[关闭]


38

这是我先前的问题的延续,我曾问过有必要学习算法和数据结构。我觉得是的。

现在,我在这样的环境中工作:我永远不会有机会通过实验或实践或任何作业来学习它。什么是正确的方法,例如正确的书籍,正确的问题,正确的资源,我可以花六个月或一年或两年的时间来学习算法和数据结构?并且以一种可以将问题与数据结构和算法相关联的方式来塑造我的思想。


3
Cormen是您的朋友:)
Lukasz Madon

1
@lukas:虽然还没有完成,但其中有很多数学让我不太满意。就我对算法,数据结构及其分析的了解而言,它做得比其他任何单一来源都多得多:)
Matthieu

您也可以尝试我的项目,该项目比Wikipedia更直接地描述流行的算法和数据结构,并且几乎针对每篇文章(结构,方法,算法)都包含源代码... en.algoritmy.net
malejpavouk

Answers:


40

读。

不,真的,读。

阅读可能找到的有关算法和设计的所有内容。那里有很多很棒的书。Sedgewick算法书籍很好。Skiena的《算法设计手册》也不错。这些书以及《神话人月》一书跟随我一起走在我从事的每项工作的每个书架上。

然后问。

与您尊敬的人交谈。问他们有哪些决策点,以及为什么要做出决定。好人总是可以告诉你“我选择X是因为在这些方面它要比A,B好。我本来可以选择C的,但由于这个原因,我觉得这是一个更好的选择”。

接下来,做。

建立东西。构建您永远不会使用的东西。构建您永远不需要的东西。去写一个解决数独难题的程序。现在再去做一次。然后再次。用5种完全不同的方式构建它。构建一个生成Sudoku拼图并将其输入求解器的程序。查找哪个求解器最快。然后...

找出为什么。

“什么”几乎从来都不重要。我的意思是,是的,完成手头的项目至关重要,但是最后,如果您知道“什么”而又不知道“为什么”,那么您可能一开始就不会做。您的简历上有一个要点。去拿一个饼干,祝贺自己。“为什么”比“什么”重要得多。

从记录来看,数独就是一个例子。我花了大量的空闲时间来进行该练习,并在Kongregate上找到了大量的逻辑难题,并且在此过程中学到了很多东西。

http://www.amazon.com/Bundle-Algorithms-Parts-1-5-Fundamentals/dp/020172684X/ http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/


真的真的很好的答案!我喜欢您表达建议的方式!
paxRoman 2012年

我也随身携带Sedgewick和Skienna的书!这可能是我喜欢您的答案的另一个原因!
paxRoman 2012年

和科尔曼混合。
AruniRC

1
在互联网信息日益普及的时代,重要的是要增加:阅读书籍(当然不是唯一的)。对于长度超过2-3个广告分隔的HTML页面的问题,一致,连贯的介绍就是A Good Thing™!不要小看它(是的,当然,电子书还可以)。
Joachim Sauer 2013年

1
同意 一致性是关键。当您从十几个不同的来源获得一两个数据时,很难掌握数据结构。书籍也往往具有更好的图表(一些博客/在线资源确实有,但是作为一般性书籍更好)。Sedgewick的书籍特别好地结合了图表,易于遵循代码和描述。
Hounshell

10

演算法

我十二岁的时候在小组课上上了魔术课。魔术师的名字叫乔·卡罗塔。他曾经骗过我一次,我脱口而出:“你是怎么做到的?” 从那以后,他说了那句话,一直困扰着我。

乔的回答是:“迈克尔,如果您真的想知道该技巧是如何完成的,则必须弄清楚自己将如何做。”

好吧,这当然不是我想听的,但这确实使我专注于解决问题。从我的角度来看,这是解决问题的方法。如果我第一次尝试解决该问题时采取了17个步骤并且真的很笨拙,那么好消息是我解决了问题。

然后,通过查看我开发的解决方案并寻找改进该解决方案的方法,我将学习如何简化最终结果。后来,在我的计算机编程生涯中,我发现此过程称为“逐步优化”。我认为今天他们称之为重构。

它起作用了,但是现在仍然起作用。





1

尝试报读数据结构和算法的本科课程,与其他概念一起学习始终是一件好事。


我是计算机科学专业的毕业生,距那时已经六年了。我从来没有专注于这些主题,互联网,可用性,客户端服务器吸引了我,我只是在这些领域工作,但现在我觉得我也应该学习它们。你怎么看。
sushil bharwani

返回并继续学习:-)
Martijn Verburg 2010年

1

开始着手解决在线领域的经典问题,站点看起来可能并不那么花哨,但是,这些都是经典的编程问题,需要当今使用的许多重要数据结构和算法。

解决方案可以采用多种编程语言提交,从C / C ++到JavaScript,Lisp,Smalltalk,汇编器以及40多种语言。因此,您可以完全专注于使用任何您喜欢的编程语言来解决问题。


1

CLRS

到目前为止,这是我最喜欢的资源。我在大学计算机科学算法课程中使用了它,并在4年后最终购买了该书,自己阅读以准备我的MS Comp Sci课程。无论如何,这都不容易读懂,但是如果您努力理解所提供的一些数学/证明,然后以自己喜欢的语言实现伪代码,那是值得的。其他人提到的《算法设计手册》也是学习问题识别的好资源,但我发现CLRS对于纯净细节更胜一筹。



0

买这本书,借这本书或偷这本书!休息将:)

Rivest和Cormen撰写的算法简介。一旦您对介绍中的Mergesort进行了解释,一开始就很难遵循。一切向您展现美丽。

另外,如果您解决书中给出的问题,您会变得更好。即使从研究生毕业,我也从来没有想过要分开这本书。就是那样

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.