第 5 章 概率分析和随机算法

  本章介绍概率分析随机算法.

5.1 雇用问题

概率分析
  概率分析是在问题分析中应用概率的概念。大多数情况下,我们采用概率分析来分析一个算法的运行时间,有时也用来分析其他的量。我们对所有可能输入产生的运行时间取平均。当报告此种类型的运行时间时,我们称其为平均情况运行时间
  我们在确定输入分布时必须非常小心。对于某些问题,我们可以对所有可能的输入集合做某种假定,然后采用概率分析来设计一个高效算法,并加深对问题的认识。对于其他一些问题,我们不能描述一个合理的输入分布,此时就不能采用概率分析。
  随机算法
  为了利概率分析,我们需要了解关于输入分布的一些信息。我们通过使一个算法中的某部分的行为随机化,常可以利用概率和随机性作为算法设计和分析的工具。
  更一般地,如果一个算法的行为不仅由输入决定,而且也有随机数生成器产生的数值决定,则称这个算法是随机的。我们将假设一个可以自由使用的随机数生成器RANDOM。调用RANDOM(a,b)将返回一个介于a和b之间的整数,并且每个整数以等概率出现。
  当分析一个随机算法的运行时间时,我们以运行时间的期望值衡量,其中输入值由随机数生成器产生。我们将一个随机算法的运行时间称为期望运行时间,以此来区分这类算法和那些输入是随机的算法。一般而言,当概率分布是在算法的输入上时,我么讨论的是平均情况运行时间;当算法本身做出随机选择时,我们讨论期望运行时间。

5.2 指示器随机变量

  为了分析雇用问题在内的许多算法,我们采用指示器随机变量。它为概率与期望之前的转换提供了一个便利的方法。给定一个样本空间S和一个事件A,那么事件A对应的**指示器随机变量**I{A}定义为:
  

I{A}={1,0,AA
  
一个事件A对应的指示器随机变量的期望值等于事件A发生的概率。
引理 5.1 给定一个样本空间S和S中的一个时间A,设 XA=I{A} ,那么 E[XA]=Pr{A}
用指示器随机变量分析雇用问题
引理 5.2 假设应聘者以随机次序出现,算法HIRE-ASSISTANT总的雇用费用平均情况下为 O(Chlnn)

5.3 随机算法

我们让随机发生在算法上,而不是在输入分布上。对于有该算法及许多其他的随机算法,没有特别的输入会引出它的最坏情况
引理 5.3 过程 RANDOMIZED-HIRE-ASSISTANT的雇用费用期望是 O(chlnn) .
随机排列数组
很对算法通过对给定的输入变换排列以使输入随机化。这里我们讨论两种随机化方法。假定给定一个数组A,包含元素1 到n。我们的目标是构造这个数组的一个随机排列。
  一个通常的做法是为数组的每个元素A[i]赋一个随机的优先级P[i],然后依据优先级对数组A中的元素进行排序。我们成这个过程为PERMUTE-BY-SORTING
  

n = A.length
let P[1..n] be a new array
for i = 1 to n
    P[i] = RANDOM(1,n^3)
sort A,using P as sort keys

引理 5.4假设所有优先级都不同,则过程PERMUTE-BY-SORTING产生输入的均匀随机排列。
  产生随机排列的一个更好方法是原址排列给定数组。过程RANDOMIZE-IN-PLACE在O(n)时间内完成。

n = A.length
for i = 1 to n
    swap A[i] with A[RANDOM(i,n)]

引理 5.5 过程RANDOMIZE-IN-PLACE可计算出一个均匀随机排列

5.4 概率分析和指示器随机变量的进一步使用

5.4.1 生日悖论

5.4.2 球与箱子

5.4.3 特征序列

5.4.4 在线雇用问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值