我被要求推荐一种资源(在线,书籍或教程)来学习非CS或数学专业的算法(在麻省理工学院的算法简介的意义上).显然麻省理工学院的书太过复杂,而且一些较轻的处理方法(如OReilly的Nutshell算法)似乎仍然需要在算法分析方面有一些背景知识.是否有资源以某种方式呈现材料,使得没有理论计算机科学背景的开发人员会觉得有用?
我认为学习算法的最佳方式是通过各种竞争网站.
就书籍而言,我见过的非数学专家的最佳单一介绍是数据结构和算法.它会逐行引导您逐个算法,并向您展示它如何以数学方式分解,而CLRS的优秀分析部分则不太清楚.
Skiena的算法设计手册也很出色,他的编程挑战也是如此,它本质上是通过Valladolid在线评判的教程.
但老实说,我认为初学者可以做的最有用的事情就是实现各种算法 - 比如排序,比如Quicksort,然后根据不同大小的输入计算它们.创建一个电子表格,其中包含一个显示其随时间增长的图表.很少有非专业人士会有耐心或专业知识来建立复发关系并通过它解决问题.但是你必须理解,随着时间的推移O ^ ^ 2增长的效果,并且没有更好的方法来学习这个,而不是看你自己的程序吹过它的内存堆栈.:)
我说这是一个非CS,非数学程序员,花了几个月的时间围绕着算法分析.