[工学]Ch6~Ch9 排序、顺序统计.ppt

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

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * §9.3 最坏时间为线性的选择算法(续) 时间分析 关键是:n个元素中至少有多少个元素x? ∵在Step2中所选中值至少有一半≥x //不考虑有相同值元素 ∴?n/5?/2 组中除2组外,每组有3个元素大于x(有一组可能少于5个元素,还有包含x的组中只有两个元素大于x) * §9.3 最坏时间为线性的选择算法(续) 时间分析(续) * §9.3 最坏时间为线性的选择算法(续) 时间分析 * §9.3 最坏时间为线性的选择算法(续) 时间分析 * Ex 9.2-1, Ex 9.3-8 * * * * * * * * * * * * * * * * * * * * * * * * * * * * §7 快速排序 (续) 平衡划分 快排平均时间接近于最好情况,设划分总是产生9:1划分 * §7 快速排序 (续) 平衡划分 ∵任何底大于1的对数与以2为底的对数之间只相差 一常数因子 ∴任何常数比例(如99:1, 999:1)的划分,树高仍为O(lgn),从而快排时间为O(n lgn) * §7 快速排序 (续) 随机版本 快速排序的平均性能假定:输入的所有排列是等可能的 算法随机化是指: 算法行为不仅由输入确定,而且与随机数发生器产生的值有关。强迫输入分布是随机的 * §7 快速排序 (续) 随机版本 但随机化算法分析较困难 该算法非常有效,在排序过程中,某次随机选择最坏不会影响总体效果 Ex 7.2-5 上机作业:写2个快排版本比较之 * Chapter 8. 线性时间内的排序 * §8.1 下界 可用判定树证明基于比较的排序时间下界为 假定:n个输入元素均为1到k范围内的整数。 这里k不一定等于n,元素不一定唯一。当k=O(n)时,排序时间为O(n) Note: 若n个互不相同的整数值为1~n,则 for( i=1; i≤n; i++ ) B[ A[i] ]?A[i] §8.2 计数排序 * 基本思想 设C是计数器: Step1:将A中值为i的元素个数记录在C[i]中,即C[i]值是A中等于i的元素个数 Step2:将C[i]的值改为A中小于等于i的元素个数,则C[i]即为值i的终点位置 Step3:将A[j]依据C[A[j]]的值放入正确位置B[C[A[j]]]上,并修改C[A[j]]的值 §8.2 计数排序(续) * 算法 §8.2 计数排序(续) * 它小于比较排序的下界 ,key:它利用了元素的实际值作为数组的下标及数组直接寻址的特征来实现多路转移 缺点:k不能太大,否则浪费时间和空间 计数排序是稳定的,关键是第4个循环从后往前处理每个A元素 §8.2 计数排序(续) * d位数字或字符 for i ?1 to d do 使用稳定排序对A的第i位进行排序//线性时间,可用计数排序 §8.3 Radix Sort * d是与n无关的常数吗? 不一定。设n个数的取值范围是0~nc,c是常数,通常是≥1的整数 例如对十进制整数,nc需要的位数是: 改进 §8.3 Radix Sort(续) * 可操作性 将输入看作n为基的n进制数不好操作。通常被排序的数是存放在一个计算机字内,将其视为二进制数 若要降低T(n)的值,又要可操作,方法是: 使位数d减小,使基k增大 设n个数,每数有b位二进制数 这里可将b位数视为基k=2r的d位数,每位数字的范围是:0~2r-1 §8.3 Radix Sort(续) * 于是,基数排序时间为: §8.3 Radix Sort(续) * §8.3 Radix Sort(续) * 与其它排序比较 注意:基数排序不是就地排序,花费的存储空间较多,尤其是基k较大时。 Ex8.3-4 §8.3 Radix Sort(续) * 假定:输入是由一个随机过程产生的[0, 1)区间上均匀分布的实数 基本思想 将区间[0, 1)划分为n个大小相等的子区间(桶),每桶大小1/n:   [0, 1/n), [1/n, 2/n), [2/n, 3/n),…,[k/n, (k+1)/n ),… 将n个输入元素分配到这些桶中,对桶中元素进行排序,然后依次连接桶 输入 0 ≤A[1..n] 1 辅助数组B[0..n-1]是一指针数组,指向桶(链表) §8

文档评论(0)

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

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

1亿VIP精品文档

相关文档