2SAT的一點理解

2021-09-11 06:53:18 字數 517 閱讀 5389

首先大概說一下2sat的步驟

1.用tarjan求出強聯通分量,這一步是因為如:1-->2 ,  2-->3, 3-->1這麼三組關係,(i-->j代表的意思是選擇了i,則必須也要選擇j),這樣三組關係就是強聯通分量,也意味著選擇了其中乙個數字,其他的數字也將必須被選擇。

2.判斷乙個強連通分量中有沒有兩個選項都有,比如1和1'都出現在乙個全連通分量中,那肯定無解,因為1和1'必須只能選乙個,而他們在乙個強聯通分量中的後果是要麼都選,要麼都不選。如果沒有這種情況出現,那麼必定有解。

3.進行解的求取。對前面的強連通分量重新構逆圖,然後進行拓撲排序,兩個分量中,現在拓撲排序中輸出的那個就應該選入解。為什麼呢?因為i-->j代表的意思是選擇了i,則必須也要選擇j,如果不把邊取反,變成i<--j才會出問題。因為j是可以隨意取的,他的自由度高於i.隨意要先從自由度高的開始進行選擇。選擇了j,那麼i就肯定可以選了,所以deg[i]--,直到i所需要滿足的條件點全部湊齊後,i才可以入棧,即選擇。如果先出現乙個點選了,而他的相反點還沒有被選過。那不管了,反正選這個點肯定是解的。

2 SAT問題的演算法

求解2 sat問題的演算法有很多,有一種效率還不錯,實現方便又理解方便的演算法。注意例子中的那個條件 x1為假或x2為真 在x1為假的時候x2可以為任意值,但在x1為真的時候,x2為滿足條件必須是真。也就是說x1為真可以推導出x2為假 x2為假可以推導出x1為真。換成一般的情況,已知xa xb 則x...

2 SAT問題的小結

什麼是2 sat呢?就是有一些集合,每個集合中有且僅有兩個元素,且不能同時選取兩個元素,集合間的元素存在一定的選擇關係,求解可行性及可行方案。1 連邊 2 跑tarjan 3 判可行性,即同一集合中的兩個點是否同屬乙個強連通塊 4 縮點建新圖,連反邊 5 拓撲序,若當前點沒有被訪問過,則選擇該點,不...

2 SAT的一些小結

1 2 sat問題,通俗的說就是有n對點 2n個點 從每對點中選出乙個點,共選出n個點,而且要滿足若干個這樣的條件 某兩點不能同時被選出。設一對點為x x,如果a被選出則b一定要被選出,就在圖中加有向弧 a,b 表示這種關係。那麼如果a,b a b,a b 不能同時被選出,那麼加兩條有向弧 a,b ...