我有一个在O(√x)
中运行的算法,其中x
是我的输入。
现在,我不想使用x
,而是使用x
的位数,即n
。我知道x = O(2ⁿ)
,因此我的算法应为O(√x) = O(2n/2)
。是不是?
我无法理解的是,据我所知,O(2n/2)
相当于O(2ⁿ)
(换言之:2n
和2n/2
以相同的速度增长)。但这可能是对的,因为这意味着O(√x)
等同于O(x)
,这是假的(x
和√x
不会增长相同的速度)。
我做错了什么?
答案 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符号而言,在谈论指数行为时,不同的基础并不等同。