1 问题
至此,总结一下已经研究过的排序算法:
insertion sort,Θ(n2)\Theta(n^2)Θ(n2)
merge sort, Θ(nlogn)\Theta(nlogn)Θ(nlogn)
quicksort, Θ(nlogn)\Theta(nlogn)Θ(nlogn)
heapsort,Θ(nlogn)\Theta(nlogn)Θ(nlogn)
- 从上面这个现象发现,这些算法的算法复杂度≥Θ(nlogn)\ge\Theta(nlogn)≥Θ(nlogn);
- 从算法的细节上看,算法的最基本的思想是比较元素大小;
从上面的发现中,可以提出这样一个猜想:
所有基于比较的排序算法,算法复杂度≥Θ(nlogn)\ge\Theta(nlogn)≥Θ(nlogn)。
2 证明结论
数学证明的思路分两步,1⃣️找到一种更加抽象的数学结构表达各种基于比较排序算法;2⃣️研究这种抽象的数学结构的性质;3⃣️利用得到的性质说明结论。
2.1 Decision-tree(抽象数学结构)
这个决策树和Machine Learning里的决策树本质上是一个意思。
- 先看一个简单的例子
- 三个元素的Decision-tree很容易画出,但是≥4\ge4≥4就不容易画出了,因为有Cn2C_n^2Cn2种比较,而每一次比较又有两种结果,这些比较的结果中一部分就可以决定全序…,已经超出人脑处理范畴,计算机也不太容易处理;
- 仔细品品基于比较的排序算法,也是一顿比较之后确定一个全序,而这顿比较恰恰是Decision-tree所有比较之一,也就是Decision-tree的一条路径;
- 不过我们不必过于纠结Decision-tree的细节结构,只需要知道它的存在性就足够解决我们今天的问题了,这就是数学抽象之美;
2.2 Decision-tree的数学性质
2.3 结论得证
决定基于比较的排序算法的复杂度是比较的次数,用decision tree就是某一个路径的高度hhh,现在已经证明整个二叉树的高度h≥Ω(nlogn)h\ge\Omega(nlogn)h≥Ω(nlogn),那就说明基于比较的排序算法的复杂度≥Ω(nlogn)\ge\Omega(nlogn)≥Ω(nlogn)。
3 强调重点
- 决定基于比较的排序算法的复杂度是比较的次数;
- 在input确定的情况下,某种基于比较的排序算法的比较序列和decision tree的结构可以确定,该算法的比较序列只是decision tree的某一条路径;
- 基于比较的排序算法随机化后仍符合上面的逻辑框架,结论仍然成立;