Jic*_*hao 4 algorithm complexity-theory big-o
根据big O f(n) <= C*g(n)
(意思是f(n) = O(g(n)
)的定义,可以推断出:
f(n) <= C
f(n) <= 2C
Run Code Online (Sandbox Code Playgroud)
我认为这两者之间没有太大的区别.我能想到的是:
f(n) = 1 - 1 / n
f(n) = 2 - 1 / n
C = 1
Run Code Online (Sandbox Code Playgroud)
但是这两种复杂性有什么不同,因为两者都是不变的复杂性?
你能展示一些现实世界的代码来证明O(1)和O(2)之间的差异.
jas*_*son 17
O(1)
和之间没有区别O(2)
.算法,分类O(1)
的O(2)
,反之亦然.事实上,O(c1)
是O(c2)
对任何积极的常量c1
和c2
.
O(c)
在哪里c
是正常数只是意味着运行时受限于输入或问题大小.由此可以清楚地(非正式地)说明O(1)
并且O(2)
是平等的.
形式上,考虑一个函数f
在O(1)
.然后有一个常数c
,f(n) <= c * 1
所有人n
.我们d = c / 2
.那f(n) <= c = (c / 2) * 2 = d * 2
表明那f
是O(2)
.同样,如果g
是O(2)
有一个恒定的c
,使得g(n) <= c * 2
对所有n
.我们d = 2 * c
.那g(n) <= c * 2 = d = d * 1
表明那g
是O(1)
.因此O(1) = O(2)
.