是否有任何好的资源(书籍,参考,网站,应用......)解释了如何计算算法的时间复杂度?
因为,在我的脑海里很难让事情变得具体。有时它正在谈论迭代的时间复杂度为lg n;然后根据另一个循环它变成n.lg n;有时候他们会使用大的欧米茄表示法来表达它,有时候会用big-o等...
这些对我来说非常抽象。所以,我需要一个有很好解释和大量例子的资源,让我看看会发生什么。
希望我清楚地解释了我的问题。我很确定刚开始学习算法的每个人都有同样的问题。所以,也许那些经验丰富的人也可以与我们分享他们的经验。谢谢......
答案 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表示法的简短概述:
请注意,使用这些表示法时,您通常会谈论算法的最坏情况运行时间。
答案 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中的课程。