算法导论系列笔记之快排及随机算法

快排及随机算法

快速排序算法

  • 分治算法的想法
  • 原地排序,不需要额外的空间

步骤

  • 分解:通过选定一个特殊值,将原本数组分成两个数组,一个数组比该值小,一个数组比该值大
  • 解决:递归调用快速排序,处理分解后的数组
  • 合并:原址排序,不需要合并操作
伪代码
QUICKSORT(A,p,r)
if p<r
	q = PARTITION(A,p,r)
	QUICKSORT(A,p,q-1)
	QUICKSORT(A,q+1,r)
	
PARTITION(A,p,r)
x = A[r]
i=p-1
for j=p to r-1
	if A[j]<=x
		i = i+1
		exchange A[i] with A[j]
exchange A[i+1] with A[j]
return i+1
分析
最坏情况
  • 如果输入已经有序,会导致,T(n) = T(0) +T(n-1) +Θ(n)=T(n-1) + Θ(n) = Θ(n^2)
最优情况
  • 最平衡的划分,T(n) = 2T(n/2) +Θ(n) = Θ(nlgn)
平均情况
  • 只要划分是常数比例的,算法的运行时间总是O(nlgn)
假设平衡划分和不平衡划分交替的情况
  • L(n) = 2U(n/2) + Θ(n)

  • U(n) = L(n-1) +Θ(n)

  • U(n)代入L(n)用主定理求得Θ(nlgn)

保持幸运划分的方法 -随机快速排序
  • 随机选取主元

  • 运行时间不依赖于输入的顺序

  • 无需对输入序列的分布做假设

    • 最差情况由随机数生成器决定
RAND-QUICKSORT(A,p,r)
if p<r
	q = RAND-PAR(A,p,r)
	RAND-QUICKSORT(A,p,q-1)
	RAND-QUICKSORT(A,q+1,r)

RAND-PAR(A,p,r)
i = RANDOM(p,r)
exchange A[r] with A[i]
return PARTITION(A,p,r)

PARTITION(A,p,r)
x = A[r]
i=p-1
for j=p to r-1
	if A[j]<=x
		i = i+1
		exchange A[i] with A[j]
exchange A[i+1] with A[j]
return i+1
分析
  • 令T(n) 为运行时间的随机变量,假设这些随机数是独立的,即选择的时间是独立的
    • 该随机变量的名字叫做指示器随机变量,使概率等于期望值
  • 推导公式很有意思 - 》视频的51分钟开始推导
    时间的随机变量,假设这些随机数是独立的,即选择的时间是独立的
    • 该随机变量的名字叫做指示器随机变量,使概率等于期望值
  • 推导公式很有意思 - 》视频的51分钟开始推导
  • 递归式求解【理解能更上,计算跟不上】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值