我对时间复杂性感到困惑

时间:2012-04-13 04:19:40

标签: algorithm time time-complexity

我了解算法的时间T(n)可以通过O(g(n))定义:

T(n) is O(g(n)) iff there is a c > 0, n0 > 0, such that for all n >= n0:

对于尺寸为n,的每个输入,A最多需要c * g(n)个步骤。 T(n)是大小为n的所有输入中最长的时间。

但我不明白的是Ω(g(n))的定义。定义是,对于大小为n的某些输入,A至少需要c * g(n)步。

但如果这是Ω的定义,那么我找不到任何与上限相同的算法的下限?例如,如果在最坏的情况下进行排序需要O(nlogn),那么我将无法轻松地显示Ω(nlogn)以及如何在任何大小n中必须至少有一个错误的输入nlogn步骤?让我们假设我们正在谈论heapsort。 我真的不确定我在这里缺少什么,因为无论何时我被教授新算法,某个方法的时间都是Ɵ(g(n)) or O(g(n)),但没有解释为什么它是Ɵ or O

我希望我所说的内容很清楚,如果不是那么就问你误解了什么。我真的需要清除这种混乱。谢谢。

2 个答案:

答案 0 :(得分:1)

O是一个上限,这意味着我们知道一个算法O(n lg n)渐近,在最坏的情况下最多是一个恒定的n lg n步。

Ω是一个下限,这意味着我们知道Ω(n lg n)算法不可能在最坏的情况下渐近地采用n lg n步骤。

Ɵ是一个严格限制:例如,如果算法是Ɵ(n lg n),那么我们知道它们都是O(n lg n)(所以至少和n lg n一样快)和Ω(n lg n)(所以我们知道它并不比n lg n快。)

你的论点存在缺陷的原因是你实际上是在认识Ɵ(n lg n),而不仅仅是O(n lg n)

例如,我们知道比较排序中存在Ω(n lg n)一般限制。一旦我们证明了O(n lg n)的mergesort,那意味着mergesort是Ɵ(n lg n)。请注意,mergesort 也是 O(n^2),因为它不慢于而不是n^2。 (这不是人们通常会如何描述它,但这正是正式符号的含义。)

对于某些算法,我们不知道紧张的界限;简单的计算模型中的一般3SUM problem已知为Ω(n lg n),因为它可用于执行排序,但我们只有Ɵ(n^2)算法。问题的最佳算法是n lg nn^2之间;我们可以说它是O(n^2)Ω(n lg n),但我们不知道Ɵ

还有o(f),这意味着严格低于fω(f),这意味着严格地大于f

答案 1 :(得分:0)

我熟悉的定义是T(n)是Ω(g(n)),如果对于某些n0,对于所有n>n0T(n) >= g(n)*k对于某些k 1}}。

如果是O(g(n))和Ω(g(n)),那么某些东西是Θ(n)。