Algorithm 指数函数的大O表示法

Algorithm 指数函数的大O表示法,algorithm,Algorithm,我注意到1000n或10n的大O和O(n)是一样的,但是2^n和3^n的大O是不同的:O(2^n)和O(3^n),我不明白的是为什么我们不能忽略这个例子中的常数(2或3)是否有任何数学证明可以证明这一点?因为不存在满足不等式3^n的k常量,即使对于最初的提问者来说,这可能不再有用,我认为可以用更简单的方法来接近它 O-符号的基本防御:iff(g)将在O(g(n))中, 然后存在一个有理数c,它认为f(g)=c*g(n),对于n>=n0(n0是一个你自己选择的数字) 让我们尝试将此应用于O(2^n

我注意到1000n或10n的大O和O(n)是一样的,但是2^n和3^n的大O是不同的:O(2^n)和O(3^n),我不明白的是为什么我们不能忽略这个例子中的常数(2或3)是否有任何数学证明可以证明这一点?

因为不存在满足不等式
3^n的
k
常量,即使对于最初的提问者来说,这可能不再有用,
我认为可以用更简单的方法来接近它

O-符号的基本防御:iff(g)将在O(g(n))中,
然后存在一个有理数c,它认为f(g)=c*g(n),对于n>=n0
(n0是一个你自己选择的数字)

让我们尝试将此应用于O(2^n)中的3^n
3^n=2^n*c
3^n=2^n*(3^n/2^n)
3^n=2^n*(3/2)^n
3^n=2^n*1.5^n

这意味着c=1.5^n,这不是一个有理数,而是一个指数函数


另一方面,对于O(2^n)中的3^n,我们将得到2^n0,这意味着如果你取任何c>1,它将大于0.67^n,从n=0到两个复杂度,f(n)和g(n)你应用了极限: lim{n->\inf}f(n)/g(n)你有三个可能的答案:

1) lim{n->\inf}f(n)/g(n)=0; 这意味着f(n)∈ O(g(n))和g(n)∉ O(f(n))

2) lim{n->\inf}f(n)/g(n)=+/-inf; 这意味着f(n)∉ O(g(n))和g(n)∈ O(f(n))

3) lim{n->\inf}f(n)/g(n)∈ 实数; 这意味着f(n)∈ O(g(n))和g(n)∈ O(f(n))

然后去demostrade 2^n∈ O(3^n)您这样操作吗

lim{n->\inf}2^n/3^n=lim{n->\inf}(2/3)^n=0

并且被证明了,我们也证明了3^n∉ O(2^n),很容易看出2/3<1,这使得极限收敛到0,那么极限的结果取决于常数,我的意思是,如果0inf}a^n=0,如果a>1,lim{n->inf}a^n=inf

为了更好地理解检查:算法介绍,第三版 托马斯·H·科曼、查尔斯·E·莱瑟森、罗纳德·L·里维斯特和克利福德·斯坦


我是算法教授,希望能对你有所帮助。小心。

不要忽略大O符号中的常量。忽略系数。2和3是基数,不是系数。你能说出大Oh的定义吗?记住,大Oh有一个数学定义,不应该完全凭直觉使用。在我看来,记住“你有时可以忽略常数”是一个坏习惯。准确地说,你展示了一个反例来反驳
O(3^n)=O(2^n)
。特别是,使用上面给出的参数,
f(n)=3^n
位于
O(3^n)
中,但不在
O(2^n)
中。因此,通过公理,这些集合是不相等的Extensionality@roliu:我不知道那条公理是什么,但是的,那是隐含的论点;)这是最流行的集合论中的一个公理,ZFC:。它只是说“如果两个集合包含相同的元素,那么它们是相等的”。从来没有人在真正的证明中引用过它,但我只是试图说服SO开始使用实际的数学推理而不是直觉(通过极其冗长的数学术语)。如果您只是想在编写代码时决定使用哪个实现,那么可以使用直觉。当有人说“证明这一点”时,我认为你应该,你知道,使用数学:)@roliu:Hmm,我认为这里的大多数人会满足于“如果两个集合没有相同的成员,那么它们就不相等”,而不必求助于证明/行话!集合论公理可能有点超出了SO的范围(与CS/Math StackExchange相反)。但是谢谢你的链接,我总是有兴趣学习一些有趣的数学…(而且…七个月后,我通过另一条途径得出了同样的问题,专门寻找@rliu提供的信息。我想这只是为了展示。)