我被要求推荐一种资源(在线,书或教程)来学习算法(在麻省理工学院介绍算法的意义上) CS或数学专业。显然,MIT的书太涉及了,一些较轻的处理方法(如OReilly的算法简介)似乎仍然需要在算法分析方面有一些背景知识。是否有资源以某种方式呈现材料,使得那些没有理论计算机科学背景的开发人员会觉得有用?学习资源非CS /数学学位算法
回答
我认为学习算法的最好方法是通过各种竞争网站。
- USACO - 我个人最喜欢的,因为它提供了通过材料
- TopCoder一个清晰的路径 - 已经提到
- Sphere Online Judge - 伟大的,如果你想在比C/C++/Java的 之外的其他语言工作
就书籍而言,我见过的非数学专家的最佳单本介绍是Data Structures and Algorithms。它将逐行介绍一种算法,并向您展示它如何以数学方式进行分解,而CLRS的其他优秀分析部分则不太清晰。
Skiena的Algorithm Design Manual也很好,他的Programming Challenges也是优秀的,它本质上是通过Valladolid Online Judge的教程。老实说,我认为初学者能做的一件最有用的事情就是实现各种算法 - 合并排序,比如说紧接着Quicksort,然后针对不同大小的输入进行排序。创建一个电子表格,其中显示随时间增长的图表。非专业人士很少有耐心或专业知识来建立一种复发关系,并通过它解决问题。但是你必须明白随着时间的推移增长的效果,并且没有更好的方法来学习这一点,而不是通过它的内存堆栈观看你自己的程序冲击。 :)
我说这是一个非CS,非数学程序员,他花了好几个月的时间来围绕算法分析。
我不确定你指的是哪本麻省理工学院的书,但是规范文本是CLRS.我不认为它除了高中数学之外还真的假设任何背景。
就我个人而言,我发现在过去的几年里做TopCoder算法竞赛是我学习常用算法并将其付诸实践的最佳方式。也许你应该尝试一样。无论你做什么,我都建议你花更多的时间来实践你学习的东西,而不是头脑时间,因为这是真正内化不同技术的方法。
是的我正在谈论CLRS。你是对的,因为它是一个介绍性文字,然而,它的书面大小和学术方式会威胁到许多人...... – ennuikiller 2010-10-13 14:05:36
@ennuikiller - 当你第一次尝试Knuth的时候,CLRS就不那么令人生畏了。我知道,通过痛苦的经历... – rtperson 2010-10-13 14:27:29
我会去参加由史蒂文斯基纳所着的Algorithm Design Manual。它非常易读,并以易于理解的方式从基础开始。例如,它很好地解释了big-O符号。重点在于实际应用,这对于来自非理论领域的初学者来说是一大好处。
本书的后半部分是常见算法问题和实际解决方案的参考。作为学习辅助工具,我发现它非常宝贵,现在作为参考。
感谢您的建议! – ennuikiller 2010-10-13 14:03:15
- 1. 学习按位运算的资源?
- 2. 学习资源Verilog
- 3. RoR - 学习资源
- 4. AOP学习资源
- 5. Umbraco学习资源?
- 6. 学习资源Selenium
- 7. JavaScript学习资源
- 8. Ocaml学习资源
- 9. XRCed学习资源?
- 10. 学习按位编程的资源?
- 11. 学习SuiteCRM的资源?
- 12. Drupal 7的学习资源
- 13. mockito的学习资源
- 14. 学习资源Django + AJAX
- 15. 学习谓词的资源
- 16. Qt的学习资源
- 17. 学习QML的资源?
- 18. 学习蚂蚁 - 资源
- 19. 资源学习jQuery的
- 20. 要学习的资源MSDeploy
- 21. 学习资源Joomla 1.6
- 22. OpenGL 4.1学习资源
- 23. 学习资源ASP.NET MVC 2.0
- 24. 要学习的资源EJB
- 25. 要学习的资源REXX
- 26. 要学习的资源KnockoutJS
- 27. 学习pyqt的好资源?
- 28. 学习资源Spring MVC
- 29. 学习CLR的资源
- 30. 学习图算法
这里没有竞争,只有同事 – none 2010-10-13 14:07:50
@none--我称他们为“比赛站点”,因为他们专门设置了允许人们进行各种算法比赛的训练。他们是优秀的学习工具。 – rtperson 2010-10-13 14:16:45