【高级算法】Lasvegas+回溯算法解决3SAT问题(C++实现)

本文介绍了如何使用Las Vegas算法与回溯法结合解决3SAT问题,详细阐述了3SAT问题的定义,Las Vegas算法的原理,以及这种混合算法的实现策略。在实验中,通过调整关键参数stopST,发现在stopST=60时,算法的执行次数和时间表现优异。

转载请注明出处: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
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值