算法导论 总结索引 | 第一部分 第五章:概率分析和随机算法

1、雇佣问题(80)

1、雇佣代理每天推荐一个应聘者,必须 付给雇佣经理 一小笔费用;然而 要真的雇佣一个应聘者需要 一大笔钱(包括辞退费和中介费)。只要该应聘者比当前的办公助理 更合适,就会辞退旧的,然后 聘用新的

HIRE-ASSISTANT(n)
best = 0; // 0号比所有应聘者都差
for i = 1 to n
	interview candidate i
	if candidate i is better than candidate best
		best = i
		hire candidate i

2、这个问题的花销模型(cost)与第二章的不同,关注的不是 执行时间,而是 面试和雇佣 产生的费用

表面上 分析这个算法的花销与分析归并的运行时间 不同,然而 在分析费用 或 运行时间时,所采用的分析技术时一样的:在任何情况下,都是 计算特定基本操作的执行次数

设面试费用 ci,雇佣费用 ch,应聘候选人n个,雇佣了m个
不管雇佣了多少人,总会面试 n 个应聘者,于是面试产生的费用固定是 ci n。只关注 ck m,即总雇佣的费用,这个量在算法的每次执行中 都不同

1.1 最坏情况分析

当应聘者质量 按出现的次序严格递增时,就是 最坏情况,此时雇佣了 n 次,总的费用是 O(ck n)

1.2 概率分析

在一种典型或平均的情形下,会有什么发生

1、概率分析可以 分析一个算法的运行时间,或者 其他量:过程 HIRE-ASSISTANT中的雇佣费用

2、为了 进行概率分析,必须使用或假设 关于输入的分布。然后 分析该算法,计算出一个平均情形下的运行时间,其中 对所有可能的输入分布 取平均值,称其为 平均情况运行时间

假设 应聘者以随机顺序出现,使用从1到n的唯一号码 对应聘者排列名次(用rank(i) 表示),较高名次 对应一个更好的应聘者。有序序列<rank(1),…,rank(n)>是序列<1,2,…,n>的一个排列。称应聘者以 随机顺序 出现,等价于称这个排名列表是 数字1 到 n 的 n!种排列表种的任一个。也称这些排名 构成一个均匀随机排列;也就是说,在 n! 种可能的排列中,每一种 以等概率出现

1.3 随机算法

1、如果一个算法的行为 不仅由 输入决定,而且也由 随机数生成器 产生的数值决定,则称这个算法是随机的(同一个输入 会有不同的输出)大多数编程环境会提供一个 伪随机数生成器,它是个 确定性算法,返回值 在统计上看起来是随机的

2、分析随机算法的运行时间时,以 运算时间的期望值 衡量,其中 输入值由 随机数生成器产生。将一个随机算法的运行时间 称为 期望运行时间,以此来 区分这类算法 和 那些输入是随机的算法(比如上文的HIRE-ASSISTANT函数的算法)

当概率分布是在 算法的输入上(上文的HIRE-ASSISTANT函数的算法)时,我们讨论的是 平均情况运行时间;当 算法本身做出 随机选择时,我们讨论的是 期望运行时间(下文的RANDOMIZED-HIRE-ASSISTANT)

2、指示器随机变量

1、随机器随机变量 为概率与期望之间的转换 提供了 一个便利的方法。指示器随机变量I{A}定义为
在这里插入图片描述
2、一个事件A对应的指示器随机变量的期望值 等于 事件A发生的概率
数学语言:给定一个样本空间S和S中的 一个事件A,设在这里插入图片描述,那么在这里插入图片描述
指示器随机变量 极大地简化了 计算过程

3、用指示器随机变量 分析雇佣问题:设X是一个 随机变量,其值 等于 雇佣一个新的办公经理的次数
使用期望的定义:在这里插入图片描述

使用 指示器随机变量 来大大简化计算:不是通过 定义与雇佣一个新办公助理所需次数 对应的一个变量来计算 E[X],而是 定义n个变量,与每个应聘者 是否被聘用 对应。假设 在这里插入图片描述对应于第 i 个应聘者被雇佣 该事件的 指示器随机变量
在这里插入图片描述
以及在这里插入图片描述
根据本节的2,有:在这里插入图片描述

当应聘者i 被雇佣时,正好应聘者i 比从1到i-1的每个应聘者优秀。前i个应聘者中的任意一个 都等可能地是目前最有资格的,应聘者i 比 应聘者1到i-1更有资格的概率是 1/i,根据本节的2,可得在这里插入图片描述,计算E[X]:在这里插入图片描述
尽管我们面试了n个人,但平均起来,实际上 大约只雇用 他们之间的ln n个人

4、假设 应聘者以随机次序出现,算法 HIRE-ASSISTANT 总的雇佣费用 平均情形下为 O(ch lnn)

5、练习
1)在 HIRE-ASSISTANT 中,假设 应聘者以随机顺序出现,正好雇佣一次的概率是多少?正好雇佣n次的概率是多少?
当面试的第一个应聘者是最好的应聘者时,你正好雇用一次。所以你正好雇用一次的概率是1/n
当应聘者恰好以由次到优的顺序出现时,你正好雇用n次。所以你正好雇用n次的概率是1/n!(独立相乘)

2)在HIRE-ASSISTANT中,假设应聘者以 随机顺序出现,正好雇佣两次的概率?
假设第一个雇用的应聘者的排名是i,所有排名大于i的应聘者都在排名为n的应聘者后被面试。共有n-i个应聘者排名大于i,排名为n的应聘者在其中最先出现的概率为1/(n-i),此时你正好雇用两次的概率是在这里插入图片描述
所以 正好雇用两次的概率是:在这里插入图片描述

3)利用 指示器随机变量 来计算掷n个骰子之和的期望值
假设Xi 对应于第i个骰子点数的指示器随机变量
在这里插入图片描述
在这里插入图片描述
4)在这里插入图片描述
设X是一个随机变量,其值等于拿到自己帽子的顾客的数量
假设Xi 对应于第i个顾客拿到自己帽子该事件的指示器随机变量
在这里插入图片描述在这里插入图片描述
5)在这里插入图片描述
设X是一个随机变量,其值等于数列中逆序对的数目
假设Xij对应于(i,j)为A的一个逆序对该事件的指示器随机变量
在这里插入图片描述

3、随机算法(84)

1、进一步探索 概率分析与随机算法的区别:如果 应聘者以随机顺序出现,则 聘用一个新办公助理的期望次数 大约是 lnn。注意,这个算法是确定性的(即 不是随机算法,是概率分析);对于 任何特定输入,雇佣一个新的办公助理的次数 始终相同

考虑 先对应聘者进行排列,然后确定 最佳应聘者的随机算法:让随机发生在算法上(随机算法),而不是 在输入分布上
每次运行这个算法时,执行依赖于 随机选择,而且很可能 和前一次算法的执行不同。对于 该算法及许多其他的随机算法,没有特别的输入 会引出 它的最坏情况行为。只有在 随机数生成器 产生一个“不走运”的排列时,随机算法 才会运行得很差

2、对于雇佣问题,变成 随机算法(同样的输入,不同的结果)代码中唯一需要改变的是 随机地变换应聘者序列

RANDOMIZED-HIRE-ASSISTANT(n)
随机地变换应聘者序列
best = 0; // 0号比所有应聘者都差
for i = 1 to n
	interview candidate i
	if candidate i is better than candidate best
		best = i
		hire candidate i

过程 RANDOMIZED-HIRE-ASSISTANT 的雇佣费用期望是 O(ch lnn)

3、对于概率分析 HIRE-ASSISTANT 函数,用 平均情形下的雇佣费用 来表达;对于随机算法 RANDOMIZED-HIRE-ASSISTANT 函数,用 期望雇佣费用 来表达

4、随机算法 通过对给定的输入 变换排列 以使输入随机化(还有其他 使用随机化的方法)

5、构造数组的一个随机序列:一个通常的方法是 为数组的每个元素A[i] 赋一个随机的优先级 P[i],然后 依据优先级 对数组A中的元素 进行排序。如果 初始数组A = <1, 2, 3, 4>,随机选择的优先级 P = <36, 3, 52, 19>,将产生一个数组 B = <2, 4, 1, 3>,因为 第二个优先级最小,接下来是 第四个,然后 第一个,最后 第三个。我们 称这个过程为 PERMUTE-BY-SORTING

PERMUTE-BY-SORTING(A)
n = A.length
let P[1..n] be a new array
for i = 1 to n
	p[i] = RANDOM(1, n^3) // 使用范围1~n^3是为了让P中所有优先级尽可能唯一
sort A, using P as sort keys

以及看到 归并排序时间代价为 Θ(n lgn),还需要 证明这个过程 能产生一个 均匀随机排列,即 该过程等可能地产生 数字1~n的每一种排列(86)

  • 18
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值