算法设计与分析第5讲 寻找第K元.pptVIP

  • 2
  • 0
  • 约2.39千字
  • 约 12页
  • 2018-01-05 发布于河南
  • 举报
算法设计与分析第5讲 寻找第K元

寻找第K元 问题描述 给定一个数组A[n], 寻找大小排在第k的元素。 自然的想法:   对A排序, return A[k]; 时间复杂性  O(nlogn) 能不能更低? 随机分治方法 RS(A, p, q, i) if p=q return A[p]; r=Rand_Partion(A,p,q) /*随机主元r,划分A为两部分,A[p…r-1]A[r]A[r+1…q];*/ k=r-p+1; if i=k then return A[r]; if ik then return RS(A,p,r-1,i); else return RS(A,r+1,q,i-k);   复杂性分析 最差情况:   T(n)=T(n-1)+ θ(n) =θ (n2) 分割比较好情况   T(n)=T(n/2)+ θ(n) = θ(n) 最差情况下线性时间算法 Select (i, n)   //找到好的划分主元 1 将数组划分为5个一组,共[n/5]组,查找每一组的中间值,t= θ(1)*[n/5]= θ(n)  2 将这[n/5]个中间值视为一个数组,找到其中间元x。t=T(n/5) 3 以x为主元划分,令k=rank(x); if i=k then return x; if ik then select(i,

文档评论(0)

1亿VIP精品文档

相关文档