You are on page 1of 10

Algoritmii de determinare a mulțimilor stabile interior maximale

Algoritmul lui Bron şi Kerbosch
În rezultatul aplicării acestui algoritm, pentru un graf neorientat G=(X;U) obţinem
lista tuturor mulţimilor stabile interior maximale.
La fiecare etapă k de realizare a algoritmului se construiesc două mulţimi S k şi Q k .
Mulţimea S k reprezintă mulţimea de vârfuri stabilă interior, obţinută la etapa k, iar Q k
reprezintă mulţimea vârfurilor din graf, neadiacente vârfurilor din S k . Prin urmare, putem
considera

Qk   \ ((S k )  S k ) . Adăugarea oricărui vârf din

Q k la S k permite să extindem

mulţimea stabilă interior curentă şi să obţinem la etapa următoare o mulţime nouă S k 1 . Pentru
organizarea procesului de parcurgere în arborele de căutare, vom reprezenta mulţimea Q k drept



reuniune a două mulţimi Qk şi Qk , considerând că în Qk sunt incluse acele vârfuri din Q k ,
care în procesul de căutare au fost folosite pentru extinderea mulţimii S k , iar

Qk  Qk \ Qk . Cu

alte cuvinte, la etapa respectivă Qk reprezintă mulţimea vârfurilor, care potenţial pot fi folosite
pentru extinderea mulţimii stabile interior S k . Astfel, dacă pentru extinderea mulţimii S k se

alege vârful x ik  Qk atunci la etapa următoare k  1 mulţimile curente S k , Qk şi Q k se
modifică în modul următor:

 

S k 1  S k  xik

 
k1 k ik

Q  Q \ ( x )

  

Q1  Qk \ ( xik )  xik

.

( Г  xi  = x j  X : xi , x j  U se numeşte vecinătate a lui xi ).
Pentru a obţine toate mulţimile stabile interior folosind arborele de căutare, la unele etape
ale algoritmului este necesar de efectuat pasul de întoarcere, care constă în excluderea vârfului
x i din S k 1 şi revenirea la mulţimea S k , precum şi transferul lui x i din Q k în Qk .
k

k

Descrierea algoritmului
Pasul 1:

Fie S0  Q 0  Ø, Q0   , k  0 .
Pasul 2:

În conformitate cu cele descrise anterior, alegem un vârf x ik  Qk şi formăm mulţimile

1

adică are loc condiţia suficientă pentru efectuarea pasului de întoarcere.  S k 1  S k  xik   k1 k ik Q  Q \ ( x )    Qk1  Qk \ (xik )  xik . atunci tipărim mulţimea S k ca mulţime stabilă interior maximală şi Qk  Ø. prin excluderea vârfului x i din Qk şi includerea lui k  k în Q :  Qk  Qk \ xik   Q k  Qk  x ik . Să analizăm algoritmul descris. atunci trecem la pasul 5.   şi Qk .   În acelaţi timp vom păstra neschimbate şi mulţimile Qk şi Qk . luând în calitate de exemplu graful x2 x4 x1 x3 Prin Pi se indică pasul i din algoritm. În caz contrar trecem la pasul 2. Considerăm k  k  1 . atunci aceasta înseamnă că toate mulţimile stabile interior maximale ale grafului G=(X. obţinând mulţimea S k . STOP. atunci trecem la pasul 5. Dacă Qk =Ø. Pasul 3: Dacă x  Q k astfel încât ( x)  Qk  Ø. În caz contrar trecem la  trecem la pasul 5.U) au fost tipărite. În caz contrar realizăm pasul 4. Pasul 4:   Dacă Qk  Qk  Ø. Pasul 5: Considerăm k  k  1 şi eliminăm vârful x ik  Modificăm mulţimile vechi Qk din S k 1 . iar pasul 2. Dacă k  0 şi Q0  Ø. 2 .

excludem vârful x1 din Q0 şi includem în Q0 : Q0  {x1. P2. Q2  Q2  Ø. P1. atunci  x1 . x4  . Q  1  Ø  x3    x3  . Q  Q \ (x3)  x3  {x3. k =2-1=1. x3. x4} \  x3   x4.  P4.  P4. k =1. Alegem vârful x3 din Q1 și S 2  S1  x3    x1 . x3 . k = 1+1=2. x3  . S0  Q 0  Ø.   2 1 4 Q  Q \ ( x )  {x } \ {x }  3 3 Ø. Alegem vârful x4 din Q1 și S 2  S1  x4    x1 . x4}  Ø. k  0 .   2 1 P3. x4} \  x1  {x2. x4} \ {x2. x3. x4}  Ø. x2. eliminăm vârful x3 din S2 obținând S1   x1 . Q0  Ø  x1   x1 . eliminăm vârful x1 din S1 obținând S 0  Ø. x4  . k =1-1=0. x2.  P2. x3. Q2  Q2  Ø. P5. x2 . P2. eliminăm vârful x4 din S2 obținând S1   x1 . 3 .   2 1 3 Q  Q \ ( x )  P2. excludem vârful x3 din Q1 şi includem în Q1 : Q1  {x3. x4}  Ø. x2}  {x3. Q2  Q1 \ (x4) x4  {x3} \{x3. Q0  {x1 . atunci  x1 . P2.  P5. P3. k =2-1=1. Ø \ {x2 . Q1  Q0 \ (x1)  x1 Ø .  P4. x4} \ {x2}  Ø. x4 } .  P4. Nu avem vârfuri în Q1  P3. Q  1   x3   x4    x3 . x3  mulțime stabilă interior maximală P5. P3. x4  mulțime stabilă interior maximală P5. S1  S0  x1   x1 .   1 0 1 Q  Q \ ( x )        {x1. x4} \{x1. excludem vârful x4 din Q1 şi includem în Q1 : Q1  {x4} \  x4  Ø . P2. k = 1+1=2. x3. x4}.

x4}. x3.  P2. k = 0+1= 1. x4} \  x3  {x4}.   1 0 P3. P5. x3. excludem vârful x3 din Q0 şi  includem în Q0 : Q0  {x3.  P5. k =2-1=1. x4  . k =1-1=0.  P4. x4} \ {x1.  P4.  P4. x2   x3    x1 .  P5. Alegem vârful x3 din Q0 și S1  S0  x3    x3  . Q2  Q1 \ (x4)  x4  {x4} \{x3. Nu avem vârfuri în Q1  P3. k = 1+1=2. 4 . P5. x3. x2  . Q0   x1  x2    x1 . Q  1  Ø  x4    x4  . excludem vârful x4 din Q1 şi includem în Q1 : Q1  {x4} \  x4  Ø . Alegem vârful x4 din Q1 și S 2  S1  x4    x2 . x2. eliminăm vârful x2 din S1 obținând S 0  Ø. x4} \ {x2.   1 0 2 Q  Q \ ( x )    \ { x . eliminăm vârful x4 din S2 obținând S1   x2  . P2.   2 1 4 Q  Q \ ( x )  Ø \ {x3}  Ø.  P2. Alegem vârful x2 din Q0 și S1  S0  x2    x2  . k = 0+1= 1. Q  Q \ (x3)  x3  {x2. x3}  {x4}. P3. Q0   x1 . k =1-1=0. P2. x4  mulțime stabilă interior maximală P5.P2.   1 0 3 Q  Q \ ( x )    x1 . x3. x }  x1 1 3 Ø. x4}  Ø. x3   P2. x4} \  x2  {x3. x2 . P2. eliminăm vârful x3 din S1 obținând S 0  Ø. Q1  Q0 \ (x2)  x2  {x2. P2. P3. x4}  Ø. Q2  Q2  Ø. excludem vârful x2 din Q0 şi  includem în Q0 : Q0  {x2. atunci  x2 .

. dacă x1 . Folosind notaţiile menţionate. x 2 .P2. x4  . x4}  Ø. x2 P3. x3  .. Răspuns: Mulțimile stabile interior maximale:  x1 .  x2 . STOP. x2 .   1 0 4 Q  Q \ ( x )   x1 .. neadiacente vârfului x k . k =1-1=0. k = 0+1= 1. Prin Lk vom nota familia mulţimilor stabile interior maximale în subgraful.  x1 . x4  . L1   x1  . iar prin Yk – mulţimea tuturor vârfurilor din  k . Q  0   x1 . x2 . Q1  Q0 \ (x4)  x4  {x4} \{x3. x2 . P5. Y1   x1  . x2 nu sunt adiacente Pasul III: Construim familia de mulţimi 5 . adică  k   x1 .. dacă x1 ~ x2 De exemplu Y   . eliminăm vârful x4 din S1 obținând S 0  Ø. generat de mulţimea de vârfuri  k . Considerăm k  1 . ( Yk   y   k : y nu este adiacent cu x k  . toate mulţimile stabile interior maximale pot fi găsite prin realizarea următorului algoritm: Pasul I: Fixăm  1   x1  .U ) cu n vârfuri vom nota prin  k mulţimea primelor k vârfuri.  P4.  P5. x4  Algoritmul recursiv al lui Bednarek şi Taulbee Pentru graful G  ( . x3 . x3  \  x3   x1. excludem vârful x4 din Q0 şi  includem în Q0 : Q0  {x4} \  x4  Ø. x k  . x3   x4    x1 . 2   x1 . Pasul II: Fixăm mulţimea Yk 1   y  Χ k 1 : y nu este adiacent cu vârful xk 1   xk 1   x2 . Alegem vârful x4 din Q0 și S1  S0  x4    x4  . x2 .

 x 2  L*3   x 2  . x5   x2 .I 4*   x1 . L4  {{x1.  x1 .  x1 .  x1 . x4}} {x 2 . Pasul VI: Determinăm Lk 1 ca familia tuturor mulţimilor maximale din L*k 1 . Să analizăm algoritmul descris.{x1. x 4 . Pasul IV: Determinăm I k ca familia tuturor mulţimilor maximale din I k* . În caz contrar Ln conţine toate mulţimile maximale stabile interior în graful G. x4 } L*5   x1 . L5   x1 . x5  . x 2 . atunci se mai consideră că  x k 1   ( M Yk 1 )  L*k 1 .  x2 .  x 2  4. x3  L2   x1  . x4  L*k 1 Lk 1 L*2   x1  . {x2 . x4}.  x3  . atunci M  L*k 1 şi dacă în acest caz se respectă şi condiţia M Yk 1  I k . x 4 .  x2 .I k*   S  M Yk 1 : M este un element al familiei Lk  . x4   x2 . atunci M  x k 1   L*k 1 b) dacă M  Yk 1 . x3  3.  x 1  I 2   Ø. luând în calitate de exemplu graful x3 x1 x2 x4 x5 Rezultatele pentru fiecare iteraţie „k” a algoritmului Bednarek şi Taulbee sunt prezentate în tabel k Yk 1 1. x 4  .  x 1  * 1 I   x1  . x 4 . STOP. x5  6 . Pasul VII: Dacă k  n  1 atunci considerăm k  k  1 şi ne întoarcem la executarea pasului II. x3  . x3  L*4  {{x1. x 4 .  x 2  L3   x 2  . Y3   x1 . x4}. x 4 . x4  . x 2 . x3  . x5 I 4*   x1  . x5  . Pasul V: Construim familia de mulţimi L*k 1 prin cercetarea fiecărui element M din Lk : a) dacă M  Yk 1 . x3}.  x1 .{x1. x4  I k* Ik I   Ø I 1   Ø I 2*   Ø. x3.  x1 . Y2   x 2  2. Y4   x1 . Y5   x1 .  x 2  * 3 I 3   x1  .

astfel încât f i  f j  Aşa dar X p este familia tuturor submatricelor complete din C p . x5 } și 0 = 3.Mulțimile stabile exterior maximale: {x1 . (Elementele aij ale matricei A se calculează în baza elementelor a ij ale matricei A după formula aij  1  aij ). Există două mulţimi stabile interior maxime M 1  {x1 . U ) . x5} . De obicei în calitate de acoperire iniţială C0 se ia familia tuturor submatricelor complete din A de forma f i  ( Ai . Bi ) . Considerăm p  0 . x4 . C p1  (C p \ X p ) (C p \ X p ) . x5 } şi M 2  {x2 . x4 . x4 . cu condiţia ca aceste elemente * noi să nu se conţină în careva dintre submatricele din Pasul IV: Formăm acoperirea de matrici Cp \ X p . ce conţin unitatea în linia Ai . Algoritmul Malgrange este un algoritm iterativ de construire a tuturor submatricelor principale pătratice din A . x5 } {x2 . Algoritmul Malgrange Fie A matricea de adiacentă a unui graf neorientat G  ( X . Pasul III: Construim familia (C p \ X p ) * de submatrici. în baza cărora se determină mulţimile maximale stabile interior ale grafului G. iar A – matricea complementară ei. x3} { x1 . Pasul V: 7 . Pasul I: Construim o acoperire oarecare C0 a matricei A . f j din C p \ X p . obţinute prin aplicarea ambelor operaţii  şi  asupra tuturor perechilor posibile de matrici f i . Pasul II: Construim familia X p   f i  C p : f j  C p . care se conţin în alte submatrici ale lui C p . unde Ai  1 iar Bi este formată din coloanele matricei A . f j  f i . x4 .

cu condiţia ca fiecare dintre ele să nu se conţină în altă submatrice pătratică din F. Exemplu. În caz contrar C p conţine toate submatricele principale ale matricei A . Astfel. Vom construi toate mulţimile stabile interior maxime în graful G b a d e f c Fig.Dacă C p1  C p atunci considerăm p  p  1 şi trecem la executarea pasului 2. Pasul VI: Construim o familie nouă F în care includem submatricele pătratice maximale ale submatricelor principale din C p . 6 Matricea de adiacenţă A a acestui graf şi complementara ei A sunt:  0   1 1 1 0 1 0 0 1 1 0 0 1 1 1 1 0 1 1 1 1 0 0 1 0 1      a b c d e  1   0 0 0 1 0 1 1 0 0 1 1 0 0 0 0 1 0  1 A  0   1  0   0 A   1  0   1  0 0 0 1 1 0 1 0      a b c d e 0  a  0  b 1  c  0  d  1  e 0   f  f 1  a  1  b 0  c  1  d 0   e 1   f  f Acoperirea iniţială C0 a matricei A este: 8 . numărul tuturor mulţimilor stabile interior este egal cu F . Vârfurile ce corespund liniilor (coloanelor) matricelor familiei F formează o mulţime stabilă interior.

f ) ). bf )(cf . f )(bdf . adf )(af . f )( ad . bf )(bcf .b)(df. adf )(c. b)(df . e)( f . abdf )(ab. adbf ). f )(bcf . bcf ). adf )(bc. e)( f . adf )(af . Obţinem: Γ(C0  Χ 0 )  (ab. adf )(e. adf )(bd . adf )(abd . adf  bcf )  (ab. adf ) Formăm acoperirea C2  (C1  1 )  (C1  1 ) C2   (b. b)(adf . bc )( d . bcf )  (a  b. e)( f . f )(abf . f ) (cf . b). f )(ad . abdf ) .f)(ad. b)(bdf . ( f . adf ) C1  1   (b. adf ). b)( df . f )(adf . f )(bf . astfel: (a. adf )( abdf . (bf . ( adf . bc)(bf . f ) C 2   2   (b. bcf )(e.bf)(cf. de unde rezultă. bc). adf ) (bc. bc )(d . bf ) (cf . adf )(b. bcf )(c. (abdf . e)( f . b)(df . prin urmare. f )(bf . adf )(af . că  3  Ø şi prin urmare C4  C3 . e)( f . adf )  (b.adf)(af.f)(bf. bc)(bd . Formăm acoperirea C1  (C0   0 )  (C0   0 ) C1   (a. adf )(abdf . bf ). bcf )(c. abdf )( ab. abdf )(bc.f) se obţine. (bc. Atunci X 0  Ø şi. ce conţine toate submatricele principale este: C 3   (b. bc)(d . f ) 9 . (bcf . bc)(bd .bc)(bd. e). f )  2   (ab. bf )(cf . În conformitate cu algoritmul descris acoperirea matricei A . C0 \  0  C0 . f )(ad . adf )(b. adf )(bc. f )(ad . abdf )(ab. adf )(e. adf )(abd .adf) (submatricea (ab. bcf )(e. f )(abf . b)(df . f ) Deoarece (C2   2 )  Ø obţinem C3  (C 2   2 )  (C 2   2 )  C 2   2 . adf ) (af . de exemplu.C 0   (a.adf)(bc. bcf )(e. f )(bf . bc )(bd . (e. adf ) 1   (a.

(bc.  a. f  şi prin urmare  0 (G )  3 . Obţinem familia F   (e. 10 . d . (adf . bc). bf ).  b. c .Extragem din fiecare submatrice principală submatricea pătratică maximală şi le selectăm pe acelea care nu se conţin în alte submatrici pătratice. f  . Familia tuturor mulţimilor stabile interior a grafului din figura 6 este: S   e . (bf .  b. f  Mulţimea stabilă interior maximă este  a. e). adf ) . d .