读《算法导论》随机算法

正当编写程序时,时常会要输入分布,很多时候需要一些随机的算法,更多的需要算法的平均情况。但许多时候并没有得到一些关于输入的信息,这时候可以考虑使用随机算法。随机算法适用于雇用问题,所有排列等问题。这些问题可以通过概率分析,从而设计出随机算法。

随机算法广义定义,随机化算法是这样一种算法,在算法中使用了随机函数,且随机函数的返回值直接或者间接的影响了算法的执行流程或执行结果。随机化算法基于随机方法,依赖于概率大小。

随机算法狭义定义,也就是说随机算法的原理,下面详细谈谈随机算法。

随机算法的原理,

雇用问题的分析,不假设一个分布,而是给定一个分布,既随机的排列应聘者,以加强所有应聘者都是等可能的。这意味着对于所有的输入,期望他都是这种情况,而不是有特定分布的输入才有这等可能性,意味着各事件是等可能的。

概率分析与随机算法的联系与区别

概率,如果应聘者是以随机顺序出现,这样的算法是确定的了,雇用一个应聘者的期望次数是确定值。换句话说,对于任何特定的输入,雇用一个办公室助理次数始终是相同的。此外,这个次数将随输入的变化而改变,而且依赖于各应聘者的排名。依赖于应聘者的排名,可以使用应聘者排名的有序序列来代表一个特定的输入,这样的结果并没有更好的平均,对每一个应聘者的公平跟没有良性。

随机算法,先对应聘者的简单排列,再确定最佳应聘者的随机算法。简单的排列并没有对随机算法产生影响,最佳应聘者发生在随机算法上,而与输入分布没有关系。每次运行这个算法,执行依赖与随机的选择,而且很有可能和上一次算法执行不同,这样并没有对任何的一个应聘者产生影响,都是来自于随机算法。

对于随机算法,由于没有特定的输入,会引出它的最坏情况行为,当随机数生成器产生一个“不幸运”的置换时,随机算法才会运行不好。

对于雇用问题,代码实现

RANDOMIZED-HIRE-ASSISTANT(n)

randomly permute the list of candidate

best←0  //candidate 0 is a least-qualified dummy candidate

for i←1 to n

        do interview candidate i

                if candidate i is better than candidate best

                        then best ←i

                                 hire candidate i

这样建立了一个算法,它的性能和假设应聘者以随机次序出现所得结果是一致的。

随机排列数组

随机排列数组,通过排列给定的数组来使输入随机化,目标是构造这个数组的一个随机排列。常用的方法,为数组的每一个元素a[i]赋一个随机优先级p[i],然后依据优先级对数组A中的元素进行排序,这过程称为PERMUTE-BY-SORTIING

PERMUTE-BY-SORTIING(A)

n←length[A]

for i←1 to n

        do p[i]=RANDOM(1,n3)

sort A,using p as sort keys

return A

这过程得到了一个排列,但很没有完全证明这过程能产生均匀的随机排列!但比一般的随机过程产生的随机序列更具一般性!

posted @ 2011-10-31 22:21  Johnson2  阅读(1083)  评论(0)    收藏  举报