今天,我们在一次讲座中讨论了一种非常简单的算法,该算法可使用二进制搜索在排序数组中查找元素。我们被要求确定元素数组的渐近复杂度。
我的想法是,显然,或更具体,因为\ log_2 n是最坏情况下的操作数。但是我可以做得更好,例如,如果我第一次点击搜索到的元素-那么下界是\ Omega(1)。
讲师将解决方案表示为因为我们通常只考虑算法的最坏情况输入。
但是,仅考虑最坏的情况时,如果给定问题的所有最坏情况具有相同的复杂度(\ Theta是我们所需要的,对吗?),用和意义何在?
我在这里想念什么?
今天,我们在一次讲座中讨论了一种非常简单的算法,该算法可使用二进制搜索在排序数组中查找元素。我们被要求确定元素数组的渐近复杂度。
我的想法是,显然,或更具体,因为\ log_2 n是最坏情况下的操作数。但是我可以做得更好,例如,如果我第一次点击搜索到的元素-那么下界是\ Omega(1)。
讲师将解决方案表示为因为我们通常只考虑算法的最坏情况输入。
但是,仅考虑最坏的情况时,如果给定问题的所有最坏情况具有相同的复杂度(\ Theta是我们所需要的,对吗?),用和意义何在?
我在这里想念什么?
Answers:
Landau符号表示函数的渐近界。有关O,Ω和Θ之间差异的说明,请参见此处。
最坏,最佳,平均或命名时间描述了不同的运行时函数:一个代表给定的最高运行时间序列,一个代表最低的运行时间,依此类推。
就其本身而言,两者彼此无关。定义是独立的。现在我们可以继续对运行时函数制定渐近边界:上限值(),下限值(Ω)或两者(Θ)。我们可以为最坏,最好或任何其他情况做。
例如,在二分搜索中,我们得到的最佳情况运行时渐近线和Θ (log n )的最坏情况渐近线。
请考虑以下算法(或过程,一段代码或其他):
Contrive(n)
1. if n = 0 then do something Theta(n^3)
2. else if n is even then
3. flip a coin
4. if heads, do something Theta(n)
5. else if tails, do something Theta(n^2)
6. else if n is odd then
7. flip a coin
8. if heads, do something Theta(n^4)
9. else if tails, do something Theta(n^5)
此函数的渐近行为是什么?
在最佳情况下(为偶数),运行时间为Ω (n )和O (n 2),而不是任何东西的Θ。
在最坏的情况下(为奇数),运行时间为Ω (n 4)和O (n 5),但不等于任何东西的Θ。
在的情况下,运行时间为Θ (n 3)。
这是一个人为的示例,但这仅是为了清楚地说明界限与大小写之间的区别。如果您执行的活动没有任何已知的界限,则可以通过完全确定的过程使区分变得有意义。
不必要。在这种情况下,即对排序数组进行二进制搜索,您可以看到:(a)二进制搜索最多执行步骤;(b)有输入实际上迫使这许多步骤。因此,如果T (n )是二进制搜索的最坏情况输入的运行时间,则可以说T (n )= Θ (log n )。
另一方面,对于其他算法,您可能无法精确算出,在这种情况下,对于最坏情况的输入,运行时间的上限和下限之间可能会有差距。
现在,对于搜索排序数组,还有更多的事情要做,那就是任何用于搜索排序数组的算法都需要检查。但是,对于这种下限,您需要分析问题本身。(这里的理念是:在任何时候,搜索算法不排除一些一套小号⊂ [ Ñ ]位置在那里的寻找元素可以是那么一个精心制作的输入可以保证。|小号|减少最多2倍。)
You are right, many people sloppily use when they should use . For example, an algorithm analyst may end up with a time function and immediately conclude that , which is technically right, but a sharper assertion would be . I attribute this oblivious behavior to two reasons. First, many see to be more popular and acceptable, possibly because of its long history. Recall that it was introduced more than a century ago, whereas (and ) were introduced only in 1976 (by Donald Knuth). Second, it could be because is readily available on the keyboard, whereas is not!
,反之则不一定正确。