我被要求推荐一些资源(在线教程、书籍或教材),以便非计算机科学或数学专业的人学习算法(类似于MIT算法导论中的算法)。显然,MIT的书太过深入,一些轻量级的教材(例如O'Reilly的《算法速查表》)似乎仍需要具备算法分析的背景知识。有没有一种资源以一种对没有理论计算机科学背景的开发人员有用的方式呈现这些材料?
我被要求推荐一些资源(在线教程、书籍或教材),以便非计算机科学或数学专业的人学习算法(类似于MIT算法导论中的算法)。显然,MIT的书太过深入,一些轻量级的教材(例如O'Reilly的《算法速查表》)似乎仍需要具备算法分析的背景知识。有没有一种资源以一种对没有理论计算机科学背景的开发人员有用的方式呈现这些材料?
我认为学习算法的最佳方式是通过各种比赛网站。
至于书籍,我看过的非数学专业人士最好的介绍是数据结构与算法。它逐行介绍一个算法,并向您展示它如何在数学上分解,这一点CLRS的分析部分不太清晰。
Skiena的算法设计手册也非常出色,他的编程挑战同样如此,它本质上是通过Valladolid在线评测系统进行的教程。
不过,老实说,我认为初学者最有帮助的事情就是实现各种算法--比如归并排序,然后是快速排序--并针对不同大小的输入对其进行时间测试。创建一个包含图表的电子表格,显示它们随时间增长的情况。很少有非专业人士会有耐心或知识来建立递归关系并通过它解决问题。但是你必须理解O n^2增长等因素对时间的影响,而没有比观察自己的程序在内存堆栈中运行更好的方法了。 :)
我是一位非计算机科学和数学背景的程序员,花了几个月的时间来理解算法分析。