Algoritmul lui Bron şi Kerbosch În rezultatul aplicării acestui algoritm, pentru un graf neorientat G =(X;U =(X;U ob!inem lista tuturor mul!imilor stabile interior ma"imale. La fiecare fiecare etapă etapă k de realizare realizare a algoritmului algoritmului se construiesc construiesc două mulţimi mulţimi S k şi Q k . Mulţ Mulţim imea ea S k reprez reprezin intă tă mu mulţi lţimea mea de vârfu vârfuri ri stabil stabilăă inter interior ior,, obţin obţinut utăă la etapa etapa k , ia i ar Q k reprezint reprezintăă mulţimea mulţimea vârfurilor vârfurilor din graf, neadiacente neadiacente vârfuril vârfurilor or din S k . Prin urmare, putem consider consideraa
!dăugarea oricărui oricărui vârf din Qk = Χ (Γ ( S k ) S k ) . !dăugarea
Q k
la
S k permite
să e"tindem
mulţimea stabilă interior curentă şi să obţinem la etapa următoare o mulţime nouă S k # . 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 e"tinderea mulţimii
S k ,
iar
Qk Qk Qk . %u
alte cuvinte, la etapa respectivă Qk reprezintă mulţimea vârfurilor, care potenţial pot fi folosite pentru e"tinderea mulţimii stabile interior S k . !stfel, !stfel, dacă pentru e"tinderea e"tinderea mulţimii mulţimii S k se alege alege vârful vârful xi Qk atunci atunci la etapa etapa următoa următoare re k # mulţimile mulţimile curente curente S k , Qk şi Qk se modifică $n modul următor& k
S k +# = S k xik
Qk # Qk Γ(xik ) Q # Qk Γ x( ik ) xik ( Г ( xi ) ' x j ∈ X & xi , x j
∈ U
.
se numeşte vecinătate a lui
x i ).
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 e"cluderea vârfului x i din S k # şi revenirea la mulţimea S k , precum şi transferul lui x i din Q k $n Qk . k
k
#escrierea algoritmului $asul %& ie $asul '&
S
= Q− = *, Q
Χ ,
k
.
+n conformitate cu cele descrise anterior, alegem un vârf xi S k #
k
Qk şi formăm mulţimile
S k xik
− − k +# k ik
Q = Q Γ( x ) Qk # Qk Γ x( ik ) xik +n acelaţi timp vom păstra nescimbate şi mulţimile
.
Q k
şi
Qk
. %onsiderăm
k
k # .
$asul & -acă x Qk astfel $ncât Γ ( x) Qk *, adică are loc condiţia suficientă pentru efectuarea pasului de $ntoarcere, atunci trecem la pasul . +n caz contrar realizăm pasul /. $asul )& -acă
Qk
Qk
*, atunci tipărim mulţimea
trecem la pasul . -acă
Q k
'*, iar
Qk
S k ca
mulţime stabilă interior ma"imală şi
*, atunci trecem la pasul . +n caz contrar trecem la
pasul 0.
$asul *& %onsiderăm k k # şi eliminăm vârful x i din S k # , obţinând mulţimea S k . Modificăm mulţimile veci Qk şi Qk , prin e"cluderea vârfului x i din Qk şi includerea lui $n Qk & k
k
Qk Qk xik
Qk
Qk
xik .
-acă k şi Q *, atunci aceasta $nseamnă că toate mulţimile stabile interior ma"imale ale grafului 1'(234) au fost tipărite. +-$. +n caz contrar trecem la pasul 0. 5ă analizăm algoritmul descris, luând $n calitate de e"emplu graful
x0
x/
Prin P i se indică pasul i din algoritm. P1. S
= Q− = *, Q
P2. S #
= S { x#} = { x#} ,
P3.
P4.
→
→
P2. !legem
+
= 8 x# , x0 , x6 , x/ 7 , k
− −
Q# = Q Γ(x#) =
.
+
+
( { })
8 x07 = *, Q# = Q Γ x( #) x# = x8 # x, 0 x, 6 x, /7 x8 # x, 07 = x8 6, x/7 , k '#.
*
P2.
vârful x6 din Q#+ și S 0 = S # { x6 } = { x#, x6 } ,
− −
Q0 = Q# Γ(x6) =
*
8 x0 x, /7 = *,
Q0 = Q# (Γ x( 6) x{ 6} ) = x8 6 x, /7 x8 0 x, 6, x/7 = *, k ' #9#'0. +
P3.
+
= Q0+ = *, atunci { x# , x6 } mulțime stabilă interior ma"imală k '0:#'#, eliminăm vârful x6 din 50 obținând S # = { x#} , e"cludem vârful
→
P5.
−
P4. Q0
includem $n
P2. !legem
−
Q#
&
Q# == x8 6 x, /7 x{ 6 } = { x/}, Q +
−
#
vârful x/ din Q#+ și S 0
=
= *
x6 din Q#+
şi
x/ din Q#+
şi
{ x } = { x } .
6
6
} − −
{ } {
S # x/ = x# , x/ ,
Q0 = Q# Γ(x/) = 8 x 7 8x 7 = 6
6
*,
Q0 = Q# (Γ x( / ) x{ /}) = x8 67 x8 6, x/7 = *, k ' #9#'0. +
P3. P5.
+
= Q0+ = *, atunci { x# , x/ } mulțime stabilă interior ma"imală k '0:#'#, eliminăm vârful x/ din 5 0 obținând S # = { x#} , e"cludem vârful
→
−
P4. Q0
includem $n P2. ;u
Q#− &
Q# == x8 /7 { x/} = * , Q +
−
#
{ } { x } = { x , x } .
= x6
avem vârfuri $n Q#+ → P3. → P4. → P5.
/
6
/
k '#:#',
P5.
includem $n
eliminăm vârful x# din 5# obținând &
Q−
P2. !legem
Q == x8 # x, 0 x, 6 x, /7 x{ #} = x8 0 x, 6, x/7, Q +
−
= *
vârful x0 din
Q+ și S # = S )
{ x } = { x } ,
0
0
S
=
*, e"cludem vârful x# din
{ x } = { x } .
#
Q# = Q Γ(x0) =
şi
x/ din Q#+
şi
P0.
→
#
− −
Q+
{ x#}
8 x# x, 67 = * ,
Q# = Q (Γ x( 0 ) x{ 0} ) = x8 0 x, 6 x, /7 x8 # x, 0 x, 67 = 8x/7, k ' 9#' #. +
P3.
+
→
P4.
→
P2. !legem
P2.
vârful x/ din Q#+ și S 0
=
} − −
{ } {
Q0 = Q# Γ(x/) =
S # x/ = x0 , x/ ,
*
8 x67 = *,
Q0 = Q# (Γ x( / ) x{ /}) = x8 /7 x8 6, x/7 = *, k ' #9#'0. +
+
−
P3.
→
P5.
k '0:#'#,
= Q0+ = *, atunci { x0 , x/ } mulțime stabilă interior ma"imală
P4. Q0
includem $n
eliminăm vârful x/ din 50 obținând S # = { x0 } , e"cludem vârful −
Q#
&
Q# == x8 /7 { x/} = +
*,
−
Q# = *
{ x } = { x } .
/
/
avem vârfuri $n Q#+ → P3. → P5. k '#:#', eliminăm vârful x0 din 5# obținând
→
P2.
P2. ;u P5.
Q == x8 0 x, 6 x, /7 x{ 0} = x8 6, x/7, Q +
includem $n
Q−
P2. !legem
vârful x6 din
&
−
Q+ și S # = S )
=
=
*, e"cludem vârful x0 din
{ x } { x } = { x , x } . #
{ x } = { x } , 6
S
6
0
#
− −
Q# = Q Γ(x6) =
0
→
Q+
şi
Q+
şi
P2.
{ x#} ,
Q# = Q ( Γ x( 6) x{ 6} ) = x8 0 x, 6 x, /7 x8 0 x, 6, x/7 = *, k ' 9#' #. +
P3. P5.
+
→
P4.
→
P5.
k '#:#',
includem $n
Q−
eliminăm vârful x6 din 5# obținând &
Q == x8 6 x, /7 x{ 6} = 8x/7, Q +
−
=
{ x# , x0 }
S
=
*, e"cludem vârful x6 din
{ x6 } = { x# , x0 , x6 }
→
P0.
P2. !legem
vârful x/ din
+ Q și S # = S )
{ x } = { x } , /
/
− −
Q# = Q Γ(x/) =
{ x# , x0 , x6 }
x{ 6} = x{ #, x0}
Q# = Q (Γ x( / ) x{ /}) = x8 /7 x8 6, x/7 = *, k ' 9#' #. +
+
P3.
→ P4. → P5.
P5.
k '#:#',
includem $n
Q−
eliminăm vârful x/ din 5# obținând &
Q) == x8 /7 { x/} = *, Q +
−
=
S
{ x# , x0 , x6 }
=
*, e"cludem vârful x/ din
+
Q
şi
{ x/ } = { x# , x0 , x6 , x/ } .→ +-$.
<ăspuns& Mulțimile stabile interior ma"imale& { x# , x6 } , { x# , x/ } , { x0 , x/ }
Algoritmul recursi. al lui Be/nare0 şi aulbee Pentru graful G = ( Χ3U ) cu n vârfuri vom nota prin Χ k mulţimea primelor k vârfuri, adică Χ k = { x# , x0 ,..., xk } . Prin Lk vom nota familia mulţimilor stabile interior ma"imale $n subgraful, generat de mulţimea de vârfuri Χ k , iar prin Y k = mulţimea tuturor vârfurilor din Χ k , neadiacente vârfului x k . ( Y k = { y ∈ Χ k & y nu este adiacent cu xk } . olosind notaţiile menţionate, toate mulţimile stabile interior ma"imale pot fi găsite prin realizarea următorului algoritm&
$asul 1& i"ăm Χ#
=
{ x } , L = { x } , Y = { x } . %onsiderăm k = # . #
#
#
#
#
$asul 11& i"ăm mulţimea
Y k +#
= { y ∈ Χ k +# & y nu este
adiacent cu vârful xk +#} ∪ { xk +#}
x{ 0 }, dacă x# > x 0 -e e"emplu Y = . 0 x{ # , x 0 }, dacă x# , x 0 nu sunt adiacente $asul 111& %onstruim familia de mulţimi ? I k = { S = M Y k +# & M este un element al familiei Lk } .
$asul 12& -eterminăm I k ca familia tuturor mulţimilor ma"imale din $asul 2& %onstruim familia de mulţimi
I k . ?
? Lk +# prin cercetarea fiecărui element M din Lk &
a dacă M ⊂ Y k # , atunci M { xk +# } ∈ L?k +# +
b dacă
M ⊄ Y k +# ,
atunci M ∈ L?k # şi dacă $n acest caz se respectă şi condiţia M Y k # ∈ I k , atunci se mai consideră că { x k +# } ( M Y k +# ) ∈ L?k +# . +
+
$asul 21& -eterminăm Lk # ca familia tuturor mulţimilor ma"imale din +
Lk +# . ?
$asul 211& -acă k < n − # atunci considerăm k = k + # şi ne $ntoarcem la e"ecutarea pasului @@. +n caz contrar Ln conţine toate mulţimile ma"imale stabile interior $n graful G. +-$3 5ă analizăm algoritmul descris, luând $n calitate de e"emplu graful x6 x#
x0
x/ x
Y k +#
I k ?
#. 0. 6.
Y 0 = x 0
I #
/.
{ }
?
= { *}
I #
= { x# , x6 } I 0? { *, { " # } } Y / = { x# , x0 , x/ } I 6? = { { x# } , { x0 } } Y 6
Y
= { x# , x0 , x/ , x } I /?
I 0
=
=
?
I k
Lk +#
= { *} =
?
{ *, { " # }}
0
#
/
/
? /
#
0
L?6
0
6
{{ } { }} ? / = # 6 # /
I 6 = x# , x0
{{ x } , { x , x } I = {{ x , x } , { x , x }} { x , x }} #
{ { } { }} = { { x } , { x } , { x , x } }
L0 = x# , x 0
/
/
#
6
L k +#
{{ } { } } = { { x } , { x , x } }
L0 = x# , x0 L6
0
#
6
L 88 x x, , x8 x, 7,
L/ = 88 x# x, 67, x8 # x, /7,
x8 0 x, /77
x8 0 x, /7
?
L
= {{ x# , x6 }, { x# , x/ , x }, L = {{ x# , x6 }, { x# , x/ , x } { x0 , x/ , x }}
{ x0 , x/ , x }}
Mulțimile stabile e"terior ma"imale& 8 x# , x67 mulţimi stabile interior ma"ime M # = 8 x# , x/ , x 7 şi M 0
8 x# , x/ , x. 7 8 x0 , x/ , x 7 . = 8 x0 , x/ , x 7 și
α
F"istă două
' 6.
Algoritmul 4algrange ie A matricea de adiacentă a unui graf neorientat G = ( X 3 U ) , iar A = matricea complementară ei. (Flementele aij ale matricei A se calculează $n baza elementelor a ij ale matricei A după formula aij = # − aij ). !lgoritmul Malgrange este un algoritm iterativ de construire a tuturor submatricelor principale pătratice din A , $n baza cărora se determină mulţimile ma"imale stabile interior ale grafului G.
$asul 1& %onstruim o acoperire oarecare C a matricei A . -e obicei $n calitate de acoperire iniţială C se ia familia tuturor submatricelor complete din A de forma f i = ( Ai , Bi ) , unde A = # iar Bi este formată din coloanele matricei A , ce conţin unitatea $n linia Ai . %onsiderăm p = . )
)
i
$asul 11& %onstruim familia X p
=
f i ∈ C p & ∃ f j
∈ C p , f j ≠ f i , astfel $ncât f i ⊂ f j
!şa dar X p este familia tuturor submatricelor complete din submatrici ale lui C p .
C p ,
care se conţin $n alte
$asul 111& %onstruim familia Γ(C p X p ) de submatrici, obţinute prin aplicarea ambelor operaţii ?
asupra tuturor perecilor posibile de matrici
f i , f j din
?
şi
C p X p , cu condiţia ca aceste elemente
noi să nu se conţină $n careva dintre submatricele din C p X p .
$asul 12& ormăm acoperirea de matrici
C p+# = (C p X p ) Γ(C p X p ) . $asul 2& -acă C ≠ C atunci considerăm p = p + # şi trecem la e"ecutarea pasului 0. +n caz contrar C p conţine toate submatricele principale ale matricei A . p +#
p
$asul 21& %onstruim o familie nouă F $n care includem submatricele pătratice ma"imale ale submatricelor principale din C p , cu condiţia ca fiecare dintre ele să nu se conţină $n altă submatrice pătratică din F. Gârfurile ce corespund liniilor (coloanelor) matricelor familiei F formează o mulţime stabilă interior. !stfel, numărul tuturor mulţimilor stabile interior este egal cu F . 5"emplu& Gom construi toate mulţimile stabile interior ma"ime $n graful G a d
e f c
6ig3 7
Matricea de adiacenţă A a acestui graf şi complementara ei A sunt& # # # ← a # # # ← # # # # ← c A = # # # ← d # # # # # ← e # # ← f ↑ ↑ ↑ ↑ ↑ ↑
a
c
d
e f
# A = # #
#
# ← a
#
#
# ←
#
#
#
#
#
#
← c # ← d ←e # ← f
↑ ↑ ↑ ↑ ↑ ↑
a
c
d
e f
!coperirea iniţială C
!tunci X Hbţinem&
=
C ) a
matricei
A
este&
= { (a, adf )(, cf )(c, c)(d , adf )(e, e)( f , adf )} .
* şi, prin urmare, C Χ = C .
$#C − Χ " = {#a!f"#ad!adf"#af!ad f"#c!c"# d!f"#f! f"#cf!"#d f!adf"}
(submatricea (a, f ) se obţine, de e"emplu, astfel& (a, adf ) (, cf ) = (a , adf cf ) = (a, f ) ).
ormăm acoperirea C #
C #
= (C − Χ ) Γ (C − Χ )
= { (a, adf )(, cf )(c, c)(d , adf )(e, e)( f , adf )(a, f )(ad , adf ) (af , adf )(c, c)(d , f )(f , f )(cf , )(df , adf )}
Χ# = { (a, adf )(c, c)(d , adf )} C #
− Χ# = { (, cf )(e, e)( f , adf )(a, f )(ad , adf )(af , adf ) (c, c)(d , f )(f , f )(cf , )(df , adf )}
ormăm acoperirea C 0
C 0
= (C # − Χ# ) Γ (C # − Χ# )
= { (, cf )(e, e)( f , adf )(a, f )(ad , adf )(af , adf )(c, c)(d , f )(f , f ) (cf , )(df , adf )(ad , f )(af , f )(cf , )(df , f )(adf , adf )(adf , f )} Χ 0 = { (a, f )(ad , adf )(af , adf )(d , f ) (cf , )(df , adf )(ad , f )(af , f )(df , f )}
− Χ 0 = { (, cf )(e, e)( f , adf )(c, c)(f , f )(cf , )(adf , adf )(adf , f )} -eoarece Γ (C 0 − Χ 0 ) = * obţinem C 0
C 6
de unde rezultă, că Χ 6
= *
= (C 0 − Χ 0 ) Γ (C 0 − Χ 0 ) = C 0 − Χ 0 ,
şi prin urmare
C / = C 6 .
+n conformitate cu algoritmul descris acoperirea matricei principale este&
!
, ce conţine toate submatricele
C 6
= { (, cf ), (e, e), ( f , adf ), (c, c), (f , f ), (cf , ), ( adf , adf ), (adf , f )}
F"tragem din fiecare submatrice principală submatricea pătratică ma"imală şi le selectăm pe acelea care nu se conţin $n alte submatrici pătratice. Hbţinem familia F
= { (e, e), (c, c), (f , f ), (adf , adf )} .
amilia tuturor mulţimilor stabile interior a grafului din figura I este&
{{ } { } {
}{
}}
S = e , , c , , f , a, d , f
Mulţimea stabilă interior ma"imă este { a, d , f } şi prin urmare
α
(G ) = 6 .
Algoritmul construirii mul!imii /e .8rfuri stabile e"terior minime Problema determinării mulţimii de vârfuri stabilită e"terior minimă este de fapt ecivalentă problemei de divizare minimă, care poate fi formulată $n modul următor. Pentru o mulţime de elemente & = 8% # , % 0 ,..., % M 7 şi familia de submulţimi S = 8S # , S 0 ,..., S ' 7
,
S i
⊂ & , de determinat subfamilia
SJ = 8S j , S j ,. ., S j 7 ⊂ S cu un număr minim #
0
k
de elemente astfel $ncât k
S ji = &
.
i =#
şi
=∅,
pentru ∀), ( ∈ 8#,0,..., k 7, ) ≠ ( . Fcivalenţa acestor două probleme se observă imediat ce considerăm & = Χ şi S i = 8 xi 7 Γ ( xi ) pentru ∀i = #, Χ . +n această interpretare mulţimea de vârfuri stabilă e"terior minimă va fi formată din acele vârfuri xi ∈ Χ , pentru care S i ∈ S' . S j)
S j
(
F"punem $n continuare un algoritm ce poate fi folosit la soluţionarea problemei de acoperire minimă a unei mulţimi de elemente & = 8% # , % 0 ,..., % M 7 . @niţial construim un tabel special ale cărui linii corespund elementelor mulţimii &, iar coloanele corespund mulţimilor S ∈ S , cu elementele din linia cu numărul A pB egale cu #, dacă % ∈ S ( k = #, n) , şi egale cu = $n caz contrar. iecărui element % p i se pune $n corespondenţă blocul de coloane ce corespund acelor submulţimi din S, care conţin acest element şi nu conţin elemente % k , k < p . %oloanele ce corespund submulţimilor din S şi care formează blocul p, le p p p vom aranKat $n acest bloc $n ordine arbitrară şi le vom nota prin S # , S 0 ,..., S k , p = #, n (aici k p este numărul mulţimilor familiei S, care conţin elementul % p ). 5tructura tabelului pe j
p
j
p
blocuri este prezentată scematic $n tabelul 0. (
abelul ' Cloc nr. # # #
# 0
Cloc nr. 0 #
0 #
0 0
0 k 0
,..., S S , S ,..., S S , S % #
# # ... #
Cloc nr. 6 S #6 , S 06 ,..., S k 66
9
9
# # ... #
% 0 % 6
sau #
. . .
# # ... # sau #
% n
sau #
Cloc nr. / ... . . . . . . .
S #n , S 0n ,..., S k nn
9 # # ... #
La descrierea algoritmului vom folosi următoarele notaţii& B? =
soluţia optimă curentă
?
= cardinalul mulţimii B? (numărul de submulţimi mulţimii &) Z
B = Z =
S j ,
care formează o divizare a
familia mulţimilor din S, care poate conduce la obţinerea soluţiei optime cardinalul familiei B
* = submulţimea de elemente din &, care
aparţin mulţimilor din B
* =
S i
S i ∈ B
!lgoritmul propus este un algoritm iterativ şi foloseşte arborele de căutare $n procesul determinării soluţiei optime. Eoată informaţia necesară pentru soluţionarea problemei se va prezenta sub forma unui tabel descris mai sus. iecare coloană a acestuia, folosită pentru e"tinderea familiei B, va fi marcată $ntr:un mod oarecare pentru a ţine cont de această situaţie la etapa următoare a algoritmului.
#escrierea algoritmului& $asul %& %onstruim tabelul descris anterior. %onsiderăm B ' *, * + , , Z ' , Z? ' . $asul '& %alculăm
p = min8i & % i ∉ * 7 .
a) -acă toate coloanele blocului A pB au fost folosite la careva etape anterioare pentru e"tinderea mulţimii B, sau blocul A pB este vid atunci realizăm $n continuare pasul 3 b) +n caz contrar alegem prima coloană, nefolosită $ncă pentru e"tinderea lui B. ie S j p coloana aleasă din blocul A pB.
$asul & -acă Z + # < Z , atunci realizăm $n continuare pasul /. +n caz contrar realizăm pasul I. ?
$asul )& ormăm mulţimea
- P = S jp * F"tindem mulţimile B = B 8S j 7 p
* = * S j
p
.
=Z +# = B , Z? = Z şi realizăm $n continuare pasul I. +n caz
Z
-acă * = & atunci considerăm B contrar trecem la pasul 0.
$asul *& -acă
p
=#
?
atunci fi"ăm B ? drept soluţie optimă a problemei.+-$3
-acă p > # , atunci revenim la componenţa precedentă a mulţimilor B şi * , prin e"cluderea ultimei mulţimi adăugate S ji , i < p
B = B 8S ji 7 * = * - i
.
-eclarăm - i = ∅ şi considerăm Z = Z − # . Eoate coloanele blocului p le declarăm libere ($n viitor orice coloană a acestui bloc poate fi folosită pentru e"tinderea mulţimii B). Erecem la pasul 0.
$asul 7& Modificăm mulţimile B şi * . -acă ultimul element adăugat $n B a fost
S j p atunci
B = B 8S jp 7 * = * - p -eclarăm - p
=∅
şi considerăm
Z
= Z − # . Erecem la e"ecutarea pasului 0.
-acă * = & , atunci considerăm B? = B , contrar, realizăm pasul 0.
Z
?
= Z şi realizăm $n continuare pasul /. +n caz
5"emplu& 5ă analizăm graful din fig., pentru care vom considera & = Χ = 8 x# , x0 , x6 , x/ , x 7
S # = 8 x# , x6 , x 7 S 0 = 8 x0 , x6 , x/ 7 S 6 = 8 x# , x0 , x6 7 S / = 8 x0 , x/ 7 S = 8 x# , x 7 S = 8S # , S 0 , S 6 , S / , S 7
4şor putem observa că una dintre acoperirile minime este determinată de mulţimile S # şi S 0 (adică B ? = 8S # , S 0 7 ). -e aici deducem că o mulţime de vârfuri stabilă e"terior minimă este 8 x# , x0 7 . x/
x6
x
x0
x#
6igura : Gom analiza $n continuare realizarea pas cu pas a algoritmului descris. +n conformitate cu pasul # construim tabelul 6 abelul Cloc nr. # # #
# 0
S ( S # ) S ( S 6 )
x#
x0 x6
x/ x.
% # #
% # #
Cloc nr. 0 # 6
0 #
0
S ( S )
S ( S 0 )
S 0 ( S / )
% #
9 % # #
9 % #
(;otaţia S i j ( S k ) din tabel $nseamnă că coloana cu numărul A iB a blocului cu numărul A jB corespunde mulţimii S k a familiei S) @niţial considerăm B ' *, * + *, Z ' , Z? ' 9.
$asul '& -eoarece
% # ∉ * , considerăm p
=#
şi marcăm coloana
#
S #
.
$asul & ? Z 9 # ' 9 #N Z ' 9.
B = B 8S # 7 = * 8S # 7 = 8S # #
#
#
= 8 x#, x6 , x77
* = 8 x# , x6 , x 7
'# -eoarece * ≠ & , realizăm $n continuare pasul 0 al algoritmului. Z
$asul '& p ' 0. Marcăm coloana
0
S #
.
$asul & ? Z 9 # ' 0 N Z .
- 0
= 8 x 0 , x / 7
B = B 8S #0 7 = 8S ## = 8 x# , x 6 , x . 7, S #0 = 8 x 0 , x 6 , x / 77 * = 8 x# , x0 , x6 , x/ , x 7
'0 -eoarece * +& vom avea Z
= 8S ## = 8 x# , x6 , x 7, S #0 = 8 x0 , x6 , x/ 77 şi Z? ' 0. Hbservăm că B ? determină o divizare a mulţimii de vârfuri 2 $n două submulţimi. Hbţinem o mulţime de vârfuri stabilă e"terior = 8 x# , x 0 7 . +n continuare algoritmul se foloseşte pentru a determina dacă s:a obţinut o acoperire minimă sau nu. B ?
$asul 7& Fliminăm din B ultimul element adăugat * = 8 x# , x 6 , x 7 , - 0 = ∅ , Z ' Z = #' #. $asul '& !legem coloana
0
S 0
$asul & ? Z 9#'#9#'Z.
.
0
S #
. Hbţinem
B = 8S ##
= 8 x# , x6 , x 77 .
$asul 7& Flminăm S 00 din B. Hbţinem B ' *, * ' *,
- # = * , Z
$asul '& -eoarece p = min8i & xi ∉ * 7 = # alegem coloana
' .
S 0 . #
$asul & Z
+ # = + # < Z ? (Z ? = 0) .
$asul )& ormăm mulţimi noi
- # = x8 # x, 0 , x6 ) B = B 8S 0 7 = ∅ 8S 0 7 = 8 x# , x 0 , x6 7 #
#
# 0= # 0 6
* *= S x8 x, , x ) '# Fste clar că * ≠ Χ . Z
$asul '& %alculăm p = min8i & xi ∉ * 7 = / . Cloc cu numărul patru $n tabelul nostru nu e"istă. $asul )& Modificăm mulţimile B şi * B ' *, * ' *, -eclarăm - # = * şi considerăm Z ' . $asul '& -eoarece p = min8i & xi ∉ * 7 = # , alegem coloana $asul & Z +#=
+ # < Z? (Z? = 0)
$asul )&
- # = x8 #, x. ) B = B 8S 6 7 = 8 x# , x 7 #
S 6# .
# 6= # .
* = * S x8 , x ) '#
Z
$asul '& %alculăm 0 S # .
p = min8i & x i
∉ * 7 = 0 . !legem prima coloană nefolosită din blocul 0 = coloana
$asul & ? Z + # = 0 = Z . -eci $n continuare se va realiza pasul I. $asul 7& Modificăm mulţimile B şi * . Fliminăm coloana B ' *, * ' *, - # = * , Z ' .
S 6 . #
$asul '& %alculăm p min8i & xi ∉ * 7 = # . $asul *& reprezintă soluţia optimă # 0 B = 8S # , S # 7 . -eci mulţimea 8 x# , x0 7 este mulţimea stabilă e"terior minimă a grafului din fig.. B
?
?