到目前为止,我主要集中在如何正确地设计代码,使其尽可能地可读性和可维护性。因此,我总是选择学习更高层次的编程细节,例如类交互、API设计等。
我从来没有真正觉得算法特别有趣。因此,即使我能为我的程序想出一个好的设计,即使我能想出一个给定问题的解决方案,它也很少是最有效的。
有没有一种特殊的思考问题的方式,可以帮助你找到尽可能有效的解决方案,或者这只是一个简单的练习和/或记忆的问题?
另外,你可以推荐哪些在线资源来教你针对不同问题的各种有效算法?
发布于 2011-03-12 22:10:17
以数据为主。如果你围绕正确的抽象数据结构(ADT)设计你的程序,你通常会得到一个干净的设计,算法很自然地遵循,当性能不足时,你应该能够“插入”更有效的算法。
强大的数学和逻辑背景在这里很有帮助,因为它允许你在高层次上可视化你的程序,如函数,集合,图,序列等之间的交互。然后你决定集合是否需要排序(平衡的BST,O(lg n)操作)或不需要(哈希表,O(1)操作),序列上需要支持哪些操作(类向量或类列表),等等。
如果你想学习一些算法,可以买一本好书,比如Cormen et al。并尝试实现主要的数据结构:
int或字符串)发布于 2011-03-12 22:08:22
Introduction To Algorithms是一本很棒的书,可以让你思考不同算法/数据结构的效率。
这本书的作者还在麻省理工学院教授一门算法课程。你可以在here上找到大多数演讲
发布于 2011-03-12 22:15:13
我要说的是,要想出好的算法(这实际上是好的设计IMHO的一部分),你必须发展一种思维方式。这最好通过学习算法设计来实现。我所说的学习不仅仅是了解教科书中涵盖的所有常见算法,而是真正了解它们是如何以及为什么工作的,并能够将其中包含的基本思想应用于您试图解决的实际问题。
我建议读一本关于算法的好书(我最喜欢的是CLRS)。对于在线资源,我推荐TopCoder Algorithm Tutorials中的系列文章。
我不明白你为什么要把练习和记忆相提并论。死记硬背对你一点帮助都没有(你可能已经知道这一点),但练习是必不可少的。如果你不能应用你学到的东西,那就不是真正的学习。你可以在各种在线编程竞赛/益智网站上练习,比如SPOJ,Project Euler和PythonChallenge。
https://stackoverflow.com/questions/5282969
复制相似问题