算法导论---顺序统计、中值

本文介绍了如何使用Rand_Select算法在给定序列A[1…n]中寻找第k小元素,该算法借鉴了随机快排的partition函数。通过对不同情况的分析,得出在最坏情况下期望运行时间为Θ(n),平均情况下运行时间为O(n)。
摘要由CSDN通过智能技术生成

给定一个序列A[1…n],寻找第 k 小元素

借用随机快排的 partition 函数

Rand_Select(A, p, r, i)  // from A[p] to A[r] to find the element of number i
  if p = q then return A[p]

  r = Rand_Partition(A, p, q)
  k = r - q + 1 // k = rank(A[r]) in A[p…q]
  if i==k then return A[r]
  if i<k then
    return Rand_Select(A, p, r-1, i)
  else
    return Rand_Select(A, r+1, q, i-k)

  • analysis
    (assume elements are distinct)
    lucky case 1/10 9/10:
     T(n) = T(9/10 × \times × n) + Θ(n)
       = Θ(n)
    unlucky case 0 n-1
     T(n) = T(n-1) + Θ(n)
       = Θ(n2)

    期望运行时间:
    令T(n) 为一个随机变量
    定义指示器随机变量 Xk,k=0,1,2…
    X k = { 1 数 组 被 分 割 成 k 和 n − k + 1 两 段 0 其 他 X_k=\begin{cases} 1 & 数组被分割成 k 和 n-k+1两段\\ 0 & 其他 \end{cases} Xk={ 10knk+1

T ( n ) = { T ( m a x { 0 , n − 1 } ) + Θ ( n ) 0 : n − 1 s p l i t T ( m a x { 1 , n − 2 } ) + Θ ( n ) 1 : n − 2 s p l i t . . . T ( m a x { n − 1 , 0 } ) + Θ ( n ) n − 1 : 0 s p l i t T(n)=\begin{cases} T(max\{0, n-1\}) + Θ(n) & 0:n-1 split \\ T(max\{1, n-2\}) + Θ(n) & 1:n-2 split \\ ... \\ T(max\{n-1, 0\}) + Θ(n) & n-1:0 split \end{cases} T(n)=T(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值