注意:请不要将此标记为作业!我不是学生,这不是作业。我是一名软件工程师,对我的旧数据结构进行了清理工作。算法教科书,并试图记住我多年前学到的东西,我似乎无法在网上找到任何东西。
我记得一个特定的讲座,在我的教科书中得到了强化,算法界限(上,下和下)和案例(最佳,平均和最差)不是同一个。但是对于我的生活,我不记得这两个概念是如何不同的。
对我来说,如果某些算法是O(n)最坏情况,那么它可以执行比某些线性函数更差的任务,例如f(n) = cn + k
。由于在最坏的情况下我们得到保证,在我看来它的上限也是线性的。
我知道我错了,我无法弄明白为什么。
我是一个情境学习者,所以如果有人能够提供一个有意义的例子,其中最坏情况不是上限,或者最佳情况不是下限,或者平均情况不是紧张的,那么可能会得到通过我最快的。
感谢您明白这一点!
答案 0 :(得分:8)
考虑一个quicksort变体,它检查数组是否已经排序,如果没有,则使用第一个元素作为数据透视表进行排序。
如果数组已经排序,那么最佳情况是O(n)。这是最佳案例行为的上限,如果没有意义,这是有意义的。
随机输入的平均情况是O(n 3/2 )和Ω(n)。好吧,我作弊很轻微,因为它也是Theta(n log n),但是这个想法是边界并不总是紧张,当我描述平均情况界限时,这种缺乏紧张感可能会表现出来。
最坏情况是Theta(n 2 ),如果数组是反向排序的,因为子问题是如此不平衡(每次,我们以最大元素为中心,导致大小为0和n-1的子问题,而不是大约n / 2和大约n / 2)。这是对最坏情况的严格限制,并表明算法确实可以那么糟糕,但不会更糟。 Quicksort也是O(n 3 ),但不是Theta(n 3 ),因为quicksort没有导致立方行为的输入族。
答案 1 :(得分:1)
案例是指正在调查的运行时间类型,而绑定是指该运行时间的函数。
假设算法具有O(f(n))的最坏情况运行时间相当于说f(n)是渐近上限,用于最坏情况运行时间算法。
3种情况(最佳情况,平均情况和最坏情况)和5种渐近界限(上(O),上紧(o),下(Ω),紧下(ω)和紧( Θ))给出15种不同的方式来表达运行时间。
如果在没有案例的情况下指定了绑定,则可能会出现混乱或灾难。例如,排序算法的下限可以是Θ(n)和Θ(n lg n),这取决于我们是在讨论最佳情况还是最坏情况。如果Θ(n 3 )最坏情况下的运行时间使工厂停止工作,则Θ(1)平均情况下的运行时间是不好的。
答案 2 :(得分:0)
这与最差/最佳/平均情况不同,对于和函数都是相等的。最差/最好的情况只是决定了对输入的乐观态度。
答案 3 :(得分:0)
描述:
以上摘自here。
举个例子: 假设我们有一个算法需要将数组中的每个元素与数组中的每个其他元素进行比较。一个简单的实现可能如下所示:
for my $i (0 .. $#array) {
for my $j (0 .. $#array) {
next if $j == $i;
# Compare $i, $j
}
}
这是O(N ^ 2)。经过一些测试我们认为这太慢了,所以我们做了一点优化。
for my $i (0 .. $#array - 1) {
for my $j ($i + 1 .. $#array) {
# Compare $i, $j
}
}
我们刚刚将运行时间缩短了一半 - YAY!猜猜看,Big-O保持相同的O(N ^ 2)。这是因为N ^ 2/2只有一个变量部分。
这部分来自here。
答案 4 :(得分:0)
考虑一个取N + 1个整数列表的函数。假设如果第一个元素为0,则该函数调用Th(log n)或Th(n)函数来处理数据,并且随机均匀地进行确定。类似地,如果第一个元素是1,则调用Th(n ^ 2)来处理数据。对于第一个元素的所有其他值,调用Th(n ^ 1.5)或Th(n log n)函数。关于这个函数的复杂性,我们可以说以下内容:
最坏情况:Omega / Omicron / Theta(n ^ 2)
另外,请记住复杂性涉及算法的实现;你总是可以通过添加虚拟循环来增加算法的时间复杂度,而复杂性/可计算性理论研究算法的最小复杂性来解决计算问题。微妙的区别。
答案 5 :(得分:0)
谈论案例意味着您正在考虑算法在某些特定输入上的性能。 最坏情况意味着“对于我们即将讨论的内容,考虑在所有可能的输入上运行所有内容并将该语句应用于适用于最慢的运行”,依此类推。
界限是一种不平等,一种声明某种东西小于或大于其他东西。对复杂性的限制表明,无论其复杂性函数是什么,它都比指定的东西更大或更小。 Big-O,little-o,Omega,都是告诉你有关界限的符号。如果某事是O(n),那意味着所描述的算法的运行,在满足参数n的输入上,将永远不会比某些线性函数更差,渐近地(或者,甚至更令人难以忍受的细节,存在一些N和c, st为所有n> N,cn击败算法的运行时间。)
那不是那么糟糕:O,o,Omega,只是告诉你这个问题的界限。然后,您可以讨论最佳案例或最坏情况的界限,等等。例如,大多数排序算法将是最佳情况O(n)。你可以在最坏的情况下设置边界,这显然也适用于所有情况。 Theta是一种特殊的符号:Theta(f)表示O(f)和Omega(f),这意味着界限很紧,无法改进。这是一个确切的陈述。
一种在某些输入上执行得更好的算法,其他人不会有Theta界限,但在谈论特定输入时,你总是喜欢找一个。例如,将关于O限制的语句加强到关于限制于其最坏情况输入的算法的Theta语句中通常并不太难。
因此,每个算法都有复杂性,您可能很难识别或证明它。您希望获得最小的上限(下推O)和最大下限。证明算法的特定情况,或平均所有输入,通常也会为您提供有趣和有用的信息。