最坏情况最小排序时间复杂性定理

时间:2018-06-20 16:40:52

标签: algorithm sorting time-complexity

我正在研究排序算法,并且坚持定理,证明在n向量上的排序算法至少在最坏的情况下具有时间复杂度

n * log2(n)+(1/2)* log2(n)-log2(e)* n + O(1)

您的证明使用引理,该引理指出具有k个叶子的二叉树的高度至少为ceiling(log2(n))。定理指出,您可以使用n!建立二元决策树!叶子并使用斯特林公式得出结果!它应该是排序算法领域中的经典定理。

我的问题是我不知道n如何!叶二叉树正在构建!例如,如果我们要对向量v =(4,3,1)进行升序排序,该如何用3!= 6个叶子构建决策树?

对于可能出现的错误以及未正确使用数学公式表示歉意。

提前感谢大家!

2 个答案:

答案 0 :(得分:2)

这里是一个例子:

if (v[0] <= v[1]) {
  if (v[1] <= v[2]) {
    // Sorted order: v[0], v[1], v[2]
  } else {
    // v[1] > v[2], so v[1] is a maximal element
    if (v[0] <= v[2]) {
      // Sorted order: v[0], v[2], v[1]
    } else {
      // Sorted order: v[2], v[0], v[1]
    }
  }
} else {
  // v[0] > v[1]
  if (v[1] > v[2]) {
    // Sorted order: v[2], v[1], v[0]
  } else {
    // v[1] <= v[2], so v[1] is a minimal element
    if (v[0] <= v[2]) {
      // Sorted order: v[1], v[0], v[2]
    } else {
      // Sorted order: v[1], v[2], v[0]
    }
  }
}

此决策树有6个叶子,最多需要3个决策才能到达叶子。

通常,您实际构建决策树的方式称为“排序算法”。如果在所有可能的输入上运行算法,则可以跟踪它如何做出有关交换元素的决策并建立相应的决策树。

答案 1 :(得分:1)

通过排序算法构建决策树很容易。排序算法可以尝试的每个比较将可能的一组命令分为两组。当只剩下一个可能的顺序时,排序算法即告完成。

您实际上将可能的决策以树(<,>)的形式写到(左,右)中。如果横向绘制树,则向上或向下。

          a<b?
           |
     Y-----------N
     |           |
    b<c?        a<c?
     |           |
  Y-----N     Y-----N
  |     |     |     |
(abc)  a<c? (bac)  b<c?
        |           |
     Y-----N     Y-----N
     |     |     |     |
   (acb) (cab) (bca) (cba)

现在尚未解决的普遍问题是这个。最好的决策树是什么? :-)