Time complexity 对于时间复杂度-指数情况,在大O中哪些常数可以忽略?

Time complexity 对于时间复杂度-指数情况,在大O中哪些常数可以忽略?,time-complexity,big-o,Time Complexity,Big O,最明显的是一个线性项上的常数,例如2n、4n和8n都是n或O(n) 但是指数常数1.6^n和2^n呢。在这种情况下,常数似乎对时间复杂度有更大的影响 此外,对于指数时间复杂度,还没有一种方便的方法来编写一个全面的解决方案 O(K^n)也许吧 在这里,他们似乎使用了O(2^n)这是否意味着所有指数复杂性都应该这样写 可能不是。你是对的,2n,4n和8n都是O(n),你也是对的,O(1.6n)和O(2n)不一样。为了理解原因,我们需要参考大O符号的定义 符号O(…)表示一组函数。函数f(n)在集合O

最明显的是一个线性项上的常数,例如2n、4n和8n都是n或O(n)

但是指数常数1.6^n2^n呢。在这种情况下,常数似乎对时间复杂度有更大的影响

此外,对于指数时间复杂度,还没有一种方便的方法来编写一个全面的解决方案

O(K^n)也许吧

在这里,他们似乎使用了O(2^n)这是否意味着所有指数复杂性都应该这样写


可能不是。

你是对的,2n,4n和8n都是O(n),你也是对的,O(1.6n)和O(2n)不一样。为了理解原因,我们需要参考大O符号的定义

符号O(…)表示一组函数。函数f(n)在集合O(g(n))中当且仅当对于某些常数c和n0,我们有f(n)≤ c*g(n)每当n≥ n0。根据这一定义:

  • 函数f(n)=8n在集合O(n)中,因为如果我们选择c=8,n0=1,我们有8n≤ 8*n适用于所有n≥ 一,
  • 函数f(n)=2n在集合O(1.6n)中是而不是,因为无论我们选择哪个c和n0,对于一些足够大的n,2n>c*1.6n。我们可以选择n>log2c+n0log21.6作为一个具体的反例
  • 然而,注意f(n)=1.6n在集合O(2n)中是,因为1.6n≤ 1*2n适用于所有n≥ 一,

对于编写指数复杂性的“全面”方法,您可以编写2O(n)。这包括具有任意基的指数函数,例如函数f(n)=16n,因为它等于24n,4n在集合O(n)中。这是一个很好的例子,因为在这种情况下,将数字2提高到一组函数的幂并没有真正的意义,但这已经足够普遍,可以理解

没错。您链接到的备忘单无法显示所有不同的复杂性,因此它会选择最常见的

简单地说,如果你有一个函数以
3^n
的速度增长。它不能归类为
2^n
,因为它将打破大O的定义

描述大O的复杂数学只是说它不可能再大了。也可以忽略线性增长常数

f(n) ≤ c * g(n) whenever n ≥ n0

@j、 a.“定义”是计算机科学中的一个标准定义,例如,它在(又称CLRS教科书)中给出。这是一般情况——c是一个常数,g(n)是一个任意函数,在n.@j.a.中不一定是线性的。这是一个严格正确的陈述,但不是问题的好答案;想象一个考试题,你得到一些代码,问“当这个代码运行时,输出是什么?”你写道,“它打印一些数字”。这可能是一个真实的说法,但这比你说的实际数字要弱得多,所以这是一个更糟糕的答案。同样,如果你说f(n)=4n在O(2^n)中,那么你是完全正确的,但这是一个比你所能做的要弱得多的陈述。