Vous êtes sur la page 1sur 19

GRDEA MARTA URICARU RALUCA A34 echipa 21

ALGORITMICA GRAFURILOR

TEMA NR. 3 18 martie 2003 1.


Fie G = (V, E) un graf cu n vrfuri, m muchii i cu matricea de adiacen A. Dintre cele 2m orientri posibile ale muchiilor sale, cosiderm una oarecare i cu ajutorul ei construim matricea de inciden vrf arc Q {0, 1, -1}nXm definit prin: (Q)ve = -1 dac v este extremitatea iniial a arcului e; (Q)ve = 1 dac v este extremitatea final a arcului e; (Q)ve = 0 n toate celelalte cazuri. Demonstrai c matricea A + QQ T este matrice diagonal i precizai semnificaia combinatorie a elementelor ei.

Soluie: Fie G digraful obinut printr-o orientare oarecare a muchiilor lui G. Matricea Q a grafului G are n linii, corespunztoare vrfurilor, i m coloane, corespunztoare arcelor. Din definiia matricei Q se observ c pe fiecare coloan i exist exact un element cu valoarea -1, pe linia corespunztoare extremitii iniiale a arcului i, i exact un element cu valoarea 1, pe linia corespunztoare extremitii finale a arcului i. Fie R = QQT. La nmulirea matricei Q cu QT se obine o matrice ptratic R de dimensiune n X n, pentru care
T R(i, j) = Q (i, k )Q ( k , j ) . k =0 n 1

Pentru i j: Din definiie se deduce c Q (i, k )Q T ( k , j ) 0 dac i numai dac att i, ct i j sunt extremiti ale arcului k. G fiind graf simplu (nu multigraf) exist cel mult o muchie ntre dou vrfuri i i j, deci cel mult un element al sumei de mai sus poate fi diferit de 0. Mai mult, valoarea acestui element este -1, deoarece unul dintre nodurile i i j este extremitate iniial ( Q(l,k) = -1) iar cellalt este extremitate final (Q(l, k) = 1) a arcului k. Pentru i = j: R(i, i) =

Q(i, k )Q T (k , i) =
k =0

n 1

Q(i, k ) .
k =0

n 1

Suma de mai sus va avea un numr de termeni nenuli egal cu numrul de elemente nenule de pe linia i. Din definiie, Q(i, k) 0 dac i numai dac i este extremitate a arcului k. Aadar, R(i, i) este egal cu numrul de arce incidente cu nodul j. Aadar: R(i, j) = -1, dac i j i exist arc ntre i i j (A(i, j) = 1); |NG(i)|, dac i = j; 0, n rest.

2 Fie M = A + QQT ( = A + R). M(i, j) = A(i, j) + R(i, j) = 1 + (-1) = 0, dac i j i exist arc ntre i i j (A(i, j) = 1); 0 + |NG(i)| = |NG(i)| , dac i = j; 0 + 0 = 0, n rest. Aadar, M(i, j) = 0 pentru i j. M este matrice diagonal. Elementele de pe diagonala au urmtoarea semnificaie: M(i, i) = |NG(i)| (elementul de la intersecia liniei i cu coloana i este gradul nodului i). Exemplu: Fie graful G cu matricea de adiacen A: 1 2 3 4 5 1 0 1 0 0 0 2 1 0 1 1 1 3 0 1 0 1 0 4 0 1 1 0 1 5 0 1 0 1 0

O posibil orientare a grafului G este:

Matricea Q: a -1 1 0 0 0 b 0 -1 1 0 0 c 0 0 -1 1 0 d 0 0 0 1 -1 e 0 1 0 -1 0 f 0 1 0 0 -1

1 2 3 4 5

R = QQT. Matricea R: 1 2 3 1 1 -1 0 2 -1 4 -1 3 0 -1 2 4 0 -1 -1 5 0 -1 0

4 0 -1 -1 3 -1

5 0 -1 0 -1 2

M = A + R. Matricea M: 1 2 1 1 0 2 0 4 3 0 0 4 0 0 5 0 0

3 0 0 2 0 0

4 0 0 0 3 0

5 0 0 0 0 2

2.

Fie G un graf oarecare i notm cu b(G) graful obinut din G prin inserarea cte unui nod pe fiecare muchie. Demonstrai c b(G) este graf bipartit. Demonstrai c dou grafuri G i H sunt izomorfe dac i numai dac b(G) este izomorf cu b(H). Deducei c testarea izomorfismului a dou grafuri se reduce polinomial la testarea izomorfismului a dou grafuri bipartite.

Soluie:

# Artm c b(G) este graf bipartit.


Fie G un graf de ordin n i dimensiune m. Prin inserarea cte unui nod pe fiecare muchie a lui G se obine graful b(G) cu n + m noduri i 2m muchii. La construirea lui b(G), se introduce cte un nod ntre dou noduri adiacente din G astfel: Fie v i w cele 2 noduri adiacente i fie u nodul introdus ntre ele; se obine muchie de la u la v i de la u la w i se elimin muchia dintre v i w. Nodul nou introdus, u, nu va fi adiacent cu nici un alt nod din graful iniial i va avea ntotdeauna NG(u)=2. Graful obinut prin inserarea unui astfel de nod ntre oricare dou noduri adiacente are urmtoarele proprieti: - nodurile nou introduse sunt adiacente numai cu cele 2 noduri ntre care au fost introduse i deci nu sunt adiacente ntre ele; - nodurile grafului iniial G sunt adiacente numai cu noile noduri, ntruct n locul oricrei muchii ntre dou noduri din G avem acum dou noi muchii, de aceast dat ntre nodurile din G i nodurile nou introduse. Aadar, V(b(G)) poate fi mprit n dou submulimi: - S = V(G) (nodurile iniiale), cu |S| = n; - T = V(b(G)) - V(G) (nodurile nou introduse), cu |T| = m. Aa cum am artat mai sus, ntre nodurile din X , cu X {S, T} nu esist muchii n b(G), deci b(G) este graf bipartit. Exemplu:

# Artm c dou grafuri G i H sunt izomorfe dac i numai dac b(G) este izomorf cu b(H).
Implicaia direct. G H. Atunci: : V(G) V(H) bijectiv a. . : E(G) E(H) bine definit i bijectiv a.. e = uv E(G) , (uv) = (u) (v).

4 Construim b(G) i b(H) ca mai sus. Putem extinde la e :V(b(G)) V(b(H)) astfel: e(u) = (u), dac u V(G); w , dac u V(b(G)) - V(G), unde vecinii lui u sunt v 1 i v2, iar vecinii lui w sunt (v1) i (v2). Se observ c e(V(G)) = V(H) i e(V(b(G))) - V(G)) = V(b(H)) - V(H). Restricia funciei e pe mulimea V(G) este injectiv (deoarece este injectiv). Dac notm cu f1: V(G) V(H) o funcie pentru care f1(u) = e(u), u V(G), aceast funcie f1 este bijectiv (fiind egal chiar cu ). Trebuie s artm acum c f2 : V(b(G)) - V(G) V(b(H)) - V(H), cu f2(u) = e(u), u V(b(G)) - V(G) este bijectiv. Din definiia lui f2, respectiv a lui e, se deduce c, dac nodul u a fost introdus pe muchia cu extremitile v1 i v2, atunci, funcia f2 i aociaz acel nod din b(H) care a fost introdus pe muchia (v1)(v2). Cu alte cuvinte, definiia lui f2 este echivalent cu definiia lui din izomorfismul grafurilor G i H. Deoarece este bijectiv, i f2 este bijectiv. Deoarece domeniile, respectiv codomeniile celor dou funcii f1 i f2 sunt mulimi disjuncte, rezult c i funcia e pentru care: e(u) = f1(u), dac u V(G); f2(u), dac u V(b(G)) - V(G) este funcie bijectiv. Artm c e : E (b(G)) E(b(H)) bine definit i bijectiv cu proprietile cerute. e = uv E(b(G)) ,e(uv) = e(u) e(v). - Artm c e este bine definit: Din definiia grafurilor b(G) i b(H) , rezult c, e = uv E(b(G)), u V(G) i v V(b(G)) V(G) sau invers (adic, n mod obligatoriu, una din extremiti este din V(G) iar cealalt este un nod introdus ulterior). Fie u V(G) i v V(b(G)) V(G). Atunci w V(G) a.. uw E(G) i v este nodul introdus pe muchia uw. G H u, w V(G) a.. u = (u) (= e(u)) w = (w) (= e(w)) uw E(H) Din definiia lui e v V(b(H)) V(H) a.. e(v) = v. (v are ca noduri adiacente n b(H) pe u i w). Deci exist n b(H) muchia e(u) e(v), oricare uv E(b(G)).

5 - Artm c e este injectiv: (e1, e2 E(b(G)), e(e1) =e(e2) e1 = e2). Fie e1 = uv, e2 = xy dou muchii din E(b(G)) a.. e(uv) =e(xy). Atunci: e(u) e(v) = e(x) e(y) e(u) =e(x) i e (v) =e(y) sau e(u) =e(y) i e (v) =e(x) e este funcie injectiv u = x i v = y sau u = y i v = x uv = xy e este injectiv. - Artm c e este surjectiv: ( E(b(H)) e E(b(G) a.. e =e(e) ) tim c e este bine definit i injectiv, deci cardinalul mulimii e(E(b(G))) (imaginea lui E(b(G)) prin funcia e) este egal cu cardinalul lui E(b(G)): |e(E(b(G))) | = |E(b(G)) |. Dar e(E(b(G))) |E(b(H)))|. De asemenea, din construcia grafurilor b(G) i b(H) |E(b(G)) | = |E(b(H))| = 2m. e(E(b(G))) = E(b(H)) e este surjectiv.

e este bijectiv.
Am demonstrat c, dac G

H, atunci b(G)

b(H).

Implicaia invers. b(G) b(H). Atunci: : V(b(G)) V(b(H)) bijectiv a.. funcia : E(b(G)) E(b(H)) definit prin : e = uv E(b(G)) , (uv) = (u) (v) este bine definit i bijectiv. Fie N numrul de noduri din b(G), respectiv b(H), iar M numrul de muchii din b(G), respectiv b(H). Din modul de construcie a grafurilor b(G) i b(H) avem: - numrul nodurilor lui G = N M / 2 = numrul nodurilor lui H; - numrul muchiilor lui G = M / 2 = numrul muchiilor lui H. Pentru a demonstra izomorfismul dintre G i H trebuie s gsim dou funcii r:V(G)V(H) bijectiv i r : E(G) E(H) bine definit i bijectiv astfel nct : e = uv E(G) , r(uv) = r(u) r(v). Alegem r ca fiind restricia funciei pe mulimea V(G). r(u) = (u) , u V(G). tim c oricare muchie din b(G), respectiv b(H) are o extremitate din V(G), respectiv V(H) i o extremitate din mulimea nodurilor introduse la construcie.

6 Deoarece b(G) b(H), fiecrei muchii e1 din E(b(G)) i se asociaz o muchie e2 din E(b(H)) prin funcia , astfel nct extremitii din V(G) a muchiei e1 i corespunde extremitatea din V(H) a muchiei e2. Aadar, imaginea lui V(G) prin funcia r va fi inclus n V(H). r este injectiv, deoarece este injectiv (iar injectivitatea se pstraz la restriciile funciilor). Vom arta c r : V(G) V(H) este surjectiv. r este injectiv | V(G) | = | r (V(G)) |. Dar r (V(G)) V(H), i, aa cum am vzut mai sus, | V(G) | = | V(H) |. Aadar, r (V(G)) = V(H). Deci r este surjectiv.

r este bijectiv.
- Artm c funcia r este bine definit. Muchiile din G se obin intuitiv din muchiile lui b(G), unind dou muchii care au un vrf comun ce nu aparine lui V(G). Deci dou muchii din b(G) se transform n mod unic ntr-o muchie din G. e = uv E(G) , r(uv) = r(u) r(v). u, v V(G) w V(b(G)) a.. uw , wv E(b(G)). b(G) b(H) w, u, v V(b(G)) a..: w = (w) u = (u) (= r (u)) v = (w) (= r (v)) (uw) = (u) (w) = uw (vw) = (v) (w) = vw uw, vw E(b(H)); w V(H) uv E(H) r(u) r(v) E(H) e = uv E(G) u, v V(H) r este bine definit. - Artm c r este injectiv. (e1, e2 E(G), r(e1) =r(e2) e1 = e2). Fie e1 = uv, e2 = xy dou muchii din E(G) a.. r(uv) =r(xy). Atunci: r(u) r(v) = r(x) r(y) r(u) = r(x) i r (v) = r(y) sau r(u) = r(y) i r (v) = r(x) r este funcie injectiv u = x i v = y sau u = y i v = x uv = xy r este injectiv. - Artm c r este surjectiv: ( E(H) e E(G) a.. e =r(e) ) tim c r este bine definit i injectiv, deci cardinalul mulimii r(E(G)) (imaginea lui E(G) prin funcia r) este egal cu cardinalul lui E(G):

7 Dar r(E (G)) |E(H)|. De asemenea, din construcia grafurilor b(G) i b(H) |E(G) | = |E(H) | = M / 2. r(E(G)) = E(H) r este surjectiv. |r(E(G)) | = |E(G) |.

r este bijectiv.
Am demonstrat c, dac b(G)

b(H), atunci G

H.

Din cele dou implicaii am obinut c G H dac i numai dac b(G)

b(H).

Artm c testarea izomorfismului a dou grafuri se reduce polinomial la testarea izomorfismului a dou grafuri bipartite. Aa cum am demonstrat mai sus, pentru a testa izomorfismul a dou grafuri este suficient s demonstrm c grafurile bipartite construite de la aceste grafuri sunt izomorfe. Trebuie s artm c dintr-un graf G putem obtine n timp polinomial graful b(G). Reprezentm graful G folosind matrice de adiacen. Pentru a construi graful b(G) se parcurg urmtorii pai: se parcurge matricea de adiacen a grafului G, numai n jumtatea sa superioar i se numr muchiile, obinndu-se m ( n O(n2/2) ); se creeaz matricea de adiacen a grafului b(G), cu n+m linii i coloane i se umple cu zerouri; se parcurge din nou matricea lui G i unde gsim muchie ntre i i j , se pune muchie ntre i i k i j ntre j i k, unde k este un numr de la n la m + n - 1, care crete cu o unitate dup aceast operaie ( O(1) pentru fiecare muchie din G ). Algoritmul este: procedure Construiete_b(G)(G) begin /*numrarea muchiilor*/ n |G| m 0 for i 0 to n-1 do for j i+1 to n-1 do if ( A(i,j) = 1 ) then m++ /*crearea matricii cu n+m linii i coloane i zerorizarea*/ V(b(G)) {0, 1, n + m - 1} /*introducerea muchiilor ntre nodurile lui b(G)*/ /*primele n noduri, de la 0 la n 1, corespund nodurilor din G*/ /*nodurile de la n la n + m 1, sunt nodurile adugate ulterior, care vor fi distribuite pe fiecare muchie din G*/ kn for i 0 to n-1 do for j = i+1 to n-1 do if ( A(i, j) = 1 ) then B(i, k) B(k, i) B(j, k) B(k, j) 1

8 k++ end Algoritmul are complexitate O(n2). Deci testarea izomorfismului a dou grafuri se poate reduce polinomial la testarea izomorfismului grafurilor bipartite obinute din ele.

3.

Graful paianjen cu n vrfuri este graful care se obine unind din unul din vrfurile de grad 1 ale grafului P3 cu toate vrfurile unui graf oarecare cu n 3 vrfuri, disjunct de P 3 (n este un ntreg pozitiv mare). Dac G este un graf cu n vrfuri reprezentat prin matricea de adiacen, artai c se poate testa dac este graf paianjen folosind doar O(n) probe ale matricei de adiacen. (o prob este un acces la un element oarecare al matricei, fr a-l memora explicit pentru utilizri ulterioare.)

Soluie: Un graf paianjen Gp are proprietatea c exist 3 noduri n V(Gp), notate u, v i w, astfel nct: - nodul u are un singur vecin, pe v; - nodul v are exact doi vecini, pe u i pe w; - nodul w are n 2 vecini; singurul nod din G care nu este vecin cu w este u.

Notm cu Gp subgraful indus de mulimea V(Gp) {u, v, w}. Putem observa cteva proprieti ale nodurilor din subgraful Gp. Fie un nod x din Gp. Atunci, aa cum se vede din desenul de mai sus, avem: (am notat prin Vecini(i) mulimea vecinilor nodului i n graful Gp i prin Vecini(Vecini(i)) mulimea tuturor vecinilor vecinilor lui i) - w Vecini(x); - v Vecini(x); - v Vecini(Vecini(x)) ; - u Vecini(x); - u Vecini(Vecini(x)) ; Pentru a putea decide dac un graf G este graf paianjen, vom ncerca s gsim, pornind dintr-un nod oarecare din graf, nodul u. Pornim dintr-un nod oarecare x din V(G). Decidem mai nti dac x poate fi u, v sau w. Dac nu este, mergem la pasul urmtor. tim c, dac exist un nod w n graful G, atunci acesta este vecin al lui x i c orice nod, n afar de u, se leag de w. Deci vom putea elimina dintre nodurile din lista vecinilor lui x acele noduri y pentru care exist un nevecin z dintre nodurile care nu sunt vecine cu x, deoarece:

10 dac nodul nevecin z este chiar u, atunci nu este vecin cu nici un nod din lista vecinilor lui x, deci va fi depistat de algoritm (deoarece lista vecinior lui x rmne goal); - dac nodul nevecin z nu este u, atunci nodul eliminat y nu poate fi w, deoarece w este vecin cu toate nodurile cu excepia lui u. Aadar, dac graful este paianjen, w va fi eliminat din list numai de ctre u (care va elimina de fapt toate nodurile vecine cu x). Aadar lista de vecini ai lui x va deveni goal doar atunci cnd este gsit nodul u (dac aceste exist). De asemenea, tim c u nu este vecin cu x i cu niciunul din vecinii lui x. Deci putem elimina dintre nodurile candidate acele noduri care nu au aceast proprietate. Un algoritm de verificare dac G este graf paianjen este: function EstePaianjen(G) begin n |G| /*dac G nu are cel puin 4 noduri, atunci, conform definiiei, nu poate fi graf paianjen*/ if (n < 4) then return false /*putem alege un nod oarecare x din V(G), de exemplu 0*/ /*ETAPA I */ /*creez dou liste: - lista vecinilor lui x listaV; - lista nodurilor care nu sunt vecine cu x listaNonV; */ for i 1 to n 1 do if (A(0, i) = 1) then AdaugLaList(i, listaV) else AdaugLaList(i, listaNonV) /*ETAPA A II-A*/ /*Verificm dac nodul x ales poate fi u, v sau w*/ switch (lungime(listaV)) case 0: /* graful G nu este conex, deci nu poate fi graf paianjen*/ return false case 1: /* nodul x ar putea fi u*/ if (EsteU(x)) then return true break case 2: /* nodul x ar putea fi v*/ if (EsteV(x)) then return true -

11 break case n - 2: /* nodul x ar putea fi w*/ if (EsteW(x)) then return true else /* ntr-un graf paianjen, unicul nod de grad n-2 este w. Dac s-a gsit un nod de grad n-2 care nu satisface toate proprietile lui w (adic unicul nod care nu i este vecin are gradul 1 i vecinul su are grad 2 i este vecini cu w) atunci graful nu poate fi paianjen, deoarece toate celelalte noduri au grad cel mult n-3 */ return false break case n -1: /*exist un nod vecin cu toate celelalte, deci nu poate exista nodul u n acest graf*/ return false default: break /*ETAPA A III-A*/ /*l cutm pe u n listaNonV. Acele noduri care cu siguran nu pot fi u vor fi eliminate din list pentru a se evita efectuarea unor operaii inutile. Ne vom baza pe proprietatea c ntr-un graf paianjen u este unicul nod nevecin cu w, deci este suficient s gsim un nod de gradul 1 nevecin cu un nod de gradul n-2 pentru a putea decide dac graful este paianjen, adic un nod care nu este vecin cu nici unul din vecinii lui x.*/ posibilU -1 for all i in listaNonV do while (listaV NULL) do j (listaVfirst) if (A(j, i) = 1) then /*dac nodul i curent din listaV are un vecin n listaNonV, atunci nu poate fi u, deci va fi eliminat, i se trece la nodul urmtor, deci la pasul urmtor din bucla for*/ EliminDinList(i, listaNonV) break else /*se elimin acele noduri vecine cu x care nu sunt vecine cu i. Dac exist un nod w, atunci acesta va fi eliminat doar dac i = u. */ EliminDinList(j, listaV) /*dac pentru un nod i din listaNonV nu s-a gsit nici un nod vecin cu el n listaNonV (adic dac s-a ieit din bucla while prin nesatisfacerea condiiei listaV NULL), atunci acesta ar putea fi nodul u cutat, deoarece, dac w exist n list, acel nod i l elimin; dac nu este acesta, cu siguran graful nu poate fi paianjen, deoarece ar exista cel puin dou noduri care nu sunt vecine cu nici un vecin al lui x, deci nu ar exista nici un vecin al lui x care s aib exact n - 2 vecini (n consecin nu ar exista un nod w n graf)*/

12 if (listaV = NULL) then posibilU i break /*ETAPA A IV-A*/ /*Concluziile trase din rezultatul de la etapa anterioar*/ /*Dac s-a ieit din bucla for pentru c s-a gsit un posibil nod u se face verificarea; altfel, graful nu poate fi graf paianjen*/ if (posibilU -1) then /*numr vecinii lui posibilU; dac nu este doar unul, graful nu este paianjen*/ numrVecini 0 for l 0 to n 1 do if ( A(l, posibilU) = 1) then numrVecini++ if (numrVecini > 1) then return false return EsteU(posibilU) else return false end function EsteU(i) begin /*caut vecinii lui i*/ for j 0 to n-1 do if (A(i, j) = 1) then break /*verific dac j, vecinul lui i are 2 vecini*/ numrVecini 0 for k 0 to n-1 do if (A(k, j) = 1) then numrVecini++ if (k i) then vecinDiferitDe_i k if (numrVecini = 2) then /*verificm dac cellalt vecin al lui j are exact n 2 vecini i dac nodul care nu este vecin cu acesta este chiar i*/ numrVecini 0 for m 0 to n 1 do if (A(m, vecinDiferitDe_i) = 1) then

13 numrVecini++ else if (m vecinDiferitDe_i ) then nodNevecin m if (numrVecini = n - 2) then if (nodNevecin = i) then return true else return false else return false else return false end function EsteV(i) begin /*caut vecinii lui i*/ vecin1 -1 vecin2 -1 for j 0 to n-1 do if (A(i, j) = 1) then if (vecin1 = -1) then vecin1 j else vecin2 j break /*numr vecinii acestora, memornd, n aceeai parcurgere, pentru fiecare ultimul nod cu care nu este vecin*/ numrVecini1 0 numrVecini2 0 nevecin1 -1 nevecin2 -1 for k 0 to n-1 do if (A(k, vecin1) = 1) then numrVecini1++ else if (k vecin1) then nevecin1 k if (A(k, vecin2) = 1) then numrVecini2++ else

14 if (k vecin2) then nevecin2 k if (numrVecini1 = 1 and numrVecini2 = n - 2) then /*verificm dac vecin1 este u i vecin2 este w, adic dac vecin1 este unicul nod nevecin cu vecin2*/ if (nevecin2 = vecin1) then return true else return false else if (numrVecini2 = 1 and numrVecini1 = n - 2) then /*verificm dac vecin2 este u i vecin1 este w, adic dac vecin1 este unicul nod nevecin cu vecin1*/ if (nevecin1 = vecin2) then return true else retrun false else return false end function EsteW(i) begin /*caut nodul care nu este vecin cu i*/ for j 0 to n-1 do if (A(i, j) = 0 and j i) then break /*verific dac j are exact 1 vecin; dac da, l memoreaz*/ numrVecini 0 for k 0 to n-1 do if (A(k, j) = 1) then numrVecini++ vecin k if (numrVecini = 1) then /*verificm dac vecinul lui j are exact 2 vecini i dac cellalt vecin este i*/ numrVecini 0 for m 0 to n 1 do if (A(m, vecin) = 1) then if (m j and m i) then return false

15 return true else return false end Numrul accesrilor matricei de adiacen a grafului G: Etapa I: Pentru crearea listelor listaV i listaNonV se parcurge o singur dat linia x a matricei A. Vor fi n 1 = O(n) accesri. Etapa aII-a: Pentru verificarea dac nodul ales este u, v sau w se vor cerceta cel mult trei dintre liniile matricei A, deci se vor efectua 3n = O(n) accesri. Etapa a III-a: Fie t dimensiunea listei listaV; atunci listaNonV va avea dimensiunea n 1 t. n aceast etap se ncearc detectarea n graf a nodului u.. Dac exist, u se va afla n listaNonV, iar w n listaV. tim c, dac G este graf paianjen, nodul u nu trebuie s fie legat nici de x, nici de vreunul dintre vecinii lui x, deci nici de w. l cut pe u n listaNonV. Verificm pentru fiecare nod din listaNonV dac are vecini n listaV. Dac i din listaNonV are un vecin din listaV, atunci cu siguran nu poate fi u, deci va fi eliminat din list. Aadar, pentru fiecare element din listaNonV, fiecare accesare a matricei cu rspunsul 1 are drept consecin eliminarea nodului respectiv din list. Vom avea cel mult |listaNonV| = n t 1 accesri ale matricei cu rspunsul 1. tim c un nod i poate fi u numai dac va elimina toate nodurile vecine cu x din list. (dac graful este paianjen, toate celelalte noduri n afar de u sunt vecine cu unul din vecinii lui x, adic cu w). Deci, pentru fiecare i din listaNonV, vom elimina acele noduri care nu sunt vecine cu el din listaV, tiind c, dac exist w, acesta va fi eliminat doar de u). Aadar, pentru fiecare element din listaV se vor putea da cel mult cel mult un rspuns 0 la interogarea matricei A (la un astfel de rspuns va fi eliminat). Deci vor fi cel mult |listaV| = t accesri ale matricei la care rspunsul este 0. Cum elementele matricei nu poit fi dect 0 sau 1, nseamn c se vor efectua n aceast etap cel mult t + n t 1 = n 1 probe ale matricei A. Deci numrul probelor matricei A efectuate n aceast etap este O(n). Etapa a IV-a: Numrarea vecinilor unui nod i se poate face prin parcurgerea liniei i din matricea de adiacen a grafului, deci prin n = O(n) accesri. Aa cum am vzut mai sus, verificarea dac un nod este nodul u se face efectund O(n) accesri ale matricei de adiacen. n concluzie, putem decide dac graful G este graf paianjen dup O(n) + O(n) + O(n) + O(n) = O(n) probe ale matricei de adiacen a acestuia.

16

4.

Asociem unui arbore T de ordin n cu rdcina r un drum P 3n orientat procednd astfel: fiecrui nod v al lui T i se asociaz trei noduri cu acelai nume v pe care le desemnm prin v 1, v2, v3; dac v nu are n T descendent stng, atunci se introduce arcul v1v2 n P3n; dac v nu are n T descendent drept, atunci se introduce arcul v2v3 n P3n; dac decendentul stng al lui v este w, atunci se introduc n P 3n arcele v1w2 i w3v2; dac decendentul drept al lui v este w, atunci se introduc n P 3n arcele v2w1 i w3v3. Dac se parcurge drumul P3n de la extremitatea iniial r1 la extremitatea final r3 i se listeaz numele vrfurilor n ordinea parcurgerii lor se obine un ir n care numele fiecrui vrf al lui T apare exact de 3 ori. Demonstrai c: dac din acest ir se reine doar prima apariie a fiecrui nume se obine parcurgerea pre-order a arborelui T; dac din acest ir se reine doar a doua apariie a fiecrui nume se obine parcurgerea n-order a arborelui T; dac din acest ir se reine doar a treia apariie a fiecrui nume se obine parcurgerea post-order a arborelui T.

Soluie: Fie T arborele pentru care se efectueaz o parcuregre ca mai sus. Intuitiv, putem spune c irul obinut prin parcurgerea drumului P3n de la extremitatea iniial la extremitatea final are urmtoarea form: primul nume din ir este numele rdcinii; n cazul n care arborele are subarbore stng, urmeaz numele nodurilor din subarborele stng, n forma precizat de aceti pai; urmeaz din nou numele rdcinii arborelui; n continuare sunt aezate nodurile din subarborele drept n aceeai ordine, n cazul n care acesta exist; irul este ncheiat de numele nodului rdacin.

Un algoritm de construcie a irului ar arta astfel: procedure Construiete(r) begin Introducere_n_ir(r1) if (rstnga NULL) then Construiete(rstnga) Introducere_n_ir(r2) if (rdreapta NULL) then Construiete(rdreapta) Introducere_n_ir(r3) end Deci acest ir de noduri se definete ntr-o manier recursiv, ntruct definirea arborelui T se face utiliznd definirea pentru subarborele stng i definirea pentru subarborele drept. Din acest motiv putem utiliza metoda induciei complete dup numrul de noduri ale arborelui, pentru a demonstra c ntr-adevr obinem cele 3 parcurgeri. Pasul de baz:

17 n=1 Pentru arborele cu un singur nod (pe care l vom nota 1), irul obinut este 1 1 1; se observ c, ntr-adevr, considernd doar prima apariie vom obine parcurgerea pre-ordine, considernd doar a doua apariie vom obine parcurgerea in-ordine, iar considernd ultima apariie vom obine parcurgerea post-ordine a arborelui cu n singur nod. n = 2. Fie T un arbore cu dou noduri: rdcin (notat 1) i subarbore stng(notat 2).

irul obinut este: 1 2 2 2 1 1. Observm c: dac selectm numai primele apariii ale numelor nodurilor obinem 1 2, care reprezint parcurgerea pre-order a arborelui iniial dac am selecta numai a doua apariie a nodurilor n ir am obine 2 1, care reprezint parcurgerea in-oder a arborelui. dac am selecta doar a treia apariie a nodurilor am obine 2 1, i anume parcurgerea n post-order a arborelui.

Fie T un arbore cu dou noduri: rdcin (notat 1) i subarbore drept(notat 2).

irul obinut este: 1 1 2 2 2 1. Observm c: dac selectm numai primele apariii ale numelor nodurilor obinem 1 2, care reprezint parcurgerea pre-order a arborelui iniial dac am selecta numai a doua apariie a nodurilor n ir am obine 2 1, care reprezint parcurgerea in-oder a arborelui. dac am selecta doar a treia apariie a nodurilor am obine 2 1, i anume parcurgerea n post-order a arborelui.

n = 3. Fie un arbore T un arbore cu 3 noduri, astfel nct unul dintre ele s fie rdcin i celelalte s fie fiii si.

18

irul obinut dup regulile date este de forma : 1 2 2 2 1 3 3 3 1. Observm c: dac selectm numai primele apariii ale numelor nodurilor obinem 1 2 3, care reprezint parcurgerea pre-order a arborelui iniial dac am selecta numai a doua apariie a nodurilor n ir am obine 2 1 3, care reprezint parcurgerea in-oder a arborelui. dac am selecta doar a treia apariie a nodurilor am obine 2 3 1, i anume parcurgerea n post-order a arborelui. Totodat, n toate cele trei cazuri tratate, irul obinut este de forma specificat mai sus, i anume: rdcin, irul subarboreui stng, rdcin, irul subarborelui drept, rdcin. Pasul inductiv: Se presupune c irul obinut este de forma de mai sus i c se obin aceste parcurgeri pentru un arbore cu k noduri, k n. Demonstrm c avem aceeai form i pentru un ir obinut dintr-un arbore cu n+1 noduri i c obinem aceleai parcurgeri .

Fie T un arbore cu n+1 noduri. Atunci subarborii fii ai rdcinii au cel mult n noduri, de unde deducem, folosind ipoteza inductiv, c irurile obinute din ei suntde forma cerut. n continuare, trebuie s demonstrm c sirul obinut dup regula de mai sus din acest arbore cu n+1 noduri respect condiia. vom porni cu rdcina r, deci primul nod din drum va fi chiar nodul rdcin. pentru r se verific dac are subarbore stng. n cazul n care avem subarborele stng, se introduce arc de la rdcin la descendentul stng notat w i se urmeaz acelai procedeu pentru acest nod (descendentul stng), printr-o parcurgere n adncime a arborelui; cum irul obinut, dup regulile precizate, din subarborele stng al arborelui iniial are cel mult n noduri putem spune c respect presupunerea fcut, deci se ncheie cu nodul rdcin al acestui subarbore, w. n continuare, se introduce arc de la noua intrare a lui w n ir la noua intrare a lui r n ir (a doua). Dac nu avem subarborele stng, introducem arc de la prima intrare a lui r n ir la a doua. n ambele cazuri, irul obinut pn la acest pas se ncheie cu r. verificm dac avem subarbore drept pentru nodul r. Dac avem descendent drept al lui r, notat u, introducem arc de la r la prima intrare a lui u n ir i n continuare se aplic recursiv algoritmul de construcie al irului pentru subarborele drept, la fel ca la pasul

19 anterior. i acest ir se ncheie cu ultima apariie a lui u i conform regulilor, se introduce arc de la u la ultima apariie a lui r n irul final. Dac nu ar exista subarborele drept, sar introduce arc direct de la a doua intrare a lui r n ir, la a treia. Deci irul obinut dintr-un arbore cu n+1 noduri este de aceeai form cu cea a irurilor obinute din arbori cu mai puine noduri, i anume : rdcin, ir subarbore stng, rdcin, ir subarbore drept, rdcin. Dac extragem din acest ir numai primele apariii ale nodurilor obinem: rdcina, adic nodul r; primele apariii ale nodurilor din irul obinut din subarborele stng al lui r, dac exist (care reprezint parcurgerea pre-order a subarborelui, aa cum am presupus n ipoteza inductiv); primele apariii ale nodurilor din irul obinut din subarborele drept al lui r, dac exist (adic parcurgerea pre-order a subarborelui); Aceasta este de fapt definiia recursiv a parcurgerii pre-order pentru un arbore binar i n concluzie, irul obinut din primele apariii ale nodurilor pentru un arbore cu n+1 noduri reprezint parcurgerea pre-order a acestui arbore. Dac extragem din acest ir numai a doua apariie a fiecrui nod, obinem: a doua apariie a fiecrui nod din irul obinut din subarborele stng al lui r, dac exist (care reprezint parcurgerea in-order a subarborelui, aa cum am presupus n ipoteza inductiv); rdcina, adic nodul r; a doua apariie a fiecrui nod din irul obinut din subarborele drept al lui r, dac exist (adic parcurgerea in-order a subarborelui); Aceasta este de fapt definiia recursiv a parcurgerii in-order pentru un arbore binar i n concluzie, irul obinut din primele apariii ale nodurilor pentru un arbore cu n+1 noduri reprezint parcurgerea in-order a acestui arbore. Dac extragem din acest ir numai ultimele apariii ale nodurilor obinem: ultimele apariii ale nodurilor din irul obinut din subarborele stng al lui r, dac exist (care reprezint parcurgerea post-order a subarborelui, aa cum am presupus n ipoteza inductiv); ultimele apariii ale nodurilor din irul obinut din subarborele drept al lui r, dac exist (adic parcurgerea post-order a subarborelui); rdcina, adic nodul r; Aceasta este de fapt definiia recursiv a parcurgerii post-order pentru un arbore binar i n concluzie, irul obinut din primele apariii ale nodurilor pentru un arbore cu n+1 noduri reprezint parcurgerea post-order a acestui arbore. Am obinut aadar proprietatea adevrat pentru un arbore cu n + 1 noduri. Deci proprietatea este adevrat pentru orice arbore, adic irul are forma intuit i se obin acele parcurgeri. q. e. d.

Vous aimerez peut-être aussi