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

快排及随机算法

快速排序算法

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

步骤

  • 分解:通过选定一个特殊值,将原本数组分成两个数组,一个数组比该值小,一个数组比该值大
  • 解决:递归调用快速排序,处理分解后的数组
  • 合并:原址排序,不需要合并操作

伪代码

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分钟开始推导
  • 递归式求解【理解能更上,计算跟不上】
发布了28 篇原创文章 · 获赞 1 · 访问量 1729

猜你喜欢

转载自blog.csdn.net/doordiev/article/details/104296831
今日推荐