算法学习之概率分析与随机算法

概率分析与随机算法

<说明>
该文章内容我尚未理解深刻,此处仅作记录

1.雇用问题

假如你要雇用一名新的办公助理。你先前的雇用尝试都失败了,于是你决定找一个雇用代理。
·雇用代理每天给你推荐一个应聘者。
·你面试这个人,然后决定是否雇用他。
(你必须付给雇用代理一小笔费用,以便面试应聘者;然而真正雇用一个应聘者需要花更多的钱,因为你必须辞掉目前的办公助理,还要付一大笔中介费给雇用代理)
·你承诺任何时候,都要找最适合的人来担任该项职务。(即在面试完每个应聘者后,如果该应聘者比目前的办公助理更合适,就会辞掉当前的办公助理,然后聘用新的。)
~你希望能够估算该费用会是多少?

-伪代码展示:
(假设应聘办公助理的候选人编号为1到n。该过程假设你能在面试完应聘者i后,决定应聘者i是否是你目前见过的最佳应聘者。初始化时,该过程创建一个虚拟的应聘者,编号为0,他比其他应聘者都差)

HIRE-ASSISTANT(n)
1	best=0  // candidate 0 is a least-qualified dummy candidate
2	for i=1 to n
3		interview candidate i
4		if candidate i is better than candidate best
5			best=i
6			hire candidate i

//感觉是在找出数组中的最大数,不过求得内容不同
//伪代码用python写还不错哈哈

//在任何情形中,我们都是计算特定基本操作的执行次数。

分析:
假设面试一个人的费用是a,雇用一个人的费用是b,显然b>a恒成立。
在问题假设中,一共面试n个人,所以面试产生的费用是固定的即an,

假设此次面试中共雇用了m个人,雇用产生的费用为bm,所以可以说,估算总费用取决于m变量。

提升:
这个场景用来作为一般计算范式的模型。
我们通常通过检查序列中的每个成员,并且维护一个当前的 “获胜者” ,来找出序列中的最大值或最小值。这个雇用问题对当前获胜成员的更新频率建立模型。

最坏情况分析: 每次面试都需要雇用,即面试n次,雇用了n次,总的费用是O(bn)……因为b>a……
但事实上,我们并不知道应聘者出现的次序,最坏情况出现的概率并不多。但我们想知道在一种自然情况或者平均的情形下, 会有什么发生,这时的总费用是多少。

平均情况分析: 实际情况下,由于该公司的应聘策略是,如果该应聘者比之前的应聘者都优秀,则应聘他。所以,对于第i个应聘者来说,应聘成功的概率也就是1/i;用Xi表示第i个应聘者是否应聘成功,则E(Xi)=1/i。设该公司在面试n个应聘者后总的应聘次数为X=X1+X2+…+Xn
所以该公司在面试n个应聘者后总的应聘次数的期望为
E ( X ) = E [ ∑ i = 1 n X i ] = ∑ i = 1 n E ( X i ) = ∑ i = 1 n 1 / i = ln ⁡ n + O ( 1 ) E(X)= E \left[\LARGE{\displaystyle\sum_{i=1}^nX_i }\right] = \displaystyle\sum_{i=1}^nE(X_i)=\displaystyle\sum_{i=1}^n1/i=\ln n + O(1) E(X)=Ei=1nXi=i=1nE(Xi)=i=1n1/i=lnn+O(1)
所以说平均情况下,算法HIRE-ASSISTANT的总的雇用费用为O(blnn).

1.1概率分析、平均情况运行时间

概率分析是在问题分析中应用概率的理念。大多数情况下,我们采用概率分析来分析一个算法的运行时间,有时也用它来分析一些其他的量。
为了使用概率分析,我们需要使用或者假设关于输入的分布,然后分析该算法,计算出一个平均情形下的运行时间,其中,我们对所有可能的输入分布产生的运行时间取平均值。称为平均情况运行时间

1.2随机算法、期望运行时间

一般地,如果一个算法的行为不仅由输入决定,而且也由随机数生成器产生的数值决定,则称这个算法是随机的
当分析一个随机算法的运行时间时,我们以运行时间的期望值衡量,其中输入值由随机数生成器产生。我们将一个随机算法的运行时间称为期望运行时间


一般而言,当概率分布是在是算法的输入上时,我们讨论的是平均情况运行时间;当算法本身做出随机选择时,我们讨论其期望运行时间

2.随机算法(随机排列数组)

2.1 PERMUTE-BY-SORTING(优先级)

伪代码如下:

PERMUTE-BY-SORTING(A)
1	n=A.length
2	let P[1..n] be a new array
3	for i=1 to n
4		P[i] = RANDOM(1,n^3)
5	sort A, using P as sort keys
  • 使用范围1~n^3是为了让P中所有优先级都尽可能唯一
    那如何在多优先级相同的情况下实现这个算法呢?
    笔者认为:只需要改一下排序时的比较条件就可以满足,such as : 将大于改为大于等于。
  • 同时需要证明该过程能产生一个均匀随机数列(即该过程等可能地产生了数字1~n的每一种排列)————证明过程略去。
2.2 RANDOMIZE-IN-PLACE(位置)

伪代码如下:

RANDOMIZE-IN-PLACE(A)
1	n=A.length
2	for i=1 to n
3		
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值