【发布时间】:2011-07-28 02:25:22
【问题描述】:
我经常被似乎需要神奇的逻辑飞跃(由于墨水短缺导致大量缩小的符号)的递归算法稍微难住了。
我意识到,另一种方法是简单地记住所有常见算法的大 O 表示法,但在某些时候,这种方法会失败。例如,我很高兴公开冒泡排序、插入排序、二叉树插入/删除、归并排序和快速排序的性能,但不要让我提出 AVL 树或 Djikstra 的最短路径算法的性能。我的脑袋。
我在哪里可以得到:
- 关于使用单词而不是大量符号的递归算法分析的讨论
- 练习题以确认我新获得的理解实际上是正确的
例子:
不好:
西格玛 v e T (1+cv)
可能的“好”等价物:
树中 1 个节点所需的工作量(即 1 + 一个节点的子节点数),然后对树中原始节点为根的每个元素执行一次。
旁注:
我可以简单地观看每个算法的视频,因为没有办法让一个人的声音变成下标(或任何其他扭曲),但我怀疑与阅读文字描述相比,这会花费过多的时间。
更新:
这里是解决问题的 1 个来源:http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/(这解决了上面的 #2)
【问题讨论】:
-
你应该学会适应用符号来传达这些想法。它高效、准确,是几乎每个人都使用的语言。
-
@Jason:如果您是 CS 学生或专注于数学和理论。对于一个优秀的程序员来说,理解其中的含义就足够了。
-
+1 对杰森的观点。为了让记谱和分析更舒服(实际上比大多数人更好!),我推荐这本精彩的书 Concrete Mathematics: A Foundation for Computer Science。 前两章就足够了(可能还有最后一章),但是写得很好,让人忍不住想读其他章节。
-
我应该评论说我在原始帖子中大大低估了自己。 :D 我对 sigmas、aleph-nulls 等东西非常方便。当我获得学士学位时,我的入门课程要求教科书中的材料呈现方式我只是遇到了麻烦(因此我对墨水短缺的评论)。