在Cormen定理3.1中说
例如,插入排序的最佳情况运行时间为 big-omega(n),而最差情况< / strong> 插入排序的运行时间为 Big-oh(n ^ 2)。 因此,插入排序的运行时间介于 big-omega(n)和 bigoh(n ^ 2)
之间现在,如果我们看一下练习3.1-6,它会问
证明算法的运行时间为 Big-theta(g(n)),如果最差情况运行时间 Big-oh(g) (n))及其最佳案例运行时间为 big-omega(g(n))
答案 0 :(得分:2)
这里没有矛盾。该问题仅表明Big-Theta(g(n))
被Big-O(g(n))
和Big-Omega(g(n))
渐近紧密约束Big-Theta(g(n))
。如果您证明了这个问题,那么当且仅当Big-O(g(n))
和Big-Omega(g(n))
之间运行时,您才能证明该函数在Big-Omega(n)
中运行。
插入排序从Big-Oh(n^2)
运行到Big-Theta(n^2)
,因此插入排序的运行时间不能与Big-Theta(n^2)
紧密绑定。
事实上,CLRS从不使用{{1}}来严格限制插入排序。
答案 1 :(得分:2)
我觉得你在这里有点困惑。让我为你澄清几点。
运行时间可能意味着两件事:程序的实际运行时间,或者像theta或big-oh这样的有界函数(所以它有助于称之为时间复杂度,以避免我们将使用运行时间来计算程序的实际运行时间,并将时间复杂度用于表示Big-Oh / theta表示法。
拿起Big-Oh阅读我的回答here。
一旦你明白了Big-Oh,其他功能就很容易落实到位。当我们说T(n)是Omega(g(n))时,我们指的是某个点k的右边曲线cg(n) )从下面限制运行时间曲线。换句话说:
T(n)>=c.g(n) for all n>=k, and for some constant c independent of input size.
而theta符号就像是说“我只是一个函数,但使用不同的常量,你可以让我从上到下限制运行时间曲线”
因此,当我们说T(n)是theta(g(n))时,我们的意思是
c1.g(N)==ķ
现在我们知道这些功能意味着什么,让我们看看CLRS在混乱中的位置。
例如,插入排序的最佳案例运行时间是big-omega(n),而插入排序的最坏情况运行时间是Big-oh(n ^ 2)。因此,插入排序的运行时间介于big-omega(n)和Bigoh(n ^ 2)
之间
这里的运行时间CLRS表示实际运行时间T(n)。措辞不好,你误解不是你的错。实际上我会继续说它们是错的。没有什么比像落在之间,一个函数在集合O(g(n))中,或者不是。所以这是一个错误。
证明算法的运行时间为Big-theta(g(n)),如果其最坏情况下的运行时间为Big-oh(g(n))且其最佳运行时间为big-omega(g( n))的
这里CLRS表示运行时间函数T(n),他们希望你弄清楚时间复杂度。
答案 2 :(得分:0)
没有矛盾,因为CLRS没有提到插入类型为theta(N ^ 2)。