算法计算时间复杂度的资源

时间:2008-10-31 09:51:50

标签: algorithm

是否有任何好的资源(书籍,参考,网站,应用......)解释了如何计算算法的时间复杂度?

因为,在我的脑海里很难让事情变得具体。有时它正在谈论迭代的时间复杂度为lg n;然后根据另一个循环它变成n.lg n;有时候他们会使用大的欧米茄表示法来表达它,有时候会用big-o等...

这些对我来说非常抽象。所以,我需要一个有很好解释和大量例子的资源,让我看看会发生什么。

希望我清楚地解释了我的问题。我很确定刚开始学习算法的每个人都有同样的问题。所以,也许那些经验丰富的人也可以与我们分享他们的经验。谢谢......

7 个答案:

答案 0 :(得分:10)

我认为Cormen,Leiserson,Rivest和Stein最好的书是Introduction to Algorithms

这是on Amazon

答案 1 :(得分:5)

伙计们,你们都推荐真正的复杂性理论书籍--Arora和Barak包含各种各样的东西,如PCP,交互式证明,量子计算和扩展器图表主题 - 大多数程序员/软件开发人员从未听说过的东西或将永远使用。 Papdimitriou属于同一类别。 Knuth很难读懂(而且我是一名CS /数学专业)并对事情的运作方式没有直觉。

如果您想要一种简单的方法来计算运行时间并获得分析的味道,请尝试Kleinberg和Tardos的第一章左右“算法的设计和分析”,它掌握了基本原理,然后你可以解决更难的问题。

答案 2 :(得分:2)

我在大学里读过Christos Papadimitriou的 Computational Complexity 并且非常喜欢它。这不是一件容易的事情,这本书很长,但写得很好(即可以理解,适合自学),它包含许多有用的知识,而不仅仅是“如何计算算法x的时间复杂度”

答案 3 :(得分:2)

我同意Introduction to Algorithms是一本好书。有关例如更详细的说明如何解决递归关系,请参阅Knuth的Concrete Mathematics。关于计算复杂性本身的好书是由Papadimitriou编写的。但如果您只想计算给定算法的复杂性,那么最后一本书可能会有点过于彻底。

关于big-O / -Omega表示法的简短概述:

  • 如果你能给出一个能及时解决问题的算法 T(c *(n log n)) c 是一个常数),那么时间复杂度那个问题是 O(n log n)。 big-O摆脱了 c ,即任何不依赖于输入大小 n 的常数因子。 Big-O在运行时给出上限,因为您已经(通过给出算法)显示您可以在这段时间内解决问题。
  • 如果您能够证明解决问题的任何算法至少花费时间 T(c *(n log n))而不是 Omega(n log n)中的问题。 Big-Omega在问题上给出了下限。在大多数情况下,下限比上限更难以证明,因为你必须证明任何可能的问题算法至少需要 T(c *(n log n)。知道下限意味着知道达到该下限的算法。
  • 如果您有下限,例如 Omega(n log n)一种解决当时问题(上限)的算法,而不是 Theta中的问题(n log n )。这意味着已知该问题的“最佳”算法。当然,这种符号隐藏了常数因子 c ,它可能非常大(这就是我在引号中写出最佳值的原因)。

请注意,使用这些表示法时,您通常会谈论算法的最坏情况运行时间。

答案 4 :(得分:1)

维基百科中的

Computational complexity theory文章有一系列参考文献,包括书籍草稿Computational Complexity: A Modern Approach的链接,Sanjeev Arora和剑桥大学出版社Boaz Barak的教科书。

答案 5 :(得分:0)

关于这个主题的经典书籍是Knuth的Art of Computer Programming系列。他们在理论和形式上都很重要,所以在解决它们之前要先研究一下你的微积分。

答案 6 :(得分:0)

有时会在Discrete Mathematics之前提供Introduction to Algorithms中的课程。