基于比较的的排序的下界
2018-03-07 21:17
2246 查看
基于比较的的排序的下界
问题的提出前面我们我们讨论的了从O( n2n2)到O(n * lg n )的排序方法.这些排序方法都一个共同点:它们只能依赖元素的比较来判断其顺序,或者换一种说法是仅仅是依靠比较来进行排序的。那么基于比较树模型的排序算法是否存在一个“界限”使得,该种算法不能继续改进。
算法问题的下界的定义
对于解决算法问题P的任意算法A,如果a的最坏情况时间复杂度总是满足W( n ) = Ω( l(n)),则称 l( n ) 为该算法问题最坏情况时间复杂度的下界
(平均情况时间复杂度的下界类似可定义)。
决策树的引入
决策树是一颗2叉数,其所有内部节点表示的是两个元素xixi与·yiyi之间的一次比较。其内部节点的左右子节点对应一种情况(xixi < yiyi 或 xixi < yiyi)(假定元素互异),其叶子节点表示一种排序结果。任何基于比较的排序算法的执行过程都可以看作进行若干次两个元素的比较,最终得到一个排序结果。这一过程可以表示为决策树上从根节点到叶子节点的一条路径,这一路径的长度对应为算法的执行代价。而我们关注的求解最坏情况时间复杂度问题则变成了如何求根节点到叶子节点最长路径长度问题 — 即决策树的高度。
图为三个元素排序的决策树
二叉树的一些性质
1 深度为T的二叉树最多有2T2T个叶子节点
2.具有 L 个·叶节点的二叉树深度至少是 ⌈ log L⌉
比较排序最坏情况时间复杂度的下界
对于 N 个数的排序问题,其决策树必定有 N! 个叶子节点。
由上述性质2.我们可以得到二叉树深度至少为 ⌈ log N! ⌉.即只使用比较的排序算法在最坏情况下需要⌈ log N! ⌉次比较。
log (N!) = log ( N * ( N - 1 ) … * 1 )
= log N + log ( N - 1 ) + … log 1
≥ log N + log (N - 1) + … + log ( N2N2 )
≥ N2N2 * log N2N2
≥ N2N2 * log N - N2N2
= Ω( N * log N )
比较排序平均情况时间复杂度的下界
1 该类算法的平均情况时间复杂度对应其所有可能执行代价的加权平均。基于决策树,比较排序的平均情况时间复杂度对应与根节点到所有叶结点的路径长度的加权和,每条路径的权重就是该路径上的叶节点对应算法输入的概率。假设所有可能的输入等概率地出现,每个叶节点(每种排列顺序)出现的概率相同(1N!1N! )。
2 外部路径长度
定义一棵树T的外部路径长度 (EPL)为根节点到所有叶子节点的路径长度的和。
故平均情况时间复杂度W( n) = EPLLEPLL(L:叶结点数)。进一步比较排序平均情况时间复杂度的下界就是 EPLLEPLL的下界。
3 引理:越平衡的2叉树具有越少的EPL.(因为对于决策树,我们已经知道叶结点数为一固定值,所以当EPL最小时,越可能是其下界)
详细证明见:详细推导过程参照 机器工业出版社 黄宇编著的《算法设计与分析》一书
4 一颗越平衡的二叉树(考虑满二叉树),其深度至少为log L ,则EPL至少为 L * log L。故比较排序平均情况时间复杂度的下界W( n ) = Ω( L∗logLLL∗logLL )
= Ω( log L )
= Ω( log N! )
= = Ω( N * log N ),
相关文章推荐
- 基于比较的排序,时间复杂度下界是o(nlogn)的证明
- 基于比较的排序,时间复杂度下界是o(nlogn)的小证明
- 基于比较的排序,时间复杂度下界是o(nlogn)的小证明
- 排序(上):基于比较的排序
- 基于比较的排序算法的最优下界---NlogN
- 86 dataS 决策树--比较排序的下界
- 非基于比较的排序算法之一:计数排序
- 基于比较的内部排序总结
- 为什么说任何基于比较的算法将 5 个元素排序都需要 7 次?
- 基于非比较的排序:计数排序(countSort),桶排序(bucketSort),基数排序(radixSort)
- Python基于比较的排序
- 为什么说任何基于比较的算法将 5 个元素排序都需要 7 次?
- 基于比较的内部排序总结
- 【排序结构5】 基于比较的内部排序总结
- 基于比较的算法之二:选择排序
- 为什么说任何基于比较的算法将 5 个元素排序都需要 7 次?
- 基于比较的排序总结-结合qsort&&std::sort分析
- 算法 基于比较的排序
- 基于比较的算法之四:快速排序
- 线性时间排序: 三种非基于比较的内部排序算法