在我的作业中,我以声明的形式获得了一些关于算法的信息。其中一个陈述是:“算法B的最佳运行时间为Ω(n ^ 2);”。
我认为算法的最佳运行时间总是下限,上限或紧束缚。我想知道像这样的算法是否也可以具有其最佳运行时间的上限。如果是这样,那么算法的一些例子是什么?
答案 0 :(得分:0)
case 是一类输入,您可以考虑算法的性能。 最佳情况是您的算法的运行时具有最理想的渐近边界的输入类。通常这可能意味着没有其他类可以提供较低的Omega界限。 最坏情况是您的算法运行时具有最不理想的渐近边界的输入类。通常这可能意味着没有其他类提供更高的O界限。 平均情况与边界的可取性无关,但在给定一些指定的输入分布的情况下查看运行时的预期值。等等。您可以定义任何您想要的案例。
想象一下以下算法:
Weird(a[1...n])
if n is even then
flip a coin
if heads then bogosort(a[1...n])
else if tails then bubble_sort(a[1...n])
else if n is odd then
flip a coin
if heads then merge_sort(a[1...n])
else if tails then counting_sort(a[1...n])
给定一个n
整数列表,每个整数在1到10之间(包括1和10),此算法对列表进行排序。
在最好的情况下,n
是奇数。最佳案例的下限为Omega(n)
,最佳案例的上限为O(n log n)
。
在最坏的情况下,n
是偶数。最坏情况下限为O(n^2)
,最坏情况下没有上限(因为bogosort可能永远不会完成,尽管极不可能)。
要定义平均情况,我们需要定义概率。假设偶数/奇数对于所有n
同样可能,则在平均情况下没有上限,并且平均情况下的下限是Omega(n^2)
,与最坏情况相同。为了得到平均情况的不同界限,我们需要定义分布,以便n
对于更大的列表变得越来越不可能。例如,通常传入此算法的唯一偶数列表的长度为2。