2-SAT問題相關算法與題目講解(O(n*m)與O(m))

2-SAT問題 信息學競賽 OI ACM O(m) O(nm)


2-SAT問題


張天翔

blog.csdn.net/hzoi_ztx
[email protected]


前置技能

  • 拓撲排序
  • 基本邏輯運算
  • 強聯通分量

問題模型

給出n個布爾值組成的序列{Ai} ,給出一些限制,每個限制最多針對兩個元素(故稱爲“2-SAT”),先要求確定A 序列的值以滿足所有限制關係。


問題分析

首先列出7種有意義的限制(其實真正有意義的爲5個),如下:

-1: Ai=1
-2: Ai=0
-3: Ai AND Aj=0
-4: Ai OR Aj=1
-5: Ai OR(NOT Aj)=1
-6: Ai XOR Aj=1
-7: Ai XOR Aj=0

所有可能的限制條件如下

01: Ai=1 有意義
02: Ai=0 有意義

03: Ai AND Aj=1(Ai=1)AND(Aj=1)(1)
04: Ai AND Aj=0 有意義
05: Ai AND(NOT Aj)=1(Ai=1)AND(Aj=0)(1,2)
06: Ai AND(NOT Aj)=0(Ai=0)OR(Aj=1)(NOT Ai)OR Aj=1(5)
07: (NOT Ai)AND Aj=105
08: (NOT Ai)AND Aj=006
09: (NOT Ai)AND(NOT Aj)=1(Ai=0)AND(Aj=0)(2)
10: (NOT Ai)AND(NOT Aj)=0(Ai=1)OR(Aj=1)Ai OR Aj=1(4)

11: Ai OR Aj=1 有意義
12: Ai OR Aj=0(Ai=0)AND(Aj=0)(2)
13: Ai OR(NOT Aj)=1 有意義
14: Ai OR(NOT Aj)=0(Ai=0)AND(Aj=1)(1,2)
15: (NOT Ai)OR Aj=113
16: (NOT Ai)OR Aj=014
17: (NOT Ai)OR(NOT Aj)=1(Ai=0)OR(Aj=0)Ai AND Aj=0(3)
18: (NOT Ai)OR(NOT Aj)=0(Ai=1)AND(Aj=1)(1)

19: Ai XOR Aj=1 有意義
20: Ai XOR Aj=0 有意義
21: Ai XOR(NOT Aj)=1Ai XOR Aj=0(7)
22: Ai XOR(NOT Aj)=0Ai XOR Aj=1(6)
23: (NOT Ai)XOR Aj=121
24: (NOT Ai)XOR Aj=022
25: (NOT Ai)XOR(NOT Aj)=1Ai XOR Aj=1(6)
26: (NOT Ai)XOR(NOT Aj)=0Ai XOR Aj=0(7)

實際問題中通常將{Ai} 序列代表n個物體的選與不選,選則對應布爾值爲1。


解決方法

拆點,每個布爾值Ai 拆成兩個點,xiyi ,然後選出一個大小爲n 的點集,使得其滿足所有的限制條件(給出的限制條件,以及對應的xiyi 不能同時在集合中),選擇xi 點代表Ai=1 (選擇此物品),選擇yi 點代表Ai=0 (不選擇此物品)。

若要選擇出來一個點集,需要用模型表示限制關係。

建圖,圖中的一條邊<u,v> 表示選擇了u 點以後必須要選擇v 點。
那麼對有意義的七種關係進行建圖如下。

-3: Ai AND Aj=0

兩條邊xiyj,xjyi

-4: Ai OR Aj=1

兩條邊yixj,yjxi

-5: Ai OR(NOT Aj)=1

兩條邊xjxi,yiyj

-6: Ai XOR Aj=1

四條邊xiyj,xjyi,yixj,yjxi

-7: Ai XOR Aj=0

四條邊xixj,xjxi,yiyj,yjyi

-1: Ai=1

yi 刪掉很暴力,所以一條邊yixi

-2: Ai=0

xi 刪掉很暴力,所以一條邊xiyi

(可以看到限制-6可以由限制-3與限制-4組成,限制-7可以由兩個限制-5組成,故說真正有意義的爲5個)

這樣得到了第一個圖

算法一

爲了滿足所有的限制條件(給出的限制條件,以及對應的xiyi 不能同時在集合中),可以對每一對未確定的(xi,yi) ,先選其一,並選定對應必須要選的點,如果最後不矛盾,則成功,否則嘗試選另一點,若不矛盾則成功,否則無解。

這樣做正確性顯然,但是時間複雜度O(nm) ,較高。

算法二

思考,這是一個有向圖,而且是“對稱”的(也就是說按照上述方式對每一個限制條件建邊,如果存在xixj 必定存在yjyi ,如果存在xiyj ,必定存在xjyi ,如果存在yixj ,必定存在yjxi 等等,這些邊是“對稱”的),如果圖中出現一個環,那麼這個環上所有點必須同時被選或被不選,而且這個環會有與之對稱的一個環(此環上點對應的另一個點在另一個環上,邊的連接也相同但是反向)。既然如此,不如強聯通分量縮點,並且連邊,如果兩個點在不同強聯通分量,則在這兩個強聯通分量之間連有向邊,與原來的邊方向相同,這樣,圖變成了一個拓撲圖,這是第二個圖。此時,如果存在一組(xi,yi) 同時在一個強聯通分量中,顯然無解;如若不然,一定有解,證明略,按一定方法求解。

將強聯通分量稱作Si ,與之對稱的連通分量稱作Si 。分析圖的性質,對於任意的一對(Si,Si)Si 的所有後代節點(此點通過有向邊連通到的所有點)與Si 的前代節點(通過有向邊連通到此點的所有點)是“對稱”的。

若選則某個Si 中的點,那麼所有的SiSjSj 都要被選擇,而Si 必定不可選,所有Si 的前代節點都不可選。那麼每次找到一個未確定是否選擇的Si ,選擇其所有後代節點,並刪除Si 及其所有前代節點,但每次盲目找一個未被確定的Si 複雜度較高,可以以自底向上的順序進行選擇與刪除,這樣就免去了“選擇Si 的所有後代節點”(只用不斷刪除)。

那麼算法流程圖:

Created with Raphaël 2.1.0Start輸入構建第一個圖縮點形成有向無環圖(第二個圖)是否有解?拓撲排序自底向上選擇、刪除輸出Endyesno

時間複雜度O(m) ,具體實現看例題。


例題


一般2-SAT問題【O(n)】


求字典序最小的方案【O(nm)】

[COGS2443] [HZOI 2016]MC之旅:逃離基友


參考資料

2-SAT問題及其算法

由對稱性解2-SAT問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章