Algorithm 同一算法的不同上下界

Algorithm 同一算法的不同上下界,algorithm,analysis,asymptotic-complexity,Algorithm,Analysis,Asymptotic Complexity,所以我刚开始学习一个算法的渐近界 问题: 如果我们在算法中找到不同的上下界和下界,我们能对函数的θ说些什么??(表示ω(n)和O(n^2))。或者更确切地说,对于这种算法的紧密性,我们能说些什么呢? 我读的那本书说θ表示函数的上下界相同。 这样的话呢?那样的话,我想你什么也说不出来 Θ(f(n))的定义是: 函数是Θ(f(n))当且仅当它是Ω(f(n))和O(f(n)) 对于某些表现出这些行为的病理功能,例如在n和n^2之间振荡,它不会被定义 例如: f(x) = n if n is odd

所以我刚开始学习一个算法的渐近界
问题: 如果我们在算法中找到不同的上下界和下界,我们能对函数的θ说些什么??(表示ω(n)和O(n^2))。或者更确切地说,对于这种算法的紧密性,我们能说些什么呢?

我读的那本书说θ表示函数的上下界相同。
这样的话呢?

那样的话,我想你什么也说不出来

Θ(f(n))
的定义是:

函数是
Θ(f(n))
当且仅当它是
Ω(f(n))
O(f(n))

对于某些表现出这些行为的病理功能,例如在
n
n^2
之间振荡,它不会被定义

例如:

f(x) = n if n is odd
       n^2 if n is even
在这一点上,你的界限
Ω(n)
O(n^2)
会很紧,但是
Θ(f(n))
没有为任何函数定义


另请参见:

仅为了实用一点,对于任何
f(n)
f(n))
算法中都没有插入排序。它在
Ω(n)
中运行,因为对于已经排序的列表,在每个步骤中插入只需要一个操作,但在一般情况下,它在
O(n^2)
中运行。构造振荡或非连续的函数通常更多地是出于教学目的,但在我的经验中,这种函数很少出现在实际算法中

关于紧密性,我只听说过在这种情况下,关于算法的上下限。同样关于插入排序的例子,给定的界限是严格的,因为存在实际可以在时间上线性完成的问题实例(下界),以及不会在时间上小于二次执行的问题实例。对于插入排序有效但不严格的边界是
Ω(1)
,因为您不能在固定时间内对任意大小的列表进行排序,而
O(n^3)
是因为您总是可以在严格的
O(n^2)
时间中对
n
元素列表进行排序,这是一个较小的数量级,因此您当然可以在
O(n^3)中进行排序
。界限是为了给我们一个粗略的概念,我们可以期望算法的性能,这样我们就可以知道我们的解决方案有多高效;紧边界是最理想的,因为它们都给了我们一个粗略的想法,这个想法是最优的,因为在某些极端情况下(有时也是一般情况),我们实际上需要边界允许的所有复杂性


平均案例复杂度不是一个界限;它“仅”描述了“在大多数情况下”算法的效率;例如,最佳情况复杂度为
Ω(n)
,最坏情况复杂度为
O(n^2)
,平均情况复杂度为
O(n log n)
。这告诉我们,对于几乎所有的情况,快速排序通常与排序速度一样快(即平均案例复杂度),而有些问题的解决速度比排序速度快(最佳案例复杂度->下限),还有一些问题的解决时间比排序速度长(最坏情况复杂性->上限).

假设这些上下界是“紧的”,那么在实际中,这种算法的平均运行时间是首选的?一般函数的边界和算法的运行时间是有区别的。大多数算法都不会表现出这种行为——据我所知,都是预期或最坏情况下的运行宁时间有很大的θ界限。