第7章_快速排序.ppt

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章_快速排序

25 7.3 快速排序的随机化版本 前面分析中,我们假定输入数据的所有排 列都是等可能的。但在实际应用中,这个 假设就不会总是成立。 解决的方法是,利用随机化策略,能够克 服分布的等可能性假设所带来的问题。 26 7.3 快速排序的随机化版本 快速排序的随机化版本有一个和其他随机化算 法一样的有趣性质: 没有一个特别的输入会导致最坏情况性态。 随机算法的最坏情况性态是由随机数产生器决 定的。 即使有意给出一个坏的输入也没用,因为随机化排 列会使得输入数据的次序对算法不产生影响。 只有在随机数产生器给出了一个很不巧的排列时, 随机化算法的最坏情况性态才会出现。 事实上可以证明几乎所有的排列都可使快速排序接 近平均情况性态,只有非常少的几个排列才会导致算 法的近最坏情况性态。 27 7.3 快速排序的随机化版本 我们在前文已经了解到,对快速排序来说,一 组好坏相杂的划分仍能产生很好的运行时间。 因此我们可以认为该算法的随机化版本也能具 有较好的性能。 我们可以向算法中加入随机化的成分,以便对 于所有输入,均能获得较好的平均情况性能。 在这里,我们采用随机采样的随机化技术,从 子数组A[p..r]中随机选择一个元素,即将A[r]与 从A[p..r]中随机选出的一个元素交换。 在这一修改中,我们是从p,…,r这一范围中随机 取样的,确保了在子数组的r-p+1个元素中,主 元元素x=A[r]等可能地取其中的任何一个。 28 随机化快排 RANDOMIZED-PARTITION(A,p,r) 1 i←RANDOM(p,r) 2 exchange A[r]←→A[i] 3 return PARTITION(A,p,r) 新的快速排序过程调用RANDOMIZED- PARTITION RANDOMIZED-PARTITION(A,p,r) 1 if p r 2 then q←RANDOMIZED-PARTITION(A,p,r) 3 RANDOMIZED-PARTITION(A,p,q-1) 4 RANDOMIZED-PARTITION(A,q+1,r) 29 7.4 快速排序分析和最坏情 况分析 快速排序分析 在前文我们从直觉上分析了快速排序在平均情 况下的性能为Θ (nlogn),我们将在下面定量地 分析快速排序法的性能。 最坏情况分析: 前面从直觉上可以判断出最坏情况发生在每次 划分过程产生的两个区间分别包含n-1个元素和 1个元素的时候(设输入的表有n个元素)。下面我 们来证明这种每次划分过程产生的两个区间分 别包含n-1个元素和1个元素的情况就是最坏情 况 2 2 30 7.4 最坏情况分析 设T(n)是过程Quick_Sort作用于规模为n的输入 上的最坏情况的时间,则 其中1≤q≤n-1,因为PARTITION过程产生两个区域, 每个大小至多为n-1。我们假设T(n)≤cn2 ,其中c 为常数。将归纳假设代入上式,得到: 因为在[0,n-1]上q2+(n-q-1)2关于q递减,所以当 q=0时q2+(n-q-1)2有最大值n2-2n+1。 0 ? q ? n ? 1 T ( n ) ? m a x ( T ( q ) ? T ( n ? q ? 1) ? ? ( n ) ) ( 7 .1) 2 2 0? q ? n ?1 0? q ? n ?1 31 7.4 最坏情况分析 于是有: 只要c足够大,上面的第二个小于等于号就可以 成立。这样快速排序最坏情况为Θ(n2) T (n) ? cn2 ? 2c(2n ? 1) ? ?(n)) ? cn2 32 7.4 平均情况分析 QUICKSORT的运行时间是由花在过程 PARTITION上的时间所决定的。 每当PARTITION过程被调用时,就要选出一个 主元素。于是最多调用这个过程n次 调用一次PARTITION件事与3~6行for循环次数 成正比,这个for循环每一轮迭代都要在第4行中 进行一次比较 只要知道第4行执行次数,就可以知道 QUICKSORT中for循环所化时间 33 7.4 平均情况分析 引理7.1 设当QUICKSORT在一个包含n个元素 的数组上运行时,PARTITION在第四行所做比 较次数为X。那么,QUICKSORT的运行时间为 O(n+X) 证明:根据上面的讨论,对PARTITION的调用 共有n次,每一次调用都需做固定量的工作,再 执行若干次for循环。在for循环的每一轮迭代 中,都需要执行第4行。 X ? ? ? X 总的比较次数 7.4 快速排序分析 我们定义指示器随机变量 X ij ? I{zi与z j 进行比较} 由于每个元素只和

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档