Documente Academic
Documente Profesional
Documente Cultură
lie
Universitatea de Stat din Moldova
Facultatea de Matematică şi Informatică
ato
An
La disciplina: Algoritmica grafurilor
Lab. nr. 1: Mulțimi stabile într-un graf
iuc
an
: Țîg
A elaborat: A verificat:
tor
Chişinău – 2016
Mulţimi de vârfuri stabile interior
lie
Definiţie. Submulţimea de vârfuri A X a unui graf G se numeşte stabilă
interior, dacă nu conţine două vârfuri adiacente.
Folosind notaţiile descrise mai sus, orice mulţime stabilă interior A X este
caracterizată de relaţia
ato
A (x) Ø, x A
sau
A (A) Ø.
În conformitate cu definiţia dată, orice graf G conţine mulţimi stabile interior.
Astfel, de exemplu, orice mulţime formată dintr-un
An
singur vârf din G este stabilă interior.
Definiţie. Mulţimea de vârfuri stabilă interior A se numeşte maximală, dacă
în graf nu există o altă mulţime stabilă interior H astfel, încât A H .
Mulţimea stabilă interior maximală A poate fi reprezentată prin relaţia:
A (H ) Ø , pentru H X , astfel încât A H .
Definiţie. Mulţimea de vârfuri stabilă interior A se numeşte maximă, dacă
iuc
pentru orice mulţime stabilă interior H din graf are loc relaţia: A H .
Cardinalul mulţimii stabile interior maxime a grafului G se notează prin 0 (G )
şi se numeşte număr de stabilitate internă. Dacă notăm prin Q familia tuturor
mulţimilor stabile interior din graf, atunci 0 (G ) max
AQ
A .
Pentru graful G din fig.1, mulţimile
an
S1 x4 ,
S 2 x1 , x3 ,
S3 x2 , x7 ,
S 4 x1 , x3 , x7 ,
Țîg
S5 x1 , x3 , x5 , x6 , x8 ,
S 6 x2 , x5 , x6 , x8 .
sunt stabile interior. Printre ele S3, S4, S5, S6 sunt maximale, şi numai una – S5 este
mulţime stabilă interior maximă. Prin urmare, 0 (G ) 5 .
x1 x5
:
x2 x8
x4 x7
tor
x3
x6
Fig. 1
Sunt cunoscute unele estimări ale numărului de stabilitate internă 0 (G ) . Să
menţionăm doar câteva dintre ele: a) 0 (G) (1 deg x) 1 . (2.1)
Au
x
În cazul grafului din fig.1, după cum a fost calculat mai sus, 0 (G ) 5 . Suma
din partea dreaptă a inegalităţii (2.1) este:
1 1 1 1 1 1 1 1 15
(1 deg x) 1
,
lie
x 3 4 3 6 3 3 4 2 6
ceea ce confirmă estimarea lui 0 (G ) dată prin relaţia a).
Pentru unele grafuri neorientate, inegalitatea a) se transformă într-o egalitate.
De exemplu, în cazul unui graf complet Kn , obţinem
ato
1
(1 deg x)
x
1
n 1 , care coincide cu numărul de stabilitate
(1 (n 1)) 1 n
n
internă 0 ( K n ) 1 . În realitate însă, diferenţa dintre 0 (G ) şi suma indicată în (2.1.)
ar putea fi oricât de mare.
Pentru a ne convinge de acest fapt, vom analiza graful G X ;U cu mulţimea
An
de vârfuri X X 1 U X 2 , astfel încât X 1 I X 2 Ø , X 1 k , X 2 k 1 şi cu mulţimea
de muchii U U 1 U 2 , unde U 1 ( x, y) : x 1, y 2 , U 2 (s, t ) : s, t 2 şi s t.
În graful construit, gradul unui vârf z este k – 1, dacă z X 1 şi 2k – 2, dacă
z X 2 . Prin urmare,
(1 deg x)
x
1
(1 deg x) 1
(1 deg x) 1
x1 x 2
1
k (2k 1) 1 (k 1) 1
k 1
2
iuc pentru orice k 1.
k 2k 1
Deci, partea dreaptă a relaţiei a) în cazul grafului studiat este un număr mai
mic decât 2.
X1 ……
an
→
X2 …
Țîg
Fig. 2
n
b) 0 (G ) , unde n este numărul de vârfuri din graf, iar d este gradul
tor
1 d
mediu al vârfurilor care se calculează după formula d deg x / n .
x
regulat sau aproape de un graf regulat. Astfel, dacă G este un graf cubic (graf, în
care gradele tuturor vârfurilor sunt egale cu trei), atunci în baza relaţiei c) vom
lie
n n
avea 0 (G ) . Folosind relaţia b) însă, vom obţine 0 (G ) .
3 4
n
d) 0 (G) (1 deg x) 1 .
(1 ) x
e) 0 (G) p0 minp , p , unde p 0 , p , p sunt respectiv numărul de rădăcini
ato
caracteristice egale cu zero, negative şi pozitive, ale matricei de adiacenţă a
grafului G.
La studierea unui graf neorientat G (; U) , concomitent cu noţiunea de
mulţime stabilă interior, în diverse aplicaţii, deseori, se foloseşte şi noţiunea de
clică. Dacă în primul caz toate vârfurile mulţimii nu sunt adiacente două câte două,
An
atunci în cazul clicii, din contra, vârfurile sunt adiacente două câte două. În acest
sens, clica poate fi privită ca o noţiune reciprocă a noţiunii de mulţime stabilă
interior.
Definiţie. Submulţimea de vârfuri A X a grafului G se numeşte clică, dacă
oricare două vârfuri din A sunt adiacente.
Conform acestei definiţii, dacă A este o clică a grafului G, atunci ea generează
în G un subgraf complet. Orice graf neorientat conţine clici. Cele mai simple dintre
iuc
ele sunt mulţimile ce conţin câte un singur vârf al grafului, mulţimile formate din
două vârfuri adiacente ş.a.
Dacă cunoaştem o clică oarecare a grafului, atunci totdeauna putem cerceta
posibilitatea extinderii ei din contul vârfurilor rămase. Această situaţie conduce la
noţiunea de clică maximală şi clică maximă.
an
Definiţie. Clica A se numeşte maximală, dacă în graf nu există o altă clică B
astfel, încât A B .
Definiţie. O clică A se numeşte maximă, dacă pentru orice clică B din graf
are loc inegalitatea B A .
Țîg
x5
x1 x8
x2
x4 x7
x3
x6
Fig. 3
Cardinalul clicii maxime a unui graf neorientat G ( X ; U) se notează prin
:
lie
C 2 x 4 , x5 ,
C 3 x1 , x 2 , x 4 ,
C 4 x 4 , x5 , x6 ,
C 5 x 4 , x5 , x6 , x7 .
ato
Dintre aceste mulţimi numai C3 şi C5 sunt clici maximale, iar C5 este şi
maximă. Deci pentru acest graf avem (G ) 4 .
Uşor putem observa că dacă într-un graf G mulţimea de vârfuri A este clică,
atunci în graful complementar G , mulţimea A este stabilă interior. Este adevărată
şi afirmaţia inversă. Aceasta ne permite să considerăm adevărată următoarea
An
egalitate (G) 0 (G) . (Aici prin G se notează graful complementar grafului G.)
Relaţia dată ne permite să obţinem unele estimări ale densităţii grafului (G ) în
baza estimărilor numărului 0 (G ) .
Deseori soluţionarea unor probleme atât cu caracter teoretic, cât şi practic se
reduce la determinarea mulţimilor de vârfuri stabile interior. Vom descrie unele
dintre aceste probleme: iuc
I. Între două staţii A şi B, conectate la o reţea informaţională, se transmit nişte
mesaje, codificate cu ajutorul simbolurilor unui alfabet X x1 , x2 ,..., xn . În timpul
transmisiunii, din anumite motive, are loc perturbarea informaţiei, adică unele
simboluri transmise din A pot fi confundate în staţia B cu alte simboluri. În aceste
condiţii, este necesar de stabilit o submulţime de simboluri din X, folosite la
codificarea mesajelor transmise din A şi care să garanteze recepţionarea lor corectă
an
în B. (Este clar că problema are sens numai în cazul când cunoaştem perechile de
simboluri ce pot fi confundate la recepţionarea mesajului.)
Drept model matematic al problemei în cauză poate servi un graf neorientat G
cu mulţimea de vârfuri X {x1 , x2 ,..., xn } , în care xi ~ x j , dacă şi numai dacă
Țîg
este format din cuvinte de aceeaşi lungime k. Atunci numărul cuvintelor diferite
care pot fi formate din simbolurile alfabetului de codificare X şi care nu pot fi
confundate la transmiterea informaţiei nu este mai mic decât 0 (G)k . De exemplu,
dacă graful model G, construit în conformitate cu cele descrise mai sus, este un
ciclu simplu de lungimea 5 cu vârfurile x1 ~ x2 ~ x3 ~ x4 ~ x5 ~ x1 , atunci 0 (G) 2 .
Au
În calitate de mulţime stabilă interior maximă poate servi mulţimea x1 , x3 . Din
simbolurile x1, x3 putem forma 4 cuvinte diferite de lungimea 2:
x1 x1 , x1 x3 , x3 x1 şi x3 x3 , care nu vor fi confundate între ele la transmiterea
informaţiei. În realitate numărul cuvintelor recepţionate corect la staţia B este mai
lie
mare decât 0 (G)k . Astfel, pentru exemplul descris există 5 cuvinte
inconfundabile: x1 x1 , x2 x3 , x3 x5 , x4 x2 şi x5 x4 . La o analiză mai minuţioasă ne putem
uşor da seama că de fapt numărul cuvintelor inconfundabile de lungimea k ce pot fi
formate din simbolurile mulţimii X x1 , x2 ,..., xn este egal cu numărul de
ato
stabilitate internă a grafului G k , a cărui mulţime de vârfuri este determinată de
produsul cartezian al mulţimii X luată de k ori, iar două vârfuri (u1 , u 2 ,..., u k ) şi
(v1 , v2 ,..., vk ) sunt adiacente, dacă şu numai dacă în G avem ui vi sau ui ~ vi pentru
orice i 1, k . Este evidentă relaţia 0 Gk ( 0 (G))k .
II. Pentru efectuarea a n lucrări, o instituţie foloseşte o mulţime oarecare de
An
resurse disponibile R {r1 , r2 ,..., rP } . Se cunoaşte că efectuarea unei lucrări xi , i 1, n
necesită utilizarea unei submulţimi de resurse Ri R . Orice resurs r j , j 1, n , nu
poate fi utilizat concomitent pentru două sau mai multe lucrări. Se cere de
determinat numărul maxim de lucrări, care pot fi realizate în paralel (în acelaşi
timp, concomitent).
În cazul acestei probleme, se construieşte modelul matematic în forma unui
iuc
graf neorientat G în care două vârfuri xi , x j se consideră adiacente, dacă şi numai
dacă Ri R j Ø. În aceste condiţii orice mulţime de vârfuri stabilă interior din G
reprezintă o totalitate de lucrări care pot fi realizate în paralel. Prin urmare,
numărul maxim de lucrări ce pot fi realizate în acelaşi timp este egal cu numărul de
stabilitate internă 0 (G ) , iar vârfurile mulţimii stabile interior maxime corespund
an
acelor lucrări.
III. Fie f ( x1 , x2 ,..., xn ) o funcţie booleană, adică atât funcţia f, cât şi
argumentele sale x1 , x2 ,..., xn iau valori din mulţimea {0, 1} . Să notăm prin
x 0 {x10 , x20 ,..., xn0 } şi x1 {x11 , x12 ,..., x1n } două cortegii de valori ale variabilelor funcţiei
Țîg
f. (Aceste cortegii mai pot fi privite şi ca doi vectori, coordonatele cărora sunt
egale cu 0 sau 1). Vom spune că cortegiul x 0 se află în relaţia de precedenţă cu
cortegiul x1 , şi vom nota x 0 x1 , dacă xi0 xi1 , i 1, n . O funcţie booleană f se
numeşte monotonă, dacă pentru oricare două cortegii de valori x1 şi x 2 este
adevărată implicaţia ( x 2 x1 ) ( f ( x 2 ) f ( x1 )) .
Cortegiul x ( x1 , x2 ,..., xn ) se numeşte unitate a funcţiei booleene f, dacă
f ( x) 1 şi unitate inferioară, dacă pentru oricare alt cortegiu y x are loc
:
funcţiei booleene f, dacă f ( x) 0 , şi zerou superior, dacă pentru oricare alt cortegiu
y cu proprietatea x y are loc egalitatea f ( y ) 1 .
Este evident că orice funcţie monotonă se determină în mod univoc de
mulţimea unităţilor sale inferioare (sau de mulţimea zerourilor sale superioare).
Au
n
În cazul unui cortegiu binar x ( x1 , x2 ,..., xn ) , numărul x se numeşte normă a
lie
i
i 1
acestui cortegiu, iar funcţia monotonă, pentru care normele unităţilor inferioare
sunt egale cu doi sau cu funcţia identic egală cu zero, se numeşte funcţie grafică.
Pentru o funcţie grafică f ( x1 , x2 ,..., xn ) definim un graf neorientat G f cu
ato
mulţimea de vârfuri V {v1 , v2 ,..., vn } în care vi ~ v j , dacă şi numai dacă există un
n
cortegiu x* ( x1* , x2* ,..., xn* ) cu proprietăţile: a) x
i 1
*
i 2 ; b) x * este unitate a funcţiei
f; c) xi* x*j 1 .
Uşor se poate observa, că dacă C z este vectorul caracteristic al unei
An
submulţimi de vârfuri Z V , atunci f (Cz ) 0 , dacă şi numai dacă Z este o mulţime
stabilă interior în G f . Prin urmare, zerourile funcţiei grafice pot fi interpretate
drept vectori caracteristici ai mulţimilor de vârfuri stabile interior din G f .
La rândul său, pentru orice graf G, există o funcţie grafică astfel, încât G f este
izomorf cu G. Într-adevăr, în cazul grafului vid putem considera f 0 . În cazul
grafului diferit de graful vid, în calitate de funcţie grafică putem considera funcţia
iuc
determinată de unităţile inferioare, care reprezintă vectorii caracteristici ai tuturor
perechilor de vârfuri adiacente.
Qk sunt incluse acele vârfuri din Qk , 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 xi Qk , atunci la
Au
Qk1 Qk \ ( xik ) xik .
ato
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 S k , precum şi transferul lui
k
An
În conformitate cu cele descrise, rezultă că mulţimea de vârfuri stabilă interior
S k este maximală numai în cazul când Qk =Ø. Dacă însă Qk Ø , atunci aceasta
înseamnă că la o etapă oarecare anterioară mulţimea S k a fost extinsă din contul
unor vârfuri situate acum în Qk şi, prin urmare, ea nu poate fi considerată drept
mulţime maximală în graf. De aici rezultă – condiţia necesară şi suficientă pentru
ca mulţimea de vârfuri stabilă interior să fie maximală este Q k Q k Ø.
iuc
În acelaşi timp, este absolut clar că dacă există un vârf x Q k ,
astfel încât ( x) Q k Ø, atunci indiferent de faptul care dintre vârfurile mulţimii
Qk este ales pentru extinderea mulţimii S k , la orice pas următor p k nu vom
obţine respectarea condiţiei Qk =Ø. Aceasta înseamnă că condiţia
x Qk astfel încât ( x ) Q k Ø (*)
an
este suficientă pentru a efectua pasul de întoarcere, deoarece pe ramura dată a
arborelui de căutare nu vom obţine mulţime stabilă interior maximală în baza
mulţimii curente S k .
Pentru a exclude parcurgerea unei părţi inutile a arborelui de căutare, care la
Țîg
căuta mai întâi un vârf x* Qk cu valoare cât mai mică a mărimii
( x*) ( x*) Qk .
Au
lie
k
pasului de întoarcere.
Deoarece la efectuarea pasului de întoarcere vârful x i , care a fost folosit
k
pentru extinderea mulţimii S k , trece din Qk în Qk , s-ar putea întâmpla ca mărimea
ato
( x i ) acum să fie mai mică decât (x*) . Prin urmare, în continuare se va ţine cont
k
Descrierea algoritmului
Pasul 1. Considerăm iniţial S 0 Q0 Ø, Q0 X , k 0 .
An
Pasul 2. În conformitate cu cele descrise anterior, alegem un vârf xi Qk şi
k
formăm mulţimile
S k 1 S k x i , k
Qk1 Qk \ ( xik ) xik .
iuc
În acelaţi timp, vom păstra neschimbate şi mulţimile Qk şi Qk . Considerăm
k k 1.
Pasul 3. Dacă x Qk astfel încât ( x) Q k Ø, adică are loc condiţia
suficientă pentru efectuarea pasului de întoarcere, atunci trecem la pasul 5. În caz
an
contrar, trecem la pasul 4.
Pasul 4. Dacă Q k Q k Ø, atunci tipărim mulţimea S k ca mulţime stabilă
interior maximală şi trecem la pasul 5. Dacă Qk =Ø, iar Qk Ø, atunci trecem la
pasul 5.În caz contrar, trecem la pasul 2.
Țîg
mulţimea S k . Modificăm mulţimile vechi Qk şi Qk prin excluderea vârfului x i dink
este efectiv.
Varianta 8
lie
Condiții:
1. Elaboraţi un program pentru găsirea mulţii stabile interior maxime cu
algoritmul Bron şi Kerbosch. (la anexa)
2. Pentru graful G8 (notaţi vârfurile grafului cu (x1, x2, …) şi muchiile cu
(u1, u2, …));
ato
An
2.1. Descrieţi matricea de adiacenţă, matricea de incidenţă şi matricea
Kirchhgoff; iuc
Matricea de adiacenta
X1 X2 X3 X4 X5 X6 X7
X1 0 1 1 0 0 0 0
X2 1 0 1 0 0 0 0
X3 1 1 0 0 1 1 0
an
X4 0 0 0 0 0 1 1
X5 0 0 1 0 0 0 1
X6 0 0 1 1 0 0 0
X7 0 0 0 1 1 0 0
Matricea de incidenta
Țîg
U1 U2 U3 U4 U5 U6 U7 U8
X1 1 0 1 0 0 0 0 0
X2 1 1 0 0 0 0 0 0
X3 0 1 1 0 1 0 1 0
X4 0 0 0 1 0 1 0 0
X5 0 0 0 0 1 0 0 1
:
X6 0 0 0 0 0 1 1 0
tor
X7 0 0 0 1 0 0 0 1
Au
Matricea Kirchhgoff
lie
X1 X2 X3 X4 X5 X6 X7
X1 2 -1 -1 0 0 0 0
X2 -1 2 -1 0 0 0 0
X3 -1 -1 4 0 -1 -1 0
ato
X4 0 0 0 2 0 -1 -1
X5 0 0 -1 0 2 0 -1
X6 0 0 -1 -1 0 2 0
X7 0 0 0 -1 -1 0 2
2.2. Determinaţi numerele (G ) şi
(G ) ;
An
(G ) =5 şi (G ) =2;
2.3. Construiţi graful complementar lui G8;
iuc
an
2.4. Descrieţi un subgraf complet cu numărul maxim de vârfuri a lui G8;
Țîg
lie
c) clicele maximale,{ x1, x2, x3} ϕ=3;
d) acoperirile de vârfuri minimale, { x2, x3 x4, x7} β0=4
e) acoperirile de muchii minimale, { u2, u3, u4 ,u8 } β1=4;
ato
f) cuplajele maximale.{u2, u4, u8} α1=3;
2.7. Determinaţi numerele 0 , 0 ,1, 1,.
α0=3; β0=4; α1=3; β1=4; ϕ=3;
An
2.8. Descrieţi pe paşi aplicarea algoritmului din primul punct la graful G8.
Pasul 1:
Fie S0 Q Ø, 𝑄𝑘+ ={𝑥1, 𝑥2, 𝑥3, 𝑥4, 𝑥5, 𝑥6, 𝑥7}
0
Pasul 2:
𝑆0+1 = 𝑆0 {𝑥1 } 𝑆1 = {𝑥7}
−
𝑄0+1
iuc
= 𝑄0− \ (𝑥1 ) 𝑄1− = Ø
+
𝑄0+1 = 𝑄1+ \( (𝑥1 ) {𝑥1 })𝑄1+ ={x1,x2,x3,x6}
În acelaţi timp vom păstra neschimbate şi mulţimile Qk şi Qk .
an
Pasul 3:
Dacă x Qk astfel încât ( x) Q k Ø, adică are loc condiţia suficientă pentru
efectuarea pasului de întoarcere, atunci trecem la pasul 5. În caz contrar realizăm
Țîg
pasul 4.
La moment 𝑄1− = Ø, nu este satisfacuta conditia de intoarcere, trecem la pasul
4.
Pasul 4:
Dacă Q k Q k Ø, atunci tipărim mulţimea S k ca mulţime stabilă interior
maximală şi trecem la pasul 5. Dacă Qk =Ø, iar Qk Ø, atunci trecem la pasul 5. În
:
−
𝑄1+1 = 𝑄1− \ (𝑥6) 𝑄2− = {x1, x2} ;
+
𝑄1+1 = 𝑄1+ \( (𝑥6) {𝑥6})𝑄2+ = Ø;
Pasul 3: La moment 𝑄1− = Ø, nu este satisfacuta conditia de intoarcere,
lie
trecem la pasul 4.
Pasul 4: Dacă Q k Q k Ø, atunci tipărim mulţimea S k ca mulţime stabilă
interior maximală şi trecem la pasul 5. Dacă Qk =Ø, iar Qk Ø, atunci trecem la
ato
pasul 5. În caz contrar trecem la pasul 2.
La moment 𝑄1+ ={𝑥3 , 𝑥4 }, deci trecem la pasul 2
Pasul 2: k k 1 k=3, alegem vârful 𝑥3 din 𝑄1+ şi formăm mulţimile, 𝑆1+1 =
𝑆1 {𝑥2} 𝑆3 = {𝑥7, 𝑥6, 𝑥2};
An
−
𝑄1+1 = 𝑄1− \ (𝑥2) 𝑄2− = Ø;
+
𝑄1+1 = 𝑄1+ \( (𝑥2) {𝑥2})𝑄2+ = Ø;
Pasul 3: La moment 𝑄3− = Ø, nu este satisfacuta conditia de intoarcere, trecem la
pasul 4.
Pasul 4: 𝑄3− = Ø = 𝑄3+
iuc
𝑆3 = {𝑥7, 𝑥6, 𝑥2} Multime Stabil interior maximala
Pasul 5: Considerăm k k 1 si eliminam virful {x2} din 𝑆3 = {𝑥7, 𝑥6, 𝑥2} si
obtinem din 𝑆2 = {𝑥7, 𝑥6} Modificam multimile 𝑄1+ ={𝑥3 , 𝑥4 } si 𝑄1− = Ø, prin
eliminarea 𝑥3 din 𝑄1+ si includerea lui in 𝑄1− 𝑄1+ ={𝑥1} iar 𝑄1− ={x2}.
an
Dacă k 0 şi Q0 Ø, atunci aceasta înseamnă că toate mulţimile stabile
interior maximale ale grafului G=(X;U) au fost tipărite. STOP. În caz contrar
trecem la pasul 2.
Țîg
pasul 4
Pasul 4: Q3 Q3 Ø , tiparim multimea 𝑺𝟑 = {𝑥7, 𝑥6, 𝑥1} −
multime stabil interior si trecem la pasul 5
Au
lie
𝑄1− ={𝑥6};
Pasul 2: alegem virful x3, k=2; 𝑆2 = {𝑥7, 𝑥3}; 𝑄2− = Ø; 𝑄2+ = Ø;
Pasul 3Pasul 4
ato
𝑄2− = Ø = 𝑄2+ ; 𝑆2 = {𝑥7, 𝑥3} Multime Stabil interior maximala
Pasul 5 k k 1 k=1; eliminam virful x3 din 𝑆2 , 𝑆1 = {𝑥7} 𝑄1+ = {x1,x2};
𝑄1− ={x7, x3} ;
Pasul 3Pasul 5:
An
k k 1 k=0; eliminam virful x7 din 𝑆1 , 𝑆0 = Ø 𝑄0+ = {x1,x2,x3,x4,x5,x6};
𝑄0− ={x7} ;
Pasul 5Pasul 2:
alegem virful x6, k=1; 𝑆1 = {𝑥6}; 𝑄1− = {x7};
iuc 𝑄1+ = {x1, x2, x5};
Pasul 3Pasul 4Pasul 2:
alegem virful x5, k=2; 𝑆2 = {𝑥6, 𝑥5}; 𝑄2− = Ø; 𝑄2+ = {x1, x2};
Pasul 3Pasul 4Pasul 2:
alegem virful x2, k=3; 𝑆3 = {𝑥6, 𝑥5, 𝑥2}; 𝑄3− = Ø; 𝑄3+ = Ø;
an
Pasul 4: Q3 Q3 Ø tiparim 𝑺𝟑 = {𝑥6, 𝑥5, 𝑥2} – multime stabil interior si
trecem la pasul 5.
Pasul 5: k k 1 k=2; eliminam virful x2 din 𝑆3 , 𝑆2 ={𝑥6, 𝑥5} ; 𝑄2+ = {x1};
Țîg
𝑄2− ={𝑥2} ;
Pasul 5Pasul 3 Pasul 4 Pasul 2:
alegem virful x1, k=3; 𝑆3 = {𝑥6, 𝑥5, 𝑥1}; 𝑄3− = Ø; 𝑄3+ = Ø;
Pasul 4: Q3 Q3 Ø tiparim 𝑺𝟑 = {𝑥6, 𝑥5, 𝑥1} – multime stabil interior si
trecem la pasul 5
:
Pasul 3 Pasul 5:
k k 1 k=0; eliminam virful x6 din 𝑆1 , 𝑆0 = Ø ; 𝑄0+ = {𝑥1, 𝑥2, 𝑥3, 𝑥4, 𝑥5} ;
lie
𝑄0− ={𝑥7, 𝑥6} ;
Pasul 2: alegem virful x5, k=1; 𝑆1 = {𝑥5}; 𝑄1− = {𝑥6}; 𝑄1+ ={x1,x2,x4};
Pasul 3Pasul 4Pasul 2
ato
Pasul 2: alegem virful x4, k=2; 𝑆2 = {𝑥5, 𝑥4}; 𝑄2− = Ø ; 𝑄2+ = {x1, x2};
Pasul 3Pasul 4Pasul 2
Pasul 2: alegem virful x2, k=3; 𝑆3 = {𝑥5, 𝑥4, 𝑥2}; 𝑄3− = Ø ; 𝑄3+ = Ø ;
An
Pasul 4: Q3 Q3 Ø tiparim 𝑺𝟑 = {𝒙𝟓, 𝒙𝟒, 𝒙𝟐} – multime stabil interior si
trecem la pasul 5.
Pasul 5: k k 1 k=2; eliminam virful x2 din 𝑆3 , 𝑆2 ={𝑥5, 𝑥4} ; 𝑄2+ = {x1};
𝑄1− ={𝑥2} ;
Pasul 2: alegem virful x1, k=3; 𝑆3 = {𝑥5, 𝑥4, 𝑥1}; 𝑄3− = Ø ;
iuc 𝑄3+ = Ø ;
Pasul 4: Q3 Q3 Ø tiparim 𝑺𝟑 = {𝒙𝟓, 𝒙𝟒, 𝒙𝟏} – multime stabil interior si
trecem la pasul 5.
Pasul 5: k k 1 k=2; eliminam virful x1 din 𝑆3 , 𝑆2 = {x5, x4}; 𝑄2+ = Ø;
𝑄2− ={𝑥2, 𝑥1};
an
Pasul 3Pasul 5
Pasul 5: k k 1 k=1; eliminam virful x4 din 𝑆2 , 𝑆1 = {x5}; 𝑄1+ = {𝑥1, 𝑥2} ;
𝑄1− ={𝑥6, 𝑥4} ;
Țîg
Pasul 3Pasul 5
Pasul 5: k k 1 k=0; eliminam virful x5 din 𝑆1 , 𝑆0 = Ø; 𝑄0+ =
{𝑥1, 𝑥2, 𝑥3, 𝑥4} ; 𝑄0− ={x7, 𝑥6, 𝑥5} ;
Pasul 5Pasul 3Pasul 4Pasul 2
Pasul 2: alegem virful x4, k=1; 𝑆1 = {𝑥4}; 𝑄1− = {𝑥5}; 𝑄1+ = {x1,x2,x3};
:
lie
𝑄0− ={𝑥7, 𝑥6, 𝑥5, 𝑥4} ;
Pasul 5Pasul 3Pasul 4Pasul 2
alegem virful x3, k=1; 𝑆1 = {𝑥3}; 𝑄1− = {𝑥7, 𝑥4}; 𝑄1+ = Ø;
ato
Pasul 3 Pasul 4Pasul 5
Pasul 5: k k 1 k=0; eliminam virful x3 din 𝑆1 , 𝑆0 = Ø; 𝑄0+ ={x1, x2};
𝑄0− ={𝑥7, 𝑥6, 𝑥5, 𝑥4, 𝑥3} ;
Pasul 5Pasul 3Pasul 4Pasul 2
An
alegem virful x2, k=1; 𝑆1 = {𝑥2}; 𝑄1− = {𝑥7, 𝑥6, 𝑥5, 𝑥4}; 𝑄1+ = Ø;
Pasul 3 Pasul 4Pasul 5
Pasul 5: k k 1 k=0; eliminam virful x2 din 𝑆1 , 𝑆0 = Ø; 𝑄0+ ={x1};
𝑄0− ={𝑥7, 𝑥6, 𝑥5, 𝑥4, 𝑥3, 𝑥2} ; iuc
Pasul 5Pasul 3Pasul 4Pasul 2
alegem virful x2, k=1; 𝑆1 = {𝑥1}; 𝑄1− = {𝑥7, 𝑥6, 𝑥5, 𝑥4}; 𝑄1+ = Ø;
Pasul 3 Pasul 4Pasul 5
Pasul 5: k k 1 k=0; eliminam virful x1 din 𝑆1 , 𝑆0 = Ø; 𝑄0+ =Ø;
an
𝑄0− ={𝑥7, 𝑥6, 𝑥5, 𝑥4, 𝑥3, 𝑥2, 𝑥1} ;
k=0, 𝑺𝟎 = Ø, ; 𝑸+
𝟎 = Ø stop
{x3, x4}{ x2, x4, X5}{ x1, x4, X5}{ x1, x5, X6}{ x2, x5, X6}{ x3, x7}{ x1, x6,x7}{ x2, x6,x7};
3. Rezolvaţi problemele 6 și 21.
Rezolvare prob. 6
Fie G X ;U un graf neorientat cu n vârfuri şi m muchii. Să se demonstreze că
dacă gradul fiecărui vârf al acestui graf este k sau k 1, atunci numărul vârfurilor
de grad k este (k 1)n 2m .
:
tor
An
adeacență
k+1=3
Graful G are 5 laturi deci ∑ 𝑑𝑒𝑔(𝑥𝑖 ) = 2 ∗ 𝑚 trebuie să fie egală cu 10
Conform forumule ∑ 𝑑𝑒𝑔(𝑥𝑖 ) = ∑ 𝑘 + ∑ 𝑘 + 1 = 2*m avem:
iuc
𝑑𝑒𝑔(𝑥1 ) = 3
𝑑𝑒𝑔(𝑥2 ) = 2
𝑑𝑒𝑔(𝑥3 ) = 3
𝑑𝑒𝑔(𝑥4 ) = 2
an
lie
Algoritmul Bron şi Kerbosch in limbajul C
#include<iostream.h>
#include<conio.h>
#include<math.h>
ato
#include<stdio.h>
#include<string.h>
main()
{
clrscr();
int n,i,j,raspuns,mat_a[100][100];
int s[100][100],q_minus[100][100],q_plus[100][100],k;
FILE *f;
int x_ales;
An
int num_el1;
int vecinii[100][100];
int v;
int control,i2,j2,contor_q_minus;
int vecinii_si_x[100][100];
int contor2=0;
int vecinii_q_minus[100][100],v2;
int num_el3;
int num_el;
int num_el2; iuc
//citire din fisier-------------------------
f=fopen("mat_a.txt","r");
fscanf(f,"%i",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
fscanf(f,"%i",&mat_a[i][j]);
}
an
}
fclose(f);
//--------------------------------------------
printf("matricea de adiacenta este urmatoarea:\n");
for(i=0; i<n; i++)
{
for(j=0;j<n;j++)
Țîg
{
printf("%i ",mat_a[i][j]);
}
printf("\n");
}
printf("Multimile stabile interior maximale:");
pasul1:
k=0;
for(i=0; i<=k; i++)
{
for(j=0;j<n;j++)
{
:
s[i][j]=0;
q_minus[i][j]=0;
tor
q_plus[i][j]=j+1;
}
}
pasul2:
k++;
x_ales=k;
num_el1=0;
Au
lie
num_el1++;
}
}
}
s[k][num_el1]=k;
v=0;
for(i=k-1; i<=k-1; i++)
ato
{
for(j=i+1;j<n;j++)
{
if(mat_a[i][j]==1)
{
vecinii[k][v]=j+1;
v++;
}
}
An
}
control=0;
contor_q_minus=0;
for(i=k-1;i<k;i++)
{
for(j=0;j<n;j++)
{
for(i2=k;i2<=k;i2++)
{
for(j2=0;j2<v;j2++)
{
iuc
if(q_minus[i][j]==vecinii[i2][j2])
{
control++;
}
}
}
if(control==0)
{
an
q_minus[k][contor_q_minus]=q_minus[k-1][j];
contor_q_minus++;
}
control=0;
}
}
for(i=k; i<=k; i++)
Țîg
{
for(j=0;j<v;j++)
{
vecinii_si_x[i][j]=vecinii[i][j];
}
}
vecinii_si_x[k][v]=k;
control=0;
contor2=0;
for(i=k-1;i<k;i++)
{
:
for(j=0;j<n;j++)
{
tor
for(i2=k;i2<=k;i2++)
{
for(j2=0;j2<=v;j2++)
{
if(q_plus[i][j]==vecinii_si_x[i2][j2])
{
control++;
}
Au
}
}
if(control==0)
{
q_plus[k][contor2]=q_plus[k-1][j];
contor2++;
}
lie
control=0;
}
}
pasul3:
v2=0;
for(i=k;i<=k;i++)
{
ato
for(j=0;j<contor_q_minus;j++)
{
for(i2=q_minus[i][j]-1; i2<=q_minus[i][j]-1; i2++)
{
for(j2=i2+1;j2<n;j2++)
{
if(mat_a[i2][j2]==1)
{
vecinii_q_minus[q_minus[i][j]-1][v2]=j2+1;
An
v2++;
}
}
}
v2=0;
}
}
control=0;
for(i=0; i<n; i++)
{
for(j=0;j<n;j++)
{
for(i2=k;i2<=k;i2++)
iuc
{
for(j2=0;j2<n;j2++)
{
if(vecinii_q_minus[i][j]!=0)
{
if(vecinii_q_minus[i][j]==q_plus[i2][j2])
an
{
control++;
}
}
}
}
}
Țîg
}
if(control==0)
{
goto pasul5;
}
else
{
goto pasul4;
}
pasul4:
printf("\nq_minus[0][0]=%i; q_plus[0][0]=%i",q_minus[0][0],q_plus[0][0]);
:
printf("\n");
for(i=k;i<=k;i++)
{
for(j=0;j<n;j++)
{
if(s[i][j]>0)
{
printf("%i ",s[i][j]);
Au
}
}
}
}
pasul5:
k--;
num_el3=0;
lie
for(i=k; i<=k; i++)
{
for(j=0;j<=n;j++)
{
if(s[i+1][j]!=x_ales && s[i+1][j]>0)
{
s[i][num_el3]=s[i+1][j];
ato
num_el3++;
}
}
}
num_el=0;
for(i=k; i<=k; i++)
{
for(j=0;j<n;j++)
{
An
if(q_plus[i][j]!=x_ales && q_plus[i][j]>0)
{
q_plus[i][num_el]=q_plus[i][j];
num_el++;
}
}
}
q_plus[k][num_el]=0;
num_el2=0;
for(i=k; i<=k; i++)
{
for(j=0;j<n;j++)
{
iuc
if(q_minus[i][j]>0)
{
q_minus[i][num_el2]=q_minus[i][j];
num_el2++;
}
}
an
}
q_minus[k][num_el2]=x_ales;
if(k==0 && q_plus[0][0]==0)
{
goto finish;
}
else
Țîg
{
goto pasul3;
}
finish:
printf("\n<-finish->");
getch();
return(0);
}
:
tor
Au