带随机步的可满足性算法
【摘要】:
满足性问题是研究如何判定一个任意给定的逻辑表达式是否存在可满足真值指派,它是人工智能、计算理论和理论计算机科学中的最瞩目问题之一,它是第一个被证明的NP完全问题,在计算复杂性理论中起着很重要的作用。求解SAT问题一般分为完全算法和非完全算法两类。如果一个SAT实例有可满足解,完全算法能够找到可满足解,如果这个SAT实例无解,完全算法能给出所有解都是不可满足的证明,但需要花指数级时间;对于一个可满足的SAT实例,非完全算法一般都能以很高的概率找到其可满足解,虽然对一些满足解很少的SAT实例不能找到其满足解,但是非完全算法能在多项式时间内结束算法,所以非完全算法在实际应用中得到了广泛的应用。
随机算法是求解SAT问题的一种重要的非完全算法,就是在算法中引入随机化,算法中根据随机数选择下一步的操作。随机算法的一般框架是随机地选取一个给定SAT实例的解,验证其是否满足,如果满足,算法结束;否则,就根据随机源所产生的随机数选择下一个解,直到找到一个满足解或者到t个解后算法结束。在随机算法中由随机源产生随机数,但真正的随机源很难得到,一般用伪随机数发生器来代替,这也是随机算法的一个致命弱点。改进的办法有两种:一种是改进伪随机数发生器;另一种是在不改变算法的性能的情况下,尽量减少伪随机数的产生,从而减少算法对随机位的依赖。
本文研究的是后一种方法,在随机算法中引入膨胀图,利用膨胀图的性质去诱导算法中的随机步,减少算法中伪随机数的产生,进而减少算法对随机数的依赖和伪随机数对算法的影响。一般的随机算法中如果搜索t个解,随机搜索一个解需要n位伪随机码(n为给定SAT实例中的变元个数),总共需要tn位伪随机码;而在本文中的算法只需要n+(t-1)log_2n位伪随机码,减少了算法中伪随机码的产生,降低了伪随机码对算法的影响。