非计算机/数学专业学习算法的资源

12

我被要求推荐一些资源(在线教程、书籍或教材),以便非计算机科学或数学专业的人学习算法(类似于MIT算法导论中的算法)。显然,MIT的书太过深入,一些轻量级的教材(例如O'Reilly的《算法速查表》)似乎仍需要具备算法分析的背景知识。有没有一种资源以一种对没有理论计算机科学背景的开发人员有用的方式呈现这些材料?

3个回答

5

我认为学习算法的最佳方式是通过各种比赛网站。

  • USACO - 我个人最喜欢它,因为它为学习提供了明确的路径
  • TopCoder - 已经提到了
  • Sphere Online Judge - 如果你想使用C/C++/Java以外的其他语言进行工作,这是一个很好的选择

至于书籍,我看过的非数学专业人士最好的介绍是数据结构与算法。它逐行介绍一个算法,并向您展示它如何在数学上分解,这一点CLRS的分析部分不太清晰。

Skiena的算法设计手册也非常出色,他的编程挑战同样如此,它本质上是通过Valladolid在线评测系统进行的教程。

不过,老实说,我认为初学者最有帮助的事情就是实现各种算法--比如归并排序,然后是快速排序--并针对不同大小的输入对其进行时间测试。创建一个包含图表的电子表格,显示它们随时间增长的情况。很少有非专业人士会有耐心或知识来建立递归关系并通过它解决问题。但是你必须理解O n^2增长等因素对时间的影响,而没有比观察自己的程序在内存堆栈中运行更好的方法了。 :)

我是一位非计算机科学和数学背景的程序员,花了几个月的时间来理解算法分析。


这里没有竞争,只有同事。 - none
2
@none - 我称它们为“竞赛网站”,因为它们专门设置用于让人们练习各种算法竞赛。它们是极好的学习工具。 - rtperson

2
我会选择Steven Skiena的《算法设计手册》。这本书非常易读,从基础开始讲解,易于理解。例如,它很好地解释了大O符号。重点是实际应用,这对于来自非理论领域的初学者来说是一个很大的优势。
书的后半部分是常见算法问题和解决方案的参考。我发现它对我的学习非常有价值,现在也成为我的参考资料。

谢谢推荐! - ennuikiller

0

我不确定你指的是哪本MIT书,但经典的文本是CLRS. 我认为它并没有假设除高中数学外的任何背景知识。

就我个人而言,在过去几年里参加TopCoder算法比赛是我学习常见算法并将其付诸实践的最佳方式。也许你应该尝试一下。无论你做什么,我建议你花更多时间动手实现你所学到的东西,而不是把头埋在书本里,因为这才是真正内化不同技术的方法。


1
是的,我在谈论CLRS。你说得对,它是一本入门教材,但是它的篇幅和学术写作方式可能会让很多人望而生畏... - ennuikiller
3
当你先尝试了Knuth,再去看CLRS时,后者就不会显得那么吓人了。我通过痛苦的经历得出这个结论... - rtperson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接