我了解算法的时间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
我希望我所说的内容很清楚,如果不是那么就问你误解了什么。我真的需要清除这种混乱。谢谢。
答案 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 n
和n^2
之间;我们可以说它是O(n^2)
和Ω(n lg n)
,但我们不知道Ɵ
。
还有o(f)
,这意味着严格低于f
和ω(f)
,这意味着严格地大于f
。
答案 1 :(得分:0)
我熟悉的定义是T(n)是Ω(g(n)),如果对于某些n0
,对于所有n>n0
,T(n) >= g(n)*k
对于某些k
1}}。
如果是O(g(n))和Ω(g(n)),那么某些东西是Θ(n)。