任何算法的次优/最差情况



在mergesort中遇到了这样的问题,想知道如何处理其他算法(insertionsort、heapsort、quicksort等(的问题

是否可以安全地假设任何算法的第n个最佳/最差排列是解决同一数据集的最佳/最坏排列的第n个步骤

示例:如果以下整数数组[1,2,3,4,5,6,7,8]的mergesort的最坏情况是[1,5,3,7,2,6,4,8]。这个整数数组的下一个最坏情况是什么?

我认为这将是解决最坏情况[1,3,5,7,2,6,4,8]时的下一个安排。我处理这样一个问题是错误的吗?

;次佳";或";次差";这个案例一开始并没有真正定义明确。";阵列在一个步骤之后的状态";,因为并不是所有的算法都会在适当的位置修改数组。


当我们说";最坏情况";对于一个算法,我们不是指一个算法的单一输入。例如,数组[5, 4, 3, 2, 1]本身是而不是,这是插入排序算法的最坏情况。该数组是长度为5的数组中插入排序的最差输入之一(即计算步骤数最高(,但我们很少对特定长度的数组感兴趣。

我们所说的";最佳情况";或";最坏情况";实际上是输入的一个无限族,因此该族的每个成员都是其自身值n的最佳或最差输入,并且该族必须包含任意大值n的输入。因此,例如:

  • 数组的无穷集{[1], [2, 1], [3, 2, 1], [4, 3, 2, 1], ...}是插入排序的最坏情况。对于来自该无穷集的输入,插入排序的渐近复杂度为Θ(n2(
  • 数组的无穷集合{[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], ...}是插入排序的最佳情况。对于来自该无穷集合的输入,插入排序的渐近复杂度为θ(n(

注意,所有数组按降序排列的(较大(无限集也是插入排序的最坏情况,而所有数组按升序排列的(较小(无限集是最好的情况。因此,该族不是唯一的,而是算法在来自任意两个"的输入上的渐近复杂性;最佳情况";(或任何两个"最坏情况"(家庭是相同的。


现在我们已经解决了这个问题,让我们思考一下;次佳";或";次差";这个案子一定意味着。如果插入排序在某些输入族上的渐近复杂度也是θ(n2(,则该族是插入排序的最坏情况;所以a"的渐近复杂度;次差";情况必须是低于θ(n2(的某个值。

但是,无论你选择多么小的差距,它都不是";"次差":

  • 如果你选择一个复杂度为Θ(n1.999(的族,那么它不是"次差";因为我可以找到另一个复杂度为θ(n1.9999(的族
  • 如果你选择一个复杂度为Θ(n2/log-n(的族,我可以找到一个它为Θ的族(n2>/log-logn(

也就是说,插入排序的可能输入的不同族的渐近复杂度形成了一个密阶,对于任何两个不同的复杂度,在这两个复杂度之间都有另一个复杂度,因此不存在"0";下一个";或";先前的";一

最新更新