学习有效的算法

Pau*_*nta 15 algorithm complexity-theory

到目前为止,我主要集中在如何正确设计代码,使其尽可能可读和尽可能可维护.所以我总是选择了解编程的更高层次细节,例如类交互,API设计等.

我从未真正发现的算法特别有趣.因此,即使我可以为我的程序设计一个好的设计,即使我能够提出解决特定问题的解决方案,但它很少是最有效的.

是否有一种特殊的方式来思考可以帮助您提出尽可能高效的解决方案的问题,或者在实践和/或记忆方面是否简单?

此外,您可以推荐哪些在线资源,教您针对不同问题的各种高效算法?

Fre*_*Foo 12

数据占主导地位.如果围绕正确的抽象数据结构(ADT)设计程序,通常会得到一个简洁的设计,算法非常自然地遵循,当缺乏性能时,您应该能够"插入"更高效的算法.

数学和逻辑的强大背景在这里有所帮助,因为它允许您将程序高度可视化为函数,集合,图形,序列等之间的交互.然后,您可以决定是否需要对集合进行排序(平衡BST, O(LG n)的操作)或否(哈希表,O(1)的操作),需要支撑在序列(向量状或列表等)等什么样的操作

如果你想学习一些算法,可以得到一本好书,如Cormen等.并尝试实现主要数据结构:

  • 二叉搜索树
  • 通用二叉搜索树(不仅仅是int字符串或字符串)
  • 哈希表
  • 优先级队列/堆
  • 动态数组

  • 我完全同意.清晰的编码有助于抽象出真正的底层算法(即"实现细节").因此,您阅读一本好书(例如Cormen)变得与编写代码正交. (3认同)

Spo*_*ood 7

"算法简介"是一本很棒的书,可以帮助您思考不同算法/数据结构的效率.

本书的作者还教授麻省理工学院的算法课程.你可以在这里找到大多数讲座