算法设计与分析_第2章_递归与分治3.pdfVIP

  • 10
  • 0
  • 约2.86万字
  • 约 50页
  • 2017-08-16 发布于浙江
  • 举报
算法设计与分析_第2章_递归与分治3

算法设计与分析 第2章 递归与分治策略 第2章 递归与分治策略 (3) (3) 线性时间选择 元素选择问题 给定线性序集中n个元素和一个整数k , 1 ≤k ≤n ,要找出这n个元素中第k 小的元素 Type RandomizedSelect(Type a[],int p,int r,int k) { 和快排算法有 if (p==r) return a[p]; 什么不同?? int i=RandomizedPartition(a,p,r), j=i-p+1; //a[p:i] 中元素个数j if (k=j) return RandomizedSelect(a,p,i,k); else return RandomizedSelect(a,i+1,r,k-j); } 2 线性时间选择 设计思路 利用PARTITION过程。如果划分元素在A(j) 的位置上,则有j-1 个元素小于或等于A(j) , 且有n-j个元素大于或等于A(j) 。此时, 若k=j ,则A(j) 即是第k 小元素;否则, 若kj ,则第k 小元素将出现在A(1:j-1) 中; 若kj ,则第k 小元素将出现在A(j+1:n) 中。 3 线性时间选择 与快速排序算法的异同点? 基本思想相同 对输入数组进行递归划分 不同 线性时间选择只对划分出的子数组之一进行 递归处理 2 在最坏情况下,算法randomizedSelect需要O(n )计算时间 但可以证明,算法randomizedSelect可以在O(n)平均时间内 找出n个输入元素中的第k小元素。 4 线性时间选择 线性时间选择问题:在一个具有n个元素 的集合中,能够在最优线性时间内找到 中项或通常意义上的第k 小元素。 基本思想 假设递归算法中,在每个递归调用的划分步 骤后,丢弃元素的一个固定部分并且对剩余 的元素递归,则问题的规模以几何级数递 减,也就是在每个调用过程中,问题的规模 以一个常因子被减小。 5 线性时间选择 例如 假设算法丢弃1/3并对剩余的2/3部分递归,则在第2 次调用中,元素的个数变为2n/3个,第3次调用中为 4n/9个,第4次调用中变为8n/27等等。 假设在每次调用中,算法对每个元素耗费的时间不 超过一个常数,则耗费在处理所有元素上的全部时 间产生一个几何级数 cn+(2/3)cn+(2/3)2 i cn+…+(2/3) cn+… = ∝

文档评论(0)

1亿VIP精品文档

相关文档