哪个Big-O渐近增长更快

哪个Big-O渐近增长更快,big-o,time-complexity,asymptotic-complexity,Big O,Time Complexity,Asymptotic Complexity,我最近卷入了一场争论/辩论,我正试图对正确的解决方案做出明确的判断 众所周知,但到底有多快,足以“隐藏”可能添加到其中的所有附加常量 假设我有一个愚蠢而简单的程序(没有特定的语言): 假设输入是n,那么其复杂性显然是O(n!)(或者甚至是ϴ(n!),但这与这里无关) 现在让我们假设这个程序: for i from 0 to n do: for j from 0 to n do: for k from 0 to n! do: ; // nothing

我最近卷入了一场争论/辩论,我正试图对正确的解决方案做出明确的判断

众所周知,但到底有多快,足以“隐藏”可能添加到其中的所有附加常量

假设我有一个愚蠢而简单的程序(没有特定的语言):

假设输入是
n
,那么其复杂性显然是
O(n!)
(或者甚至是
ϴ(n!)
,但这与这里无关)

现在让我们假设这个程序:

for i from 0 to n do:
    for j from 0 to n do:
        for k from 0 to n! do:
            ; // nothing
Bob声称:“这个程序的复杂性显然是
O(n)O(n)O(n!)=O(n!n^2)=O((n+2)!)

Alice回答:“我同意你的看法,bob,但实际上,如果你说复杂性是
O(n!)
,那就足够了,因为
O(n!n^k)=O(n!)
对于任何
k>=1
常数来说都是如此。”


Alice在Bob的分析笔记中是对的吗?

Alice是错的,Bob是对的

在使用limit时,回想一下与大O表示法等效的定义:

f(n) is in O(g(n)) iff 
lim_n->infinity: f(n)/g(n) < infinity

因此,
n*n^k
不在
O(n!)

Amit解决方案是完美的,我只想添加更多的“人性化”解决方案,因为初学者可能很难理解定义

定义基本上是这样的-如果你增加值
n
,并且方法
f(n)
g(n)
只“不同”
k
,其中
k
是常数并且没有变化(例如
g(n)
总是高出约100倍,无论
n=10000
还是
n=1000000
),那么这些函数具有相同的复杂性

如果
g(n)
n=10000
高100倍,比
n=1000000
高80倍,那么
f(n)
具有更高的复杂性!因为当
n
不断增长时,
f(n)
最终会在某个点到达
g(n)
,然后它会比
g(n)
增长得越来越多。在复杂性理论中,你感兴趣的是,它将如何以“无限”(或更可想象的极高n值)结束

如果你比较
n
n*n^2
,您可以看到,对于
n=10
,第二个函数的值要高出
10^2=100倍。对于
n=1000
,它的值要高出
1000^2=1000000
倍。正如你所能想象的那样,差别会越来越大

f(n) is in O(g(n)) iff 
lim_n->infinity: f(n)/g(n) < infinity
lim_n->infinity: (n!*n^k) / n! = lim_n->infinity n^k = infinity