Algorithm o(1)中是否有任何函数?

Algorithm o(1)中是否有任何函数?,algorithm,big-o,time-complexity,little-o,Algorithm,Big O,Time Complexity,Little O,我的一位同事问我一个问题:seto(1)()是否为空 我的问题是:o(1)是一个空集吗?如果没有,是否存在时间复杂度为o(1)的程序 提醒,little-o的定义如下: 函数f(n)被称为在o(g(n))中,如果为正 常数c>0,存在一个常数n0>0,使得0=n0 直观地说,如果f(n)在o(g(n))中,如果它在o(g(n)),但是这个界限并不紧。集合o(1)不是空的 首先要记住,f(x)位于o(g(x))当且仅当 lim_x->无穷大{f(x)/g(x)}=0 对于非零g(x) 但是,更重要

我的一位同事问我一个问题:set
o(1)
()是否为空

我的问题是:
o(1)
是一个空集吗?如果没有,是否存在时间复杂度为
o(1)
的程序

提醒,little-o的定义如下:

函数
f(n)
被称为在
o(g(n))
中,如果为正 常数
c>0
,存在一个常数
n0>0
,使得
0=n0

直观地说,如果
f(n)
o(g(n))
中,如果它在
o(g(n))
,但是这个界限并不紧。

集合
o(1)
不是空的

首先要记住,
f(x)
位于
o(g(x))
当且仅当

lim_x->无穷大{f(x)/g(x)}=0
对于非零g(x)

但是,更重要的是,什么是候选集
f(x)

有些函数在所有[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
引用为有效函数,并在中使用
O(n^-1)

另一些,Cormen是其中之一,将集合定义为f:N->N,其中N={0,1,…},这也包括
f(x)=0
,这同样保持了o(1)的条件。[2]

o(1)

虽然在实数上定义了小o符号,但算法的复杂度函数却不是。它们是在自然数[3]上定义的。你要么做指令,要么不做。不能执行指令的一半或e-1指令。这意味着,复杂度函数集是
f:N->N
。因为没有像“”这样没有指令的东西(回想一下调用它本身的开销需要时间),它甚至将这个范围缩小到
f:N->N\{0}

换句话说,对于算法的任何复杂度函数
T(n)
,对于所有
n>0
T(n)>0

现在我们可以回到我们的公式:

lim_x->无穷大{T(x)/1}>=lim_x->无穷大{1/1}=1>0

这表明在
o(1)
中没有正的自然函数,并且我们可以得出结论,没有算法具有
o(1)
中的复杂度函数


脚音
(1) 如果你不确定,回想一下泰勒级数,在某个时刻,我们停止添加无穷级数,只提到它是
O(x^n)
。我们在这个大O符号中“隐藏”的函数不是自然数。
(2) 然而,如果我们将集合N+={1,2,…}定义为正自然数的集合,将o(g(N))定义为正自然函数的子集,则o(1)是一个空集,其证明与没有算法具有这种复杂性的证明相同。

(3) 嗯,对于一般情况,图像可以是一个非自然数,但我们在这里假设最坏情况的复杂性,尽管这种说法对于一般情况仍然成立,因为没有空程序。

根据
的定义,小o
遵循这个条件来满足(即o(1)),必须有在任意短时间内完成的算法。
这与图灵机的定义相矛盾,图灵机要求“将无限长的胶带标记成正方形(有限大小)”。唯一的解决方案是执行0指令的空图灵程序。
但是,这样的程序无法生成,因为它需要机器,机器以终止状态启动,因此不能执行任何其他程序,并且不是图灵机。

函数f(n)=0在o(1)中,因此o(1)不是空的。因为对于每一个c>0,f(n)
程序的时间复杂度是否为o(1)是一个意见(或定义)问题。如果您认为一个程序不需要基本操作就可以存在,那么它的时间复杂度为o(1)。如果你认为一个程序不存在基本操作,那么不管输入如何,它总是至少需要1个时间单位,在LITTO O的定义中挑选C=0.5给出了一个证明,它的时间复杂度不是O(1)。我不确定你关于f(x)=1/x是从R到R的函数的观点。在我看来,这不是因为它没有定义为0。我不明白关于截断泰勒级数的部分。。。一般来说,泰勒级数只是一个注释,它显示了非实数的一种常见用法。我经常看到序列的“尾部”(anx^n+an+1x^n+1+…)被简单地视为
O(x^n)
,特别是在处理x0=0时,以表明它存在而不是0,它足够小,可以忽略,因为x到x0的值足够接近。@Anonymous我通过扩展
f:R->RU{U}
的定义,解决了在0处没有定义1/x的问题,因为我在文献中确实看到了很多关于这个特定函数的情况(在这个答案中提到了其中一个),我相信这个扩展是正确的。我认为这个答案包含了太多有点切题的细节(在一些可疑的地方),也许是混淆了问题背后的模糊定义。我尝试了一个更简洁的回答。“小o”和欧米茄一样吗?@Pacane不。请看这里的定义和维基百科链接。这并不像你所说的“没有图灵机器可以有o(1)的复杂度”,但当你把o(1)称为一组算法,而它是一组函数时,我不能对答案进行修正。你的答案可能是一个非常好的答案