《算法导论》学习(九)----为什么比较排序算法时间复杂度的下界是确定的?

系列文章

《算法导论》学习(一)---- 插入排序和归并排序
《算法导论》学习(七)----堆排序和优先队列(C语言)
《算法导论》学习(八)----快速排序(C语言)
《算法导论》学习(九)----为什么比较排序算法时间复杂度的下界是确定的?
《算法学习》学习(十)----计数排序,基数排序,桶排序(C语言)



前言

本文介绍了决策树,主要是对于比较排序算法的一个总结性概述
针对算法的时间性能,进行总体性偏向于本质的研究


一、决策树

1.什么是决策树?

决策树是一颗完全二叉树,每一个结点都有两个孩子结点,它可以表示在给定输入规模的情况下,某一特定排序算法对所有元素的比较操作。其中,控制,数据移动等其它操作都被忽略了。

比较排序算法可以被抽象为一个决策树

2.决策树的规则

1.在决策树中,每一个结点都以** i : j i:j i:j**标记,代表 i 与 j 进行比较 i与j进行比较 ij进行比较。其中, i i i j j j满足 1 ⩽ i , j ⩽ n 1\leqslant i,j\leqslant n 1i,jn,n是输入序列的元素个数。

2.决策树的路径上标记有比较的方式

3.比较成功的序列采用 ⟨ a 1 , a 2 , a 3 , . . . , a n ⟩ \langle{a_1,a_2,a_3,...,a_n}\rangle a1,a2,a3,...,an的方式,该序列永远都是决策树的叶子结点

3.比较排序在决策树上如何运转?

下面这张给出了插入排序作用于三个元素输入序列的决策树情况
在这里插入图片描述

二、比较排序算法的下界

定理

在最坏情况下,任何比较排序算法都需要做 Ω ( n l g n ) 次比较 在最坏情况下,任何比较排序算法都需要做\Omega(nlgn)次比较 在最坏情况下,任何比较排序算法都需要做Ω(nlgn)次比较

分析

在决策树中,从根结点到任意可达的叶子结点之间最长简单路径的长度,表示的是对应的排序算法中最坏情况下的比较次数。因此,一个排序算法最坏情况下的比较次数就等于决策树的高度。
那么:
该决策树的下界,也就是比较排序算法运行时间的下界 该决策树的下界,也就是比较排序算法运行时间的下界 该决策树的下界,也就是比较排序算法运行时间的下界

具体分析:
考虑一颗高度为 h h h,具有 l l l个可达结点的决策树,它对应一个对n个元素输入的比较排序。输入数据有 n ! n! n!种可能的排列。
我们可以得到下面的式子:
n ! ⩽ l ⩽ 2 h n!\leqslant l\leqslant 2^h n!l2h
对该式两边取对数,我们有:
h ⩾ l g ( n ! ) = Ω ( n l g n ) h\geqslant lg(n!)=\Omega(nlgn) hlg(n!)=Ω(nlgn)
此处的公式可以参考文章:
《算法导论》学习(二)---- 算法时间规模与函数的增长


具体的比较排序算法可以参考:
《算法导论》学习(一)---- 插入排序和归并排序
《算法导论》学习(七)----堆排序和优先队列(C语言)
《算法导论》学习(八)----快速排序(C语言)

猜你喜欢

转载自blog.csdn.net/weixin_52042488/article/details/126813412