Algorithm big-O表示法是做最好、最差和最差的工具吗;算法的平均案例分析?

Algorithm big-O表示法是做最好、最差和最差的工具吗;算法的平均案例分析?,algorithm,big-o,Algorithm,Big O,big-O表示法是对算法进行最佳、最差和平均情况分析的工具吗? 或者big-O仅仅用于最坏情况分析,因为它是一个上界函数?它是大O,因为数量级表示为O(n)、O(logN)等 算法的最佳、最差和平均情况都可以用大O表示法表示 有关应用于排序算法的示例,请参见 请注意,可以根据多个独立的标准(如内存使用或CPU使用)对算法进行分类。通常,在两个或多个标准之间存在折衷(例如,使用很少CPU的算法可能会占用相当多的内存)。大“O”是渐近复杂性的度量,也就是说,当N变得非常大时,算法的大致规模 如果b

big-O表示法是对算法进行最佳、最差和平均情况分析的工具吗?
或者big-O仅仅用于最坏情况分析,因为它是一个上界函数?

它是大O,因为数量级表示为O(n)、O(logN)等

算法的最佳、最差和平均情况都可以用大O表示法表示

有关应用于排序算法的示例,请参见

请注意,可以根据多个独立的标准(如内存使用或CPU使用)对算法进行分类。通常,在两个或多个标准之间存在折衷(例如,使用很少CPU的算法可能会占用相当多的内存)。

大“O”是渐近复杂性的度量,也就是说,当N变得非常大时,算法的大致规模

如果best&Batter收敛到相同的渐近复杂度,则可以使用单个值,也可以单独计算它们(例如,某些排序算法在排序或几乎排序的数据上与在未排序的数据上具有完全不同的特性)

然而,符号本身并没有传达这一点,你是如何使用它的


。。。或者big-O仅用于最坏情况分析

如果你只给出一个算法的渐近复杂度,它不会告诉读者最好和最坏情况是否(或如何)与平均值不同

如果你给出了最佳情况和最坏情况的复杂性,它会告诉读者它们有什么不同


默认情况下,如果列出一个值,则可能是平均复杂度,它可能(也可能不是)收敛于最坏情况。

大ω通常用于表示下限,即最佳情况下的运行时间,而不是大O。。我忘了平均值是什么,我想它可能只是~O(fn)iirc.@hexist:不,大ω是用来表示函数的渐近下界,而不是算法。例如,快速排序是
Theta(nlogn)
平均情况(因此
O(nlogn)
),而它是
Theta(n^2)
最坏情况(因此也是
Omega(n^2)
)。(换句话说,大O、大Omega和θ都可以应用于任何分析)@amit-hmm,我的理解是函数和算法可以在这种情况下互换使用,θ符号用于表示函数在给定函数的上下边界(也就是说,最好和最坏的情况都是以给定函数的某些常数倍数为界的)。从规范上讲,如果你的函数/算法的运算顺序大不相同,比如它通常在常数时间内运行,但有时运行到n^2,你会说它是ω(1),~O(1),但有时是O(n^2).在这种情况下,它没有θ函数,因为ω(1)!=O(n^2)@hexist这种混淆很常见,但仍然是错误的。大θ、ω和O用于表示函数类,不同的分析用于区分最差/最佳/平均/摊销/…情况。O、θ、ω中的任何一个都可以用于它们。记住,大O的定义纯粹是关于函数的——以及如何区分如果一个函数是大O还是小O。没有理由不把这个定义应用到我们使用的任何分析中。比如你的例子,你可以说算法是θ(1)最佳情况,
θ(n^2)
最坏的情况-当然,如果你能证明的话。不是真的,但我会更直接地说明。如果你想要3位信息,你需要给出3位信息-大O符号适用于每个部分。