我被要求推荐一种资源(在线、书籍或教程)来学习非计算机科学或数学专业的算法(从麻省理工学院算法入门的意义上讲)。显然,麻省理工学院的这本书太复杂了,一些较轻的处理方法(比如OReilly的算法)似乎仍然需要你在算法分析方面有一些背景知识。是否有资源以一种没有理论计算机科学背景的开发人员会发现有用的方式来呈现材料?
发布于 2010-10-13 22:05:02
我认为学习算法的最好方法是通过各种竞赛网站。
之外的另一种语言工作,这是很棒的
就书籍而言,我所见过的最好的非数学专家入门单曲是Data Structures and Algorithms。它将带您逐行浏览算法,并向您展示它是如何数学分解的,这是CLRS的其他优秀分析部分不太清楚的内容。
Skiena的Algorithm Design Manual也很优秀,他的Programming Challenges也是如此,它本质上是通过Valladolid在线法官提供的教程。
不过,老实说,我认为初学者能做的最有帮助的事情就是实现各种算法--比如说,合并排序,然后是快速排序--并根据不同大小的输入对它们进行计时。创建一个带有图表的电子表格,以显示他们随时间的增长情况。很少有非专家会有耐心或知道如何建立一个递归关系并解决它的方法。但是您必须了解O n^2随时间增长的影响,没有比观看您自己的程序遍历其内存堆栈更好的学习方法了。:)
我是作为一个非CS、非数学程序员说这番话的,他花了几个月的时间把我的思想围绕在算法分析上。
发布于 2010-10-13 21:58:10
我会去找史蒂芬·斯基耶纳写的“Algorithm Design Manual”。它的可读性非常好,并且以一种易于理解的方式从基础知识开始。例如,它很好地解释了big-O符号。重点放在实际应用上,这对于来自非理论领域的初学者来说是一个很大的奖励。
本书的后半部分是对常见算法问题及其解决方案的实用方法的参考。我发现它作为学习辅助工具是非常有价值的,现在作为参考。
发布于 2010-10-13 21:55:43
我不确定你指的是哪本麻省理工学院的书,但经典的文本是CLRS.,我不认为它真的假设了除了高中数学之外的任何背景。
就我个人而言,我发现在过去的几年里参加TopCoder算法竞赛是我学习常用算法并将其付诸实践的最佳方式。也许你也应该试一试。无论你做什么,我建议你花更多的时间在键盘上实践你学到的东西,而不是在书中学习,因为这是真正内化不同技术的方法。
https://stackoverflow.com/questions/3924401
复制相似问题