2010-10-13 31 views
11

我被要求推荐一种资源(在线,书或教程)来学习算法(在麻省理工学院介绍算法的意义上) CS或数学专业。显然,MIT的书太涉及了,一些较轻的处理方法(如OReilly的算法简介)似乎仍然需要在算法分析方面有一些背景知识。是否有资源以某种方式呈现材料,使得那些没有理论计算机科学背景的开发人员会觉得有用?学习资源非CS /数学学位算法

回答

6

我认为学习算法的最好方法是通过各种竞争网站。

  • USACO - 我个人最喜欢的,因为它提供了通过材料
  • TopCoder一个清晰的路径 - 已经提到
  • Sphere Online Judge - 伟大的,如果你想在比C/C++/Java的
  • 之外的其他语言工作

就书籍而言,我见过的非数学专家的最佳单本介绍是Data Structures and Algorithms。它将逐行介绍一种算法,并向您展示它如何以数学方式进行分解,而CLRS的其他优秀分析部分则不太清晰。

Skiena的Algorithm Design Manual也很好,他的Programming Challenges也是优秀的,它本质上是通过Valladolid Online Judge的教程。老实说,我认为初学者能做的一件最有用的事情就是实现各种算法 - 合并排序,比如说紧接着Quicksort,然后针对不同大小的输入进行排序。创建一个电子表格,其中显示随时间增长的图表。非专业人士很少有耐心或专业知识来建立一种复发关系,并通过它解决问题。但是你必须明白随着时间的推移增长的效果,并且没有更好的方法来学习这一点,而不是通过它的内存堆栈观看你自己的程序冲击。 :)

我说这是一个非CS,非数学程序员,他花了好几个月的时间来围绕算法分析。

+0

这里没有竞争,只有同事 – none 2010-10-13 14:07:50

+2

@none--我称他们为“比赛站点”,因为他们专门设置了允许人们进行各种算法比赛的训练。他们是优秀的学习工具。 – rtperson 2010-10-13 14:16:45

0

我不确定你指的是哪本麻省理工学院的书,但是规范文本是CLRS.我不认为它除了高中数学之外还真的假设任何背景。

就我个人而言,我发现在过去的几年里做TopCoder算法竞赛是我学习常用算法并将其付诸实践的最佳方式。也许你应该尝试一样。无论你做什么,我都建议你花更多的时间来实践你学习的东西,而不是头脑时间,因为这是真正内化不同技术的方法。

+1

是的我正在谈论CLRS。你是对的,因为它是一个介绍性文字,然而,它的书面大小和学术方式会威胁到许多人...... – ennuikiller 2010-10-13 14:05:36

+3

@ennuikiller - 当你第一次尝试Knuth的时候,CLRS就不那么令人生畏了。我知道,通过痛苦的经历... – rtperson 2010-10-13 14:27:29

1

我会去参加由史蒂文斯基纳所着的Algorithm Design Manual。它非常易读,并以易于理解的方式从基础开始。例如,它很好地解释了big-O符号。重点在于实际应用,这对于来自非理论领域的初学者来说是一大好处。

本书的后半部分是常见算法问题和实际解决方案的参考。作为学习辅助工具,我发现它非常宝贵,现在作为参考。

+0

感谢您的建议! – ennuikiller 2010-10-13 14:03:15