最大團問題分支限界法_最大團問題與 Bron-Kerbosch 演算法
阿新 • • 發佈:2021-02-18
技術標籤:最大團問題分支限界法
最近注意到了圖論中的最大團問題。最大團問題是一個 NP 完全問題,在此對它做簡單介紹,並介紹具有代表性的 Bron-Kerbsch 演算法。
什麼是一個團?
最大團問題首先一個圖的問題,假設讀者已經知道圖的概念。
假設一個無向圖
,一個 團是圖 的子圖,該子圖中的所有頂點之間都有邊將它們相連。極大團指的是,該團不包含於圖
的任何其他團,即不是任何其他團的真子集。最大團指的是結點數量最多的極大團。
最大團問題的 Bron-Kerbosch 演算法
對於一個無向圖,找到其最大團是 NP 完全問題。本文介紹最大團問題的 Bron-Kerbosch 演算法。
Bron–Kerbosch 演算法是由荷蘭科學家 Coenraad Bron 和 Joep Kerbosch 設計的,他們於1973年發表了論文《Algorithm 457: finding all cliques of an undirected graph》。理論上,在輸入更少的最大獨立子集時,演算法執行時間最短。Bron–Kerbosch 演算法和後續演算法通常被認為在實踐中比其他演算法更加有效。
Akkoyunlu(1973)在同時代提出的演算法雖然用不同的術語表示,但由於它生成相同的遞迴搜尋樹,因此可以看作與 Bron-Kerbosch 演算法相同。
無樞軸演算法
Bron–Kerbosch 演算法的基本形式是一種遞歸回溯演算法,用於搜尋給定圖
總體上,給定三個不相交的頂點集
,它找到包含 中的所有頂點、 中的某些頂點和不在 中的頂點的極大團。在演算法的每次呼叫中, 和 是不相交的集合,它們的並集由新增到 時會形成團的那些頂點組成。換句話說, 是連線到 的每個元素的一組頂點。當 和 都為空時,沒有其他元素可以新增到 ,因此 是最大團,演算法輸出 。在開始遞迴演算法前,將
和 設定為空集,將 設定為圖的頂點集。在每個遞迴呼叫中,演算法依次考慮 中的頂點。如果沒有這樣的頂點,分為兩種情況:如果 為空,將該演算法可以寫作以下虛擬碼形式:
R := {}
P := node set of G
X := {}
BronKerbosch1(R, P, X):
if P and X are both empty:
report R as a maximal clique
for each vertex v in P:
BronKerbosch1(R ⋃ {v}, P ⋂ N(v), X ⋂ N(v))
P := P {v}
X := X ⋃ {v}
關於演算法原理,談一些個人理解。演算法開始時,
是空集, 是頂點集;演算法結束時, 是最大團, 是空集。搜尋最大團的過程就是頂點 從集合 移動到集合 的過程。採用回溯策略的原因是,我們並不知道某個頂點
最終是否是最大團中的成員。如果遞迴演算法選擇 作為最大團的成員時,並沒有找到最大團,那麼應該回溯,並查詢最大團中沒有 的解。在遞迴的過程中,
最終要形成一個最大團, 的元素就是遞迴過程中當前找到的最大團的組成元素。 是最大團的候選頂點集合, 不斷地去掉遞迴完成的頂點 ,在遞迴時取只在 中的元素,因為最大團中的每個頂點之間是互相連線的,要找到的最大團的下一個頂點,一定是 的鄰接頂點。類似地, 是回溯過程中被放棄的頂點的集合,遞迴過程中每次也只需關注 的部分。該演算法還有很多後續改進的研究,如果學習到將補充在這裡。