多项式时间和指数时间


90

有人可以解释多项式时间算法,非多项式时间算法和指数时间算法之间的区别吗?

例如,如果算法花费O(n ^ 2)时间,那么它属于哪个类别?

Answers:


85

检查这个出来。

指数比多项式差。

O(n ^ 2)属于二次类别,它是多项式的一种(指数等于2的特殊情况)并且优于指数。

指数是多少比多项式更糟糕。看看功能如何成长

n    = 10    |     100   |      1000

n^2  = 100   |   10000   |   1000000 

k^n  = k^10  |   k^100   |    k^1000

除非k小于1.1,否则k ^ 1000非常大。就像,宇宙中的每个粒子都必须每秒进行1000亿亿次运算,而这要花费数万亿亿亿年。

我没有计算出来,但是它很大。


29
我很喜欢你的全部。
约瑟芬

7
K ^ 1000是非常巨大的,如果k是明显大于1。如果k = 1是那么令人印象深刻,而如果k = 1.00069387 ......,这是2
约瑟芬

2
那n呢!与k ^ n。我知道2 ^ n(最常见),n!会更贵,但我相信对于一般k ^ n,其中k> 2,n!会便宜一些。
萨德2016年

1
我很高兴您没有说“数十亿”。:-)
汤姆·罗素

@Saad n!对于常数k,渐近总是比k ^ n更昂贵。您说得对,但是,只有在我们达到n的高值时才是这种情况。根据斯特林的近似,阶乘时间应该在n = e * k(其中e = 2.71828)附近变得更加昂贵
。– inavda

135

以下是一些在分析算法时常见的Big-O功能。

  • O(1)-恒定时间
  • O(log(n))-对数时间
  • O((log(n))c)-多对数时间
  • O(n)-线性时间
  • O(n 2)-二次时间
  • O(n c)-多项式时间
  • O(c n)-指数时间
  • O(n!)-阶乘时间

(n =输入大小,c =某个常数)

这是表示某些功能的Big-O复杂性的模型图

图模型

欢呼声:-)

图学分http://bigocheatsheet.com/


12
加一则可减少用词,提高清晰度。
user3144836 '16

1 = n ^ 0也是多项式
BigChief

46

O(n ^ 2)是多项式时间。多项式为f(n)= n ^ 2。另一方面,O(2 ^ n)是指数时间,其中隐含的指数函数为f(n)= 2 ^ n。区别在于n的功能是将n放在指数的底数还是指数本身中。

任何指数增长函数的增长(长期)都将比任何多项式函数快得多,因此这种区别与算法的效率有关,尤其是对于较大的n值。


这个答案具有权威性(良好),但我相信@dheeran的答案在指数情况下的底数是否一定为2。或者我可能误解了,只需要抹掉我的代数即可。
汤姆·罗素

21

多项式时间。

多项式是项的总和,看起来像Constant * x^k 指数意味着Constant * k^x

(在两种情况下,k是一个常数,x是一个变量)。

指数算法的执行时间比多项式的增长快得多。


18

指数(如果MINIMAL ONE EXPONENT取决于参数,则具有指数函数):

  • 例如f(x)=常数^ x

多项式(如果NO EXPONENT取决于某些函数参数,则您具有多项式函数):

  • 例如f(x)= x ^常数

4
如果用户对其进行了编辑后,我的原始答案中没有任何内容,我将不满意。这是某种“喜欢钓鱼”吗?
Erhard Dinhobl 2014年

2
我必须同意。这些变化是荒谬的。
satya on rails 2015年

3

多项式时间O(n)^ k表示操作数与输入大小的幂k成正比

指数时间O(k)^ n表示操作数与输入大小的指数成正比


0

o(n sequre)是多项式时间复杂度,而o(2 ^ n)是指数时间复杂度,如果在最佳情况下p = np,在最坏情况下p = np不相等,因为当输入大小n变长或输入大小变大时,更长的时间(最坏的情况和处理时间)会增加复杂度,并且增长率取决于输入的n大小;当输入较小时,它是多项式;当输入大小又大时,它是多项式,因此p = np不相等,这意味着增长率取决于输入的大小“ N ”。优化,坐姿,集团和独立集合也以指数到多项式相遇。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.