随机化算法(randomized algorithm),在算法中使用了随机函数,且随机函数的返回值直接或者间接的影响了算法的执行流程或执行结果。就是将算法的某一步或者某几步至于运气的控制下,即该算法在运行中的某一步或者某几步涉及一个随机决策,或者说其中一个决策依赖于某种随机事件。
一、随机化算法概述
在我们的生活中,人们经常会去掷骰子来看结果,投硬币来决定行动,这就涉及到一个问题:随机。
计算机为我们提供好了随机方法,那么对于有些具有瑕疵的算法,如果配合随机化算法,又是可以得到意想不到的结果。
二、定义
这种算法看上去是凭着运气做事,其实,随机化算法是有一定的理论基础的,我们可以想象,在[1,10000]这个闭区间里,随机1000次,随机到2这个数的几率是多大(约为0.1),何况1000次的随机在计算机程序中仅仅是一眨眼的功夫。可以看出,随机化算法有着广阔的前景。只是由于随机化算法比较难于掌控,所以并不是很多人都接触过他,但肯定有很多人都听说过。
三、举例
1.下面,我们就随机化问题,举一个例子:
一个长度在4..10的字符串中,需要判定是否可以在字符串中删去若干字符,使得改变后字符串符合以下条件之一:
(1)AAAA;(2)AABB;(3)ABAB;(4)ABBA。
例如:长度为6字符串“POPKDK”,若删除其中的“O”,“D”两个字母,则原串变为:“PPKK”,符合条件(2)AABB。
分析:
这道题很容易想到一种算法:运用排列组合:枚举每4个字母,然后逐一判断。算法是可行的,但是如果需要题目中加上一句话:需要判断n个