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


19

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

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

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


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

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

3
ķ克(Ñ)≥ķÑ2LIM INF克(Ñ)
lim supg(n)n2≥k
kg(n)≥kn2克(Ñ)≥ķÑ2Ñ
lim infg(n)n2≥k
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为:

如果和是时间函数,例如则UTinfn→∞T(n)U(n)≥0SU⊆ST

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

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

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


2

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

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

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

f⪯g:∃c,n∀m>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.