Algorithm I';我真的很困惑时间的紧迫性

Algorithm I';我真的很困惑时间的紧迫性,algorithm,time,time-complexity,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)步骤 但是如果这是Ω的定义,那么我不能找到一个与上界相同的任何算法的下界吗?例如

我理解一个算法的时间
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))要么是O(g(n))
,但没有解释为什么它要么是
Ɵ要么是O


我希望我所说的足够清楚,如果不清楚的话,那就去问问你误解了什么。我真的需要澄清这一困惑。多谢各位

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


如果同时是O(g(n))和Ω(g(n)),则为Θ(n)。

O
是一个上界,这意味着我们知道一个算法在最坏的情况下,
O(n lgn)
渐进地最多需要一个常数次
n lgn
步数

Ω
是一个下限,这意味着我们知道在最坏的情况下,
Ω(n lg n)
算法不可能采取渐进小于a
n lg n
的步骤

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

你的论点有缺陷的原因是你实际上假设你知道
O(nlgn)
,而不仅仅是
O(nlgn)

例如,我们知道在比较排序上有一个
Ω(nlgn)
一般界。一旦我们证明了mergesort的
O(nlgn)
,这就意味着mergesort是
Ɵ(nlgn)
。请注意,mergesort也是
O(n^2)
,因为它不比
n^2
慢。(人们通常不会这样描述它,但这就是形式符号的含义。)

对于某些算法,我们不知道紧界限;简单计算模型中的通用算法称为
Ω(n lg n)
,因为它可以用于执行排序,但我们只有
Ɵ(n^2)
算法。该问题的最佳算法是介于
nlgn
n2
之间;我们可以说它是
O(n^2)
Ω(n lgn)
,但我们不知道
Ɵ


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

我在软件行业工作了10年,唯一想到的是o符号……这种“对于大小为n的某些输入”的定义也适用于大o,如果我没弄错的话。这基本上意味着,对于一个较低的数字n,它可能高于/低于您的边界,通常假设一个点n_0,之后它将始终是正确的。然而,在学习时,你可能只需要其他界限,大O是最重要的界限,也是你一生中都会看到的界限。对于Ω(你答案中的第四行),你说“在最坏的情况下”,那么为什么我不能证明堆排序在最坏的情况下可以取Ω(nlogn)?根据定义,我不能通过找到一个大小为n的输入x来证明Ω,这将导致heapsort至少执行nlogn步吗?那样的话,希普索尔就会变成Ɵ(n lg n)。如果我理解你的意思,那么heapsort不可能有任何大小为n的输入x,这会导致它被Ω(nlogn)限制在以下?有没有办法知道什么时候我找不到Ω(g(n))?@shn通过使用关于计算树高度或熵的标准参数,你绝对可以证明堆排序是\Omega(n lgn)。堆排序是θ(nlgn),由该参数加上它是O(nlgn)的参数。我不确定你下一个问题的意思,但是如果你知道o(nlgn),你就找不到ω(nlgn),或者对于某些f