Algoritmica grafurilor 7

8
95 Capitolul 7 NUMĂRUL DE STABILITATE ŞI DENSITATEA UNUI GRAF 7.1. Mulţimi stabile şi clici Definiţie. Numim mulţime stabilă în graful G o mulţime de vârfuri S X pentru care G [S] [S, 0] = / , adică, x,y S [x, y] U . Notăm cu P familia mulţimilor stabile în graful G. O mulţime stabilă S care este maximală în raport cu relaţia de incluziune între mulţimi se numeşte mulţime stabilă maximală, adică S S' S' P (S' X ). Numărul S (G) max | S | P α = se numeşte numărul de stabilitate al grafului G, iar o mulţime S P cu |S| (G) va fi numită sistem de stabilitate al grafului G. Definiţie. Se numeşte clică în graful G o mulţime de vârfuri C X care generează un subgraf complet în graful G, adică x,y C [x, y] U . Se numeşte densitatea grafului G, numărul C (G) max | C | C ω = , unde C este familia clicilor grafului G. Observaţii. a) Pentru orice mulţime stabilă S P şi orice clică C C are loc relaţia: |S C| 1 . b) Orice mulţime stabilă în graful G este o clică în graful său complementar G şi invers. Avem evident: (G) (G) α şi (G) (G) ω . Un graf G cu n vârfuri şi m muchii va fi notat cu G(n,m). Una dintre cele mai importante probleme privind densitatea unui graf este următoarea: Fie n şi k < n două numere naturale. Care este cel mai mic număr k 1 z (n) + cu proprietatea:

description

Cap7

Transcript of Algoritmica grafurilor 7

Page 1: Algoritmica grafurilor 7

95

Capitolul 7 NUMĂRUL DE STABILITATE ŞI

DENSITATEA UNUI GRAF

7.1. Mulţimi stabile şi clici Definiţie. Numim mulţime stabilă în graful G o mulţime de vârfuri S X⊆ pentru care

G[S] [S,0]= / , adică, x, y S [x, y] U∈ ⇒ ∉ . Notăm cu P familia mulţimilor stabile în graful G. O mulţime stabilă S care este maximală în raport cu relaţia de incluziune între mulţimi se numeşte mulţime stabilă maximală, adică S S' S' P⊂ ⇒ ∉ (S' X⊆ ). Numărul

S(G) max | S |

P∈α =

se numeşte numărul de stabilitate al grafului G, iar o mulţime S P∈ cu | S | (G)= α va fi numită sistem de stabilitate al grafului G. Definiţie. Se numeşte clică în graful G o mulţime de vârfuri C X⊆ care generează un subgraf complet în graful G, adică x, y C [x, y] U∈ ⇒ ∈ . Se numeşte densitatea grafului G, numărul

C(G) max | C |

C∈ω = ,

unde C este familia clicilor grafului G. Observaţii.

a) Pentru orice mulţime stabilă S P∈ şi orice clică C C∈ are loc relaţia:

| S C | 1∩ ≤ . b) Orice mulţime stabilă în graful G este o clică în graful său

complementar G şi invers. Avem evident: (G) (G)α = ω şi (G) (G)ω = α .

Un graf G cu n vârfuri şi m muchii va fi notat cu G(n,m). Una dintre cele mai importante probleme privind densitatea unui graf este următoarea: Fie n şi k < n două numere naturale. Care este cel mai mic număr

k 1z (n)+ cu proprietatea:

Page 2: Algoritmica grafurilor 7

96

k 1m z (n) (G(n,m)) k 1+≥ ⇒ ω ≥ + ? Pentru a răspunde la această întrebare să considerăm:

n t k r= ⋅ + ,

unde ntk⎡ ⎤= ⎢ ⎥⎣ ⎦

, 0 r k 1≤ ≤ − şi să construim graful knT în felul următor:

Graful knT are n vârfuri repartizate în clasele 1 2 kS ,S ,...,S cu

it 1, i 1, 2,..., r

| S |t, i r 1,..., k,+ =⎧

= ⎨ = +⎩

iar două vârfuri diferite vor fi unite printr-o muchie dacă şi numai dacă aparţin la clase diferite. Se constată uşor că numărul muchiilor grafului k

nT este: 2

k

2 2

k(k 1)t r(r 1)f (n) r(k 1)t2 2

rk 1(n r ) .22k

− −= + − +

⎛ ⎞−= − + ⎜ ⎟

⎝ ⎠

7.2. Problema mulţimii independente În matematică, problema mulţimii independente (independent set problem (IS)) este recunoscută ca o problemă de teoria grafurilor sau/şi combinatorică. Problema mulţimii independente este de tipul NP – completă. Descriere Fiind dat un graf G, o mulţime independentă reprezintă o submulţime a nodurilor grafului considerat, noduri neadiacente. Cu alte cuvinte, subgraful indus de aceste noduri nu are muchii, ci doar vârfuri izolate. În aceste condiţii, problema mulţimii independente cere: Fiind dat un graf G şi un întreg k, are G o mulţime independentă de mărime cel puţin k? Problema de optimizare corespunzătoare este cunoscută sub numele de problema mulţimii independente maxime, care încearcă să găsească cea mai extinsă mulţime independentă dintr-un graf. Odată găsită soluţia problemei decizionale, se poate face uz de căutarea binară pentru a rezolva problema iniţială, apelarea soluţiei fiind de ordinul (log )O V . Se cunoaşte faptul că pentru această problemă nu avem un algoritm de aproximare al factorului constant dacă NPP ≠ . Algoritmi Cel mai simplu algoritm pentru mulţimile independente examinează fiecare submulţime de vârfuri de mărime cel puţin k, verificând dacă este independentă sau nu. Acest lucru implică un timp de ordin polinomial dacă

Page 3: Algoritmica grafurilor 7

97

acest k egalează numărul vârfurilor, sau dacă este mai mic cu o unitate ca acesta, dar nu dacă reprezintă jumătate din numărul vârfurilor. O problemă mult mai uşor de rezolvat este aceea a găsirii unei mulţimi independente maximale, care să nu fie conţinută în nici o altă astfel de mulţime independentă. Pornim de la un singur vârf. Găsim un vârf neadiacent celui considerat iniţial şi-l adăugăm mulţimii respective, apoi găsim un alt nod neadiacent niciunui vârf menţionat anterior ş.a.m.d. până când nu mai găsim astfel de noduri. La acel moment mulţimea este maximal independentă. Se cunosc algoritmi mult mai complecşi, de listare a tuturor mulţimilor independente maximale, dar, în general, numărul unor astfel de mulţimi poate fi foarte mare. Demonstraţia NP – complet Se poate observa uşor că problema este de tipul NP (aparţine clasei NP), ţinând cont de faptul că, dacă avem o submulţime de vârfuri, putem verifica dacă există muchii între oricare din două vârfuri într-un timp polinomial. Pentru a arăta că problema este de tipul dificultate – NP (NP – dificil), vom folosi o „reducere” a unei alte probleme de tipul NP – complet. Presupunem că se cunoaşte deja rezultatul lui Cook, conform căruia problema satisfacerii booleene este NP – completă. Orice formulă booleană poate fi redusă, în mod eficient, la forma sa normală conjunctivă (conjunctive normal form CNF). În forma normală conjunctivă: ■ Formula este o conjuncţie (and ( şi)) de propoziţii. ■ Fiecare propoziţie reprezintă o disjuncţie (or(sau)) de literali. ■ Fiecare literal reprezintă fie o variabilă fie negaţia acesteia. Spre exemplu, următoarea formulă constituie o formă CNF, unde ~ denotă negaţia:

( 1x sau ~ 2x sau ~ 3x ) şi ( 1x sau 2x sau 4x ) O astfel de formulă este satisfăcătoare dacă putem atribui valori adevărat / fals fiecărei variabile în parte astfel încât cel puţin un literal din fiecare propoziţie să aibă valoarea de adevăr adevărat. Spre exemplu, orice atribuire a lui 2x cu valoarea de adevăr fals, respectiv a lui 4x cu valoarea de adevăr adevărat satisface formula mai sus amintită. În cele ce urmează, se va prezenta o reducere de tipul mai mulţi - la unul (timp - polinomial), de la CNF- la problema mulţimii independente. Mai întâi, se ataşează câte unu nod pentru fiecare literal din formulă; se includ duplicate ale vârfurilor pentru apariţii multiple. Se trasează o muchie între:

1. Oricare doi literali, fiecare reprezentând negaţia celuilalt. 2. Oricare doi literali, ce se află în aceeaşi propoziţie.

Page 4: Algoritmica grafurilor 7

98

Astfel, în exemplul de mai sus, 2x ar fi adiacent cu ~ 2x , primul 1x ar fi adiacent cu ~ 2x , iar cel de-al doilea 1x ar fi adiacent cu 4x .

Graful rezultat în urma reducerii, pentru exemplul de mai sus

Rămâne de văzut dacă acest graf are o mulţime independentă de mărime cel puţin k, unde k reprezintă numărul propoziţiilor, dacă şi numai dacă formula rămâne satisfăcătoare. Să presupunem că avem o atribuire ce satisface formula iniţială. În aceste condiţii putem alege un literal din fiecare propoziţie, care devine adevărată prin atribuirea acestei valori. Această mulţime este independentă, deoarece include un literal din fiecare propoziţie (nu există muchii de tipul 2), şi deoarece nici o atribuire nu transformă atât literalul cât şi negaţia acesteia propoziţii adevărate(nu există muchii de tipul 1). Pe de altă parte, însă, presupunând că avem o mulţime independentă de mărime k, sau mai mare; nu poate conţine oricare doi literali în aceeaşi propoziţie, odată ce acestea constituie perechi adiacente. Dar, ţinând cont de faptul că există cel puţin k noduri şi k propoziţii, trebuie să avem cel puţin unul în fiecare propoziţie (de fapt exact 1). De asemenea nu se poate întâmpla să coexiste un literal şi negaţia sa, deoarece există muchii între acestea. Această înseamnă că este uşor să alegem o atribuire astfel încât toate cele k propoziţiile să devină adevărate, această atribuire satisfăcând formula iniţială. Ceea ce face ca reducerea la mulţimea independentă să fie atât de simplă este capacitatea muchiilor de a exprima, în graf, constrângerile, dar şi necesitatea de a nu alege simultan un literal şi negaţia sa. Problema colorării grafurilor „beneficiază”, de asemenea, de această proprietate. 7.3. Problema clicii În teoria complexităţii computaţionale, problema clicii este o problemă teoretică în grafuri, de complexitate NP. Problema se numără printre problemele iniţiale, de complexitate NP, prezentate de către Richard Karp în cadrul seminarului din 1972 intitulat „Reductibility Among Combinatorial Problems”. Această problemă a fost, de asemenea, menţionată şi în articolul lui Cook, o introducere în teoria problemelor NP - complete.

Page 5: Algoritmica grafurilor 7

99

Graf conţinând clică de mărime 3

Clica într-un graf reprezintă o mulţime de vârfuri adiacente perechi, adică subgraful indus, care este un graf complet. În cele din urmă, problema clicii constă în determinarea existenţei unei clici într-un graf, a cărei mărime să fie cel puţin k (ordin predefinit). Odată identificate k sau mai multe vârfuri ce formează o clică, este trivial să demonstrăm acest lucru, fapt ce-i justifică complexitatea NP. Problema corespunzătoare de optimizare, problema clicii maxime, constă în găsirea celei mai mari clici din graf. Complexitatea NP a problemei clicii derivă din complexitatea NP a problemei mulţimii independente, deoarece există o clică de mărime k (cel puţin) dacă şi numai dacă există o mulţime independentă de mărime k (cel puţin) în graful complementar. Acest lucru este uşor de observat, ţinând cont de faptul că dacă un subgraf este complet, atunci subgraful complementar nu are muchii. Algoritmi Un algoritm „primitiv” de găsire a clicilor într-un graf constă în examinarea fiecărui subgraf ce conţine cel puţin k vârfuri, şi îndeplinirea condiţiei de formare a unei clici. Algoritmul este polinomial (complexitate polinomială) dacă acel k coincide cu numărul vârfurilor, sau cu o constantă mai puţin, dar nu dacă k este, să spunem, jumătate din numărul total al vârfurilor. Numărul total al clicilor de mărime k a unui graf de mărime |V| este egal cu

| V | | V | !k k!(| V | k)!

⎛ ⎞=⎜ ⎟ −⎝ ⎠

.

În mod euristic am începe prin considerarea fiecărui nod ca fiind o clică, iar mai apoi să se unească aceste clici în altele mai mari până când acest lucru nu mai este posibil. Două clici A şi B pot fuziona dacă fiecare vârf din clica A este adiacent fiecărui vârf din clica B. Aceasta presupune un cost, în ceea ce priveşte timpul, liniar (liniar în numărul muchiilor), dar poate eşua în găsirea unei clici mari, întrucât două sau mai multe părţi a clicii mari vor fi fost fuzionat anterior, prin intermediul unor vârfuri care nu aparţin clicii. Se găseşte, totuşi, cel puţin o clică maximală, care nu este conţinută în nici o altă clică mai mare.

Page 6: Algoritmica grafurilor 7

100

Unele cazuri mai speciale, pot fi rezolvate într-un timp mai scurt decât cel exponenţial. Pentru k = 3, algoritmul are o complexitate 1,41( )O n , unde n reprezintă numărul muchiilor.

7.4. Determinarea mulţimilor stabile maximale Fie G = [X,U] un graf simplu cu mulţimea de vârfuri

1 2 nX {x , x ,..., x }= . Notăm cu nS S⊂ familia mulţimilor stabile maximale ale grafului G. Există mai mulţi algoritmi pentru determinarea familiei Sn. În continuare vom prezenta algoritmul lui Bednarek şi Taulbee. Pentru acesta să punem pentru 1 k n≤ ≤ :

k 1 2 k

k k G

k 1 k k 1

X {x , x ,..., x },G [X ] ,

X {y | y X , [y, x ] U},+ +

=

=

= ∈ ∉

şi fie S k familia mulţimilor stabile maximale ale grafului G k . Algoritmul B – T. (Bednarek şi Taulbee)

1. Se consideră X x x kS1 1 1 1{ }, { }( 1)= = = .

2. Se determină familia k k kI T T S Y S S1{ | , }+= = ∩ ∈ şi

familia kI' a mulţimilor maximale faţă de incluziune din kI .

3. Se determină familia kS 1∗+ după cum urmează:

Pentru fiecare kS S∈ punem

k kS x S1 1{ } ∗+ +∪ ∈ , dacă kS Y 1+⊆

sau dacă kS Y 1+⊆/ punem kS S 1∗+∈ şi k k kx S Y S1 1 1{ } ( ) ∗

+ + +∪ ∩ ∈

atunci şi numai atunci când k kS Y I1 '+∩ ∈ .

Familia kS 1∗+ conţine numai mulţimile specificate mai sus.

4. Se determină familia kS 1+ a mulţimilor maximale din kS 1∗+ .

5. Algoritmul se termină când k = n – 1.

În ultima fază obţinem familia Sn a mulţimilor stabile maximale în graful Gn = G. Pentru justificarea acestui algoritm demonstrăm următoarea afirmaţie: Teoremă. Pentru fiecare k = 1, 2, …, n – 1 familia Sk+1 furnizată de algoritmul B – T., este familia tuturor mulţimilor stabile maximale ale grafului Gk+1. Demonstraţie. Presupunem că Sk este familia mulţimilor stabile maximale ale grafului Gk. Este suficient să arătăm că orice element al familiei k 1S∗ + este o

Page 7: Algoritmica grafurilor 7

101

mulţime stabilă a grafului Gk+1 şi că orice mulţime stabilă maximală a acestui graf aparţine familiei k 1S∗ + . Prima parte a afirmaţiei rezultă din modul de construcţie al familiei

k 1S∗ + , deoarece k 1S∗ + conţine mulţimi sau submulţimi din Sk (care fiind stabile în Gk, sunt stabile şi în graful Gk+1) la care se adaugă elementul xk+1 dacă şi numai dacă xk+1 nu este adiacent în Gk+1 cu nici unul dintre elementele mulţimii sau submulţimii considerate. Fie acum S o mulţime stabilă maximală a grafului Gk+1. Dacă

k 1x S+ ∉ atunci kS S∈ şi k 1S Y +⊆/ . Rezultă, conform pasului 3 al

algoritmului (alternativa a doua) că k 1S S∗ +∈ . Dacă k 1x S+ ∈ atunci k 1T S {x }+= − este stabilă în graful Gk şi

k 1T Y +⊆ . Dacă kT S∈ , atunci

k 1 k 1S T {x } S∗+ += ∪ ∈ . În cazul când kT S∉ există o mulţime kT ' S∈ cu T T '⊂ . Avem

k 1T T ' Y +⊆ ∩ şi din cauza maximalităţii lui S rezultă că

k 1T T ' Y += ∩ , k 1T ' Y +⊆/ , k 1 kT ' Y I '+∩ ∈ .

Deci k 1 k 1 k 1S (T ' Y ) {x } S∗+ + += ∩ ∪ ∈ , şi astfel, teorema este demonstrată. Exemplu. Să se determine familia S7 pentru graful din figură:

1. X1 = {1}, S1 = {1} (k = 1) Y2 = {1}

2. I1 = {{1}} = 1I '

3. 2 {{1, 2}}S∗ =

Page 8: Algoritmica grafurilor 7

102

4. S2 = {{1,2}} X2 = {1,2}, S2 = {{1,2}} (k = 2) Y3 = {1}

2. I2 = {{1}} = 2I '

3. Avem {1,2}⊆/ Y3 şi {1,2}∩Y3∈ 2I ' . Deci 3 {{1, 2},{1,3}}S∗ = .

4. 3 3S S∗= Y4 = {2} 2. I3 = {{2}, 0/ } 3I ' {{2}}=

3. 4 {{1, 2},{2, 4},{1,3}}S∗ =

4. 4 4S S∗= 5Y 0= / 2. I4 = {0/ , 0/ , 0/ , 0/ }, 4I ' {0}= /

3. 5 {{1, 2},{5},{2, 4},{5},{1,3},{5}}S∗ = 4. 5 {{1,2},{2,4},{1,3},{5}}S = Y6 = {1,2,3,4,5} 2. I5 = {{1,2},{2,4},{1,3},{5}} = 5I '

3. 6 {{1, 2,6},{2, 4,6},{1,3,6},{5,6}}S∗ = 6 {{1,2,6},{2,4,6},{1,3,6},{5,6}}S = Y7 = {1,2,3,4,5} 2. I6 = {{1,2},{2,4},{1,3},{5}} = 6I '

7

7

3. {{1,2,6},{1,2,7},{2,4,6},{2,4,7},{1,3,6},{1,3,7},{5,6},{5,7}} .

SS

∗ =

=

Deoarece k = n – 1 = 6, algoritmul se opreşte. Familia mulţimilor stabile maximale în graful G considerat este S7, iar numărul de stabilitate este (G) 3α = . Observaţii.

a) Determinare familiei Cn a clicilor maximale în graful G revine, pe baza observaţiei b) anterioare, la determinarea familiei mulţimilor stabile maximale în graful G (complementarul grafului G).

b) Determinarea familiei Sn şi a familiei Cn este necesară printre altele în problema găsirii unei acoperiri minimale a mulţimii vârfurilor unui graf cu mulţimi stabile (problema colorării vârfurilor) şi respectiv cu clici.