如何比较指数复杂性?

时间:2015-03-20 14:50:08

标签: big-o time-complexity complexity-theory asymptotic-complexity exponential

我有一个在O(√x)中运行的算法,其中x是我的输入。

现在,我不想使用x,而是使用x的位数,即n。我知道x = O(2ⁿ),因此我的算法应为O(√x) = O(2n/2)。是不是?

我无法理解的是,据我所知,O(2n/2)相当于O(2ⁿ)(换言之:2n2n/2以相同的速度增长)。但这可能是对的,因为这意味着O(√x)等同于O(x),这是假的(x√x不会增长相同的速度)。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您的假设O(2n)O(2n/2)相同,是错误的。

limn → ∞ 2n/2n/2 = limn → ∞ 2n/sqrt(2)n = limn → ∞ (2/sqrt(2))n = ∞

因此2n/2位于o(2n)(小-o)。

一般情况下:设a,b ∈ ℝ

                               = ∞   ∀ a > b   ⇒   aⁿ ∈ ω(bⁿ)
limn → ∞ an/bn = limn → ∞ (a/b)n = 1   ∀ a = b   ⇒   aⁿ ∈ Θ(bⁿ)
                               = 0   ∀ a < b   ⇒   aⁿ ∈ o(bⁿ)

答案 1 :(得分:1)

O(2n/2) 等同于O(2n)

就O符号而言,在谈论指数行为时,不同的基础并不等同。