上限和下限的“正确”定义是什么?


19

令是输入的问题在最坏情况下的运行时间。让我们把这个问题有点通过固定怪异的但的。ñ ˚F Ñ = ñ 2 Ñ = 2 ķ ˚F Ñ = Ñ Ñ = 2 ķ + 1f(n)nf(n)=n2n=2kf(n)=nn=2k+1

  1. 那么,问题的下限是什么?据我了解,它只是的下限。但是我们知道表示存在常数,n 0,因此对于所有n > n 0f n > k n 2都是不正确的。因此,似乎我们只能说f n = Ω n 。但是通常,我们会称问题的下限为Ω n 2f n = Ω n 2kf(n)f(n)=Ω(n2)kn0n>n0f(n)>kn2f(n)=Ω(n)Ω(n2), 对?

  2. 假设g(n)=Ω(n2),这意味着存在常数kn0,使得对于所有n>n0g(n)>kn2。我们还假设问题的运行时间为g(n)。如果我们可以将所有素数这个问题都简化n为另一个问题(具有相同的输入大小),可以说另一个问题的运行时间的下界为Ω(n2)


12
这就是为什么数学家使用lim sup和lim inf的原因。
Peter Shor

1
因此,我想我理解其中的区别。我认为邮政人员只会无限地了解Omega。但是,如果我想作一个明显的区分,除了扩展它之外,我还能使用其他任何符号吗?
魏宇

3
ķÑķÑ2LIM INFÑ
lim supg(n)n2k
kg(n)kn2ÑķÑ2Ñ
lim infg(n)n2k
g(n)kn2n
 

12
@Wei:对于大多数复杂性理论家来说(请参见下面的Lance),您的函数为θ(n ^ 2);对于大多数算法学家(请参阅Knuth或CLRS),您的函数是Ο(n ^ 2)和Ω(n)。这两种表示法在其子社区中几乎是但不是完全标准。更糟的是,这两个子社区重叠很多!因此,如果使用的是哪种符号很重要,则必须明确说明使用的是哪种符号。(幸运的是,这几乎没有关系。)
Jeffε11年

2
@Jeffe。我相信您应该发表评论作为答案。
chazisop 2011年

Answers:


13

的正确定义是存在某个,从而对于无限多的,。下界的无限定义经常处理您的问题,这也是我们在实践中如何使用它的方式。ķ > 0 Ñ ˚F Ñ ķ Ñ 2f(n)=Ω(n2)k>0nf(n)kn2

我在2005年对此发表了一篇文章

有些教科书正确地定义了这个定义,有些则没有。


14
克努特与不同意你:portal.acm.org/citation.cfm?id=1008329
Jeffε

4
CLRS和Wikipedia也不同意您的意见。常为无限的定义是一个值得注意的替代方法,但似乎使用不广泛。
匿名

我认为这些定义都同意当设定例外的是测量0
卡特Tazio Schonwald

2
“无限频繁”定义的问题在于它们通常不排除“无限频繁”定义。因此,我们得出的可怕结果是,使用此定义但还有,其中和在某些情况下是严格的阶感。我真的不喜欢这个 至少@Carter提出的措施0例外的建议不太可怕,而仍然允许比通常的命令更好的命令。˚F Ñ = Ö Ñ + 1 Ω Òf(n)=Ω(n2) f(n)=o(n+1)Ωo
安德拉斯·萨拉蒙

2
@Jukka:不,我在这里滥用。正如您所暗示的,我必须更正我的论点以使用而不是。因此,让我在不使用或情况下重申实际的反对意见。在“无限频繁”的情况下,会有一个异常:,,而。因此,甚至都没有预订。ø ø ø ø Ñ = Ω ˚F Ñ ˚F Ñ = Ω Ñ 2Ñ Ω Ñ 2ΩoOooOn=Ω(f(n))f(n)=Ω(n2)nΩ(n2)Ω
安德拉斯·萨拉蒙

4

使用Knuth的定义,您只能声明。如您所见,这不是直观的,而是在Vitányi和Meertens函数称为“野生”的情况下发生。他们提议定义f(n)Ω(n)

Ω(f(n))={gδ>0:n0>0:n>n0:g(n)δf(n)}.

(这与Lance的定义相同。)使用此定义。f(n)Ω(n2)


2

我不知道使用最广泛的方法,但是我相信我知道最古老的用法(无论如何对于计算机科学而言)。

在1965年Hartmanis&Stearns的论文“关于算法的计算复杂性”中,推论2.1为:

如果和是时间函数,例如则UTinfnT(n)U(n)0SUST

其中是可在计算的所有问题的复杂度类别。对于某些整数以及所有和,T(n)必须服从,但这不必是时间可构造的。SKO(K(n))T(n)n/kknT(n)T(n+1)

您的函数遵循的第一条规则,但不遵循第二条规则。k=1

推论2.2是以上的要求,使用上限,但仍具有这些要求。我猜想随着这些年来算法变得越来越复杂,要求可能已经放宽了。


2

我认为我们应该区分两件事:

  • 函数的下限
  • 问题的下限(算法)

对于函数,当我们确定订单时,将随之定义下限/上限。如果阶关系是渐近主化(忽略常数因子)

fg:c,nm>n. f(x)cg(x)

那么该定义是和的通常定义。两者都广泛用于组合领域等其他领域。ΩOΩ

但是,当我们谈论问题的下限(一种算法)时,我们真正要说的是该问题需要一定数量的资源(用于运行解决问题的算法)。通常,复杂度类是通过类的函数进行参数化的,我们简单地说问题是由函数来界定的,但这仅适用于出色的函数(例如算法的运行时间)是单调等)。在这种情况下,我们要说的是我们需要运行时间来解决该问题,即少于运行时间是不够的,这正式成为Lance的定义,算法的运行时间不在。ñ 2 Ñ 2 ø Ñ Time(t(n))n2n2o(t(n))

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.