集合o(1)不为空。
首先要记住f(x) 在o(g(x)) 中当且仅当
lim_x->无穷大 { f(x) / g(x)} = 0
对于非零 g(x)
但是,更重要的是,f(x) 的候选集是什么?
有些人在所有real functions [1] 上定义它,即f:R->RU{U}(其中 U 对于函数的某些值未定义)。这意味着,我们可以使用任何实到实的函数,包括函数f(x)=1/x。
我们还可以看到g(x)=1 是一个非零函数,而且确实:
lim_x->无穷大 { 1/x / 1} = 0
这意味着,o(1) 包含函数f(x)=1/x,我们可以得出结论该集合不为空。
Knuth 还将函数 g(n) = n^-1 引用为有效函数,并在 his explanation of big O,Omega and Theta (1976) 中使用 O(n^-1)
Others,Cormen 就是其中之一,定义集合为 f:N->N,其中 N={0,1,...},这也包括f(x)=0,它又保持了存在的条件o(1).[2]
o(1)中没有复杂度函数T(n)的算法
虽然在实数上定义了很少的符号,但我们的算法复杂度函数却没有。它们是在自然数 [3] 上定义的。你要么做指令,要么不做。你不能做一半的指令,或者 e-1 指令。这意味着,复杂函数集是f:N->N。由于没有像“empty program”这样没有指令的东西(回想一下,调用它本身的开销需要时间),它甚至将这个范围缩小到f:N->N\{0}。
换句话说,对于算法T(n) 的任何复杂度函数,以及对于所有n>0、T(n)>0。
我们现在可以回到我们的公式:
lim_x->infinity { T(x) / 1} >= lim_x->infinity { 1 / 1} = 1 > 0
这表明o(1) 中没有正自然函数,我们可以得出结论,没有算法具有o(1) 中的复杂度函数。
脚注:
(1) 如果你不确定,回想一下泰勒级数,在某些时候我们会停止添加无限级数,只是提到它是O(x^n)。我们在这个大 O 符号中“隐藏”的函数不是自然数。
(2)然而,如果我们将集合 N+={1,2,...} 定义为正自然数的集合,并且将 o(g(n)) 定义为正自然函数的子集,则 o (1) 是一个空集,其证明与没有算法具有这种复杂性的证明相同。
(3) 好吧,对于一般情况,图像可以是非自然数,但我们在这里假设最坏情况的复杂性,尽管对于一般情况,这种说法仍然成立,因为没有空程序。