转载请注明出处:http://blog.csdn.net/zhoubin1992/article/details/46507919
1.SAT问题描述
命题逻辑中合取范式 (CNF) 的可满足性问题 (SAT)是当代理论计算机科学的核心问题, 是一典型的NP 完全问题.在定义可满足性问题SAT之前,先引进一些逻辑符号。
一个 SAT 问题是指: 对于给定的 CNF 是否存在一组关于命题变元的真值指派使得A 为真. 显然, 如果A 为真, 则 CNF 的每个子句中必有一个命题变元为 1 (真) 。
2.Las Vegas算法
Las Vegas 算法是利用随机值做出随机选择的一种概率算法,并且不会产生不正确的答案。在计算过程中所做出的随机选择,可能使算法比其他算法更快地得到所要求的解。
拉斯维加斯算法不会得到不正确的解。一旦用拉斯维加斯算法找到一个解,这个解就一定是正确解。但有时用拉斯维加斯算法找不到解。与蒙特卡罗算法类似,拉斯维加斯算法找到正确解的概率随着它所用的计算时间的增加而提高。对于所求解问题的任一实例,用同一拉斯维加斯算法反复对该实例求解足够多次,可使求解失败的概率任意小。
Las Vegas 算法用来搜索包含目标结点的解空间。它用一些随机选择来移动,而不需要在每个结点都计算一个新的结点。如果成功结点的比例在解空间中相当高,则找到目标结点的概率可能很高。当下一个结点的计算比较困难或者系统化地搜索没有什么必要时,采用Las Vegas 算法,会提高计算的效率。当然,下一个结点的随机选择有可能导致找不到成功的结点,但是我们可以重复多次运行,来提高目标结点的效率。拉斯维加斯算法的一个显著特征是它所作的随机性决策有可能导致算法找不到所需的解,但是通过重复多次运行来克服,在求解NP难问题时,用它往往会收到奇效。
3. Las Vegas +回溯法
正如我们可以将快速排序和插入排序相结合一样,也可以将回溯法和随机算法结合。当未确定变元的个数较多时,则随机确定的真值是可行的概率较大,随着未确定的变元变少,可能的概率越小,这时就可以使用确定性算法(回溯法)。下面介绍这个混合算法:
先随机确定前k个变元的真值,然后用回溯法来确定后面n-k个变元的真值。其算法描述如下:
BackTrack(int t)
int i;
if (t > m) return true;
else
for i = 0 to 1 do
x[t] = i;
if (Place(t))
if (BackTrack(t+1)) return true;
if(i == 2) return false;
Place(k)
for i = 0 to n do
t = 0