`

比较排序的平均情况下界

阅读更多

在本问题中,我们来证明给定n个不同的输入元素,对于任何确定或随机的比较排序算法,其期望运行时间都有下界Ω(nlgn)。首先来分析一个确定的比较排序算法A,其决策树为TA。假设A的输入的每一种排列都是等可能的。

a) 假设TA的每个叶结点都标以在给定的随机输入下到达该结点的概率。证明:恰有n!个叶结点标有1/n!,其他的标有0。

对于一个基于比较的排序算法A,不存在两个输入序列使之到达决策树的一个相同的叶子,所以决策树TA必然至少有n!个叶子。对于每个可能的输入序列,当A是一个确定算法时,输入某个特定的序列必然总是到达TA的同一个叶子,所以TA最多只有n!个叶子。因此TA有n!个叶子与每个可能的输入序列一一对应。对于n!个叶子,到达每一个叶子的可能性为1/n!,因为n!个可能的输入序列中任意一个出现的可能性都是1/n!。

b) 设D(T)表示一棵决策树T的外路径长度,也就是说,D(T)是T的所有叶结点深度的和。设T为一棵决策树,其叶子数k>1,并设RT和LT为T的右子树和左子树。证明:D(T)=D(RT)+D(LT)+k。

如果 k>1,则T的根一定不是叶子。这意味着T的所有叶子都在LT和RT中。因为每个叶子在LT或者RT中的深度h+1才是在T中的深度,所以 D(T)=D(LT)+D(RT)+k。设dT(x)=x结点在T中的深度。
于是:
D(T)=∑dT(x) (x∈leaves(T))
    =∑dT(x) (x∈leaves(LT)) + ∑dT(x) (x∈leaves(RT))
    =∑(dLT(x)+1) (x∈leaves(LT)) + ∑(dRT(x)+1) (x∈leaves(RT))
    =∑dLT(x) (x∈leaves(LT)) + ∑dRT(x) (x∈leaves(RT)) + ∑1 (x∈leaves(T))
    =D(LT)+D(RT)+k。

c) 设d(k)为所有具有k>1个叶结点的决策树D(T)的最小值。证明:d(k)=min(1<=i<=k-1){d(i)+d(k-i)+k}。

要证明d(k)=min(1<=i<=k-1){d(i)+d(k-i)+k}需证明
d(k)<=min(1<=i<=k-1){d(i)+d(k-i)+k}

d(k)>=min(1<=i<=k-1){d(i)+d(k-i)+k}
要证明d(k)<=min(1<=i<=k-1){d(i)+d(k-i)+k},我们只需证明i=1, 2, ..., k-1时d(k)<=d(i)+d(k-i)+k。对于任意i(1<=i<=k-1)我们可以发现RT有i个叶子,LT有k-i个叶子,于是D(RT)=d(i),D(LT)=d(k-i)。构造T使得RT和LT分别为T的右子树和左子树。于是:
d(k)<=D(T)
    =D(RT)+D(LT)+k
    =d(i)+d(k-i)+k
要证明d(k)>=min(1<=i<=k-1){d(i)+d(k-i)+k},我们只需证明存在i=1, 2, ..., k-1使d(k)>=d(i)+d(k-i)+k。设k个叶子的T的D(T)=d(k),让RT有i个叶子,LT有k-i个叶子。于是:
d(k)=D(T)
    =D(RT)+D(LT)+k
    >=d(i)+d(k-i)+k

d) 证明:对k的某一给定值(k>1)的范围1<=i<=k-1内的值,函数ilgi+(k-i)lg(k-i)在i=k/2处取得最小值。总结d(k)=Ω(klgk)。

设fk(i)=ilgi+(k-i)lg(k-i)。要找出fk取最小值时的i,就是找出fk的导数等于零时i的取值:
fk'(i)=d((ilni+(k-i)ln(k-i))/ln2)/di
      =(lni+1-ln(k-i)-1)/ln2
      =(lni-ln(k-i))/ln2
i=k/2时fk'(i)=0。要验证这的确是最小值,只需检测fk的二阶导在i=k/2时是否是正数:
fk''(i)=d((lni-ln(k-i))/ln2)/di
       =(1/i+1/(k-i))/ln2
fk''(k/2)=(2/k+2/k)/ln2
         =4/(k*ln2)>0 (k>1)
现在我们用带入法证明d(k)=Ω(klgk)。对于任意常数c,d(1)>=0=c*1*lg1。接下来,我们假定d(i)>cilgi (1<=i<=k-1),c是一个已定的常数。
d(k)=min(1<=i<=k-1){d(i)+d(k-i)+k}
    >=min(1<=i<=k-1){c(ilgi+(k-i)lg(k-i))+k}
    =min(1<=i<=k-1){cfk(i)+k}
    =c(k/2*lg(k/2)(k-k/2)lg(k-k/2))+k
    =cklg(k/2)+k
    =c(klgk-k)+k
    =cklgk+(k-ck)
    >=cklgk
所以 d(k)=Ω(klgk)。

e) 证明:D(TA)=Ω(n!lg(n!)),并给出排序n个元素的期望时间为Ω(nlgn)的结论。

TA拥有n!个叶子,于是D(TA)>=d(n!)=Ω(n!lg(n!))。
D(TA)表示决策树所有输入序列的路径长度,这个路径长度与运行时间成比例。每种排列出现的概率都是1/n!。于是期望运行时间为:
Ω(n!lg(n!))/n!=Ω(lg(n!))=Ω(nlgn)。

分享到:
评论

相关推荐

    数据结构与算法分析第二版 ---C语言描述(附加答案)

    排序7.1 预备知识7.2 插入排序7.2.1 算法7.2.2 插入排序的分析7.3 一些简单排序算法的下界7.4 希尔排序7.4.1 希尔排序的最坏情形分析7.5 堆排序7.5.1 堆排序的分析7.6 归并排序7.6.1 归并排序的分析7.7 快速排序...

    数据结构与算法分析C描述第三版

     4.3.6 平均情况分析   4.4 AVL树   4.4.1 单旋转   4.4.2 双旋转   4.5 伸展树   4.5.1 一个简单的想法(不能直接使用)   4.5.2 伸展   4.6 树的遍历   4.7 B树   4.8 标准库中的set和...

    数据结构与算法分析Java语言描述(第二版)

    表达式树4.3 查找树ADT——二叉查找树4.3.1 contains方法4.3.2 findMin方法和findMax方法4.3.3 insert方法4.3.4 remove方法4.3.5 平均情况分析4.4 AVL树4.4.1 单旋转4.4.2 双旋转4.5 伸展树4.5.1 一个简单的想法...

    数据结构与算法分析-Java语言描述(第2版)_2_2

    表达式树 4.3 查找树adt——二叉查找树 4.3.1 contains方法 4.3.2 findmin方法和findmax方法 4.3.3 insert方法 4.3.4 remove方法 4.3.5 平均情况分析 4.4 avl树 4.4.1 单旋转 4.4.2 双旋转 4.5...

    数据结构与算法分析-Java语言描述(第2版)_1_2

    表达式树 4.3 查找树adt——二叉查找树 4.3.1 contains方法 4.3.2 findmin方法和findmax方法 4.3.3 insert方法 4.3.4 remove方法 4.3.5 平均情况分析 4.4 avl树 4.4.1 单旋转 4.4.2 双旋转 4.5...

    算法引论:一种创造性方法.[美]Udi Manber(带详细书签).pdf

    6.4.6 排序问题的下界 6.5 顺序统计 6.5.1 最大数和最小数 6.5.2 查找第k小的数 6.6 数据压缩 6.7 串匹配 6.8 序列比较 6.9 概率算法 6.9.1 随机数 6.9.2 着色问题 6.9.3 将拉斯维加斯算法变换成确定性...

    数据结构与算法分析_Java_语言描述

    7.2.1 算法 7.2.2 插入排序的分析 7.3 一些简单排序算法的下界 7.4 希尔排序 7.5 堆排序 7.6 归并排序 7.7 快速排序 7.7.1 选取枢纽元 7.7.2 分割策略 7.7.3 小数组 7.7.4 实际的快速排序例程 ...

    数据结构与算法分析

     4.3.6 平均情况分析   4.4 AVL树   4.4.1 单旋转   4.4.2 双旋转   4.5 伸展树   4.5.1 一个简单的想法(不能直接使用)   4.5.2 伸展   4.6 树的遍历   4.7 B树   4.8 标准库...

    数据结构与算法分析_Java语言描述(第2版)]

    表达式树4.3 查找树ADT——二叉查找树4.3.1 contains方法4.3.2 findMin方法和findMax方法4.3.3 insert方法4.3.4 remove方法4.3.5 平均情况分析4.4 AVL树4.4.1 单旋转4.4.2 双旋转4.5 伸展树4.5.1 一个简单的想法...

    数据结构与算法分析 Java语言描述第2版

    表达式树4.3 查找树ADT——二叉查找树4.3.1 contains方法4.3.2 findMin方法和findMax方法4.3.3 insert方法4.3.4 remove方法4.3.5 平均情况分析4.4 AVL树4.4.1 单旋转4.4.2 双旋转4.5 伸展树4.5.1 一个简单的想法...

    数据结构与算法分析_Java语言描述(第2版)

    4.3.5 平均情况分析 4.4 AVL树 4.4.1 单旋转 4.4.2 双旋转 4.5 伸展树 4.5.1 一个简单的想法(不能直接使用) 4.5.2 展开 4.6 树的遍历 4.7 B树 4.8 标准库中的集合与映射 4.8.1 关于Set接口 4.8.2 关于Map接口 4.8.3 ...

    2019华为软件精英挑战赛杭夏赛区参赛源码+学习说明(决赛冠军).zip

    * 记录了一些路况信息,如道路在某时刻的车辆数,路上车辆的平均速度以及车辆通过道路的平均时差 (时差定义为真实用时与预估用时的差) ### 调度器 * 主要思想是按照时间片枚举,对于非预置车辆,二分当前时刻发车...

    light-tips:有关算法,php等的一些代码提示:fire:

    收藏请点star,如发现有错误欢迎PR数据结构和算法算法排序简单排序搜索/查找二分搜索树表查找算法最快时间复杂度平均时间复杂度最坏时间复杂度空间复杂度是否稳定冒泡排序Ω(n) Θ(n2) O(n2) O(1)稳定插入...

    Rating_Product_and_Sorting_Reviews

    最后一个按威尔逊下界排序。 第一个函数不会产生比例结果,因此排序不是很有意义。 例如,评论获得100票赞成和98票反对。 另一则评论有2票赞成和0票反对。 在这种情况下,两个观察得到的分数相同,但是第一个观察...

    算法设计与分析 王红梅

    2 最好、 最坏和平均情况 1 . 2 . 3 非递归算法的分析 1 . 2 . 4 递归算法的分析 1 . 2 . 5 算法的后验分析 1 .3 实验项目— — —求最大公约数 阅读材料— — —人工神经网络与 BP 算法 习题 1 第 2 章 NP 完全...

Global site tag (gtag.js) - Google Analytics