Sunteți pe pagina 1din 21

Ministerul Educaţiei al Republicii Moldova

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

Ţîganiuc Anatolie Țurcanu Călin


grupa IA-22 asistent universitar
Au

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
AQ
 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

x1 x 2

 (1  (k  1)) 1  k  (1  (2k  2)) 1  (k  1) 


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

Pe de altă parte, precum se poate observa din fig.2, numărul de stabilitate


internă pentru acest graf este  0 (G)  k şi odată cu creşterea valorii lui k poate fi
făcut oricât de mare.
:

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

c)  0 (G)  n  , unde  este gradul maxim al vârfurilor din graf.


Această evaluare poate fi folosită în special în cazurile când G este un graf
Au

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  minp , 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
:

 (G ) şi se numeşte densitate a acestui graf. Densitatea grafului poate căpăta orice


tor

valoare cuprinsă între 1 şi n-numărul de vârfuri din graf. Observăm că densitatea


grafului poate fi egală cu 1 doar într-un singur caz – când graful este vid.
Dacă analizăm graful din fig.3, atunci observăm că în calitate de clici pot fi
considerate mulţimile:
Au
C1  x1 ,

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

simbolurile xi şi x j pot fi confundate la transmiterea mesajelor din A în B. Pentru a


obţine un cod fără erori, adică un cod care garantează transmiterea corectă a
mesajelor, este suficient să folosim simbolurile ce corespund vârfurilor unei
mulţimi stabile interior a grafului G. Deoarece fiabilitatea oricărui cod într-o
măsură oarecare depinde şi de numărul de simboluri utilizate ale alfabetului X,
vom folosi simbolurile ce corespund vârfurilor din mulţimea stabilă interior
maximă. În acest caz, este util să cunoaştem numărul de stabilitate internă  0 (G ) .
:

Deseori se recurge la o astfel de codificare a mesajului, încât textul transmis


tor

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 Gk   ( 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
:

egalitatea f ( y )  0 . La rândul său, un cortegiu x  ( x1 , x2 ,..., xn ) se numeşte zerou al


tor

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.

Algoritmul Bron şi Kerbosch


Noţiuni preliminare
an
Algoritmul propus de către C.Bron şi J.Kerbosch în anul 1973 reprezintă o
modificare a algoritmului de triere, ce foloseşte arborele de căutare. Ca rezultat al
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
Țîg

şi Qk . Mulţimea S k reprezintă mulţimea de vârfuri stabilă interior, obţinută la etapa


k, iar Qk reprezintă mulţimea vârfurilor din graf, neadiacente vârfurilor din S k .
Prin urmare, putem considera Qk  X \ (( S k ) U S k ) . Adăugarea oricărui vârf din Qk
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 Qk drept reuniune a două mulţimi Qk şi Qk , considerând că în


tor

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

etapa următoare k  1 mulţimile curente S k , Qk şi Qk se modifică în modul


următor:
lie
 
Sk 1  Sk  xik ,

Qk1  Qk \ ( xik ) ,


Qk1  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

x i din Qk în Qk .


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

sigur nu conţine nici o mulţime stabilă interior maximală, este important de a


obţine condiţia suficientă a pasului de întoarcere cât mai repede posibil. În acest
scop, se va alege în mod special vârful din Qk pentru extinderea mulţimii S k . Dacă
condiţia pasului de întoarcere nu are loc, iar pentru extinderea mulţimii S k se alege
un vârf oarecare xi  Qk , atunci există un vârf z k  Qk astfel încât xi  ( z k )  Qk .
k k

În condiţiile efectuării acum a pasului de întoarcere, valoarea mărimii


( z k )  ( z k )  Qk
:
tor

se va micşora exact cu o unitate, ceea ce va urgenta respectarea condiţiei (*).


Astfel, la alegerea vârfului x i , folosit pentru extinderea mulţimii stabile S k , se va
k

căuta mai întâi un vârf x*  Qk cu valoare cât mai mică a mărimii
( x*)  ( x*)  Qk .
Au

Este important să cunoaştem ce condiţie trebuie să se respecte pentru


atingerea scopului indicat.
Vârful x i se va alege acum în mod arbitrar din mulţimea ( x*)  Qk . O astfel

lie
k

de alegere a vârfului x i va grăbi îndeplinirea condiţiei (*) pentru efectuarea


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

de această situaţie la alegerea vârfului x*  Qk .

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

Qk1  Qk \ ( xik ) ,


Qk1  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

Pasul 5. Considerăm k  k  1 şi eliminăm vârful x i din S k 1 , obţinând


k

mulţimea S k . Modificăm mulţimile vechi Qk şi Qk prin excluderea vârfului x i dink

Qk şi includerea lui în Qk :


Qk  Qk \ xi  ,
Qk  Qk  xi .
k

Dacă k  0 şi Q0  Ø, atunci aceasta înseamnă toate mulţimile


:

stabile interior maximale ale grafului G  ( X ; U ) au fost găsite în procesul realizării


tor

algoritmului. STOP. În caz contrar, trecem în continuare la realizarea pasului 3.


Algoritmul Bron şi Kerbosch a fost testat pe un număr mare de grafuri
neorientate şi s-a constatat că timpul necesar pentru construirea tuturor mulţimilor
de vârfuri stabile interior este aproape constant şi se modifică neesenţial odată cu
creşterea dimensiunii grafului. Aceasta ne permite să considerăm că algoritmul dat
Au

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

2.5. Indicaţi un lanţ elementar de lungime maximă și un ciclu elementar


(dacă există);
Lanț maxim {X1,X2,X3,X5,X7,X4,X6}; lungima maxima=7;
:

Ciclu elementar {X3,X5,X7,X4,X6 } lungimea maxima=5;


tor

2.6. Descrieţi toate mulţimile:


a) stabile interior maximale, b) mulţimile stabile exterior minimale, c) clicele
maximale, d) acoperirile de vârfuri minimale, e) acoperirile de muchii minimale,
f) cuplajele maximale.
a) stabile interior maximale, {x3, x4}{ x2, x4, X5}{ x1, x4, X5}{ x1, x5, X6}{ x2,
Au

x5, X6}{ { x3, x7}


{ x1, x6,x7}{ x2, x6,x7} α0=3
b) mulţimile stabile exterior minimale, {x3, x5, x7}

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
:

caz contrar trecem la pasul 2.


tor

La moment 𝑄1+ ={𝑥3 , 𝑥4 }, deci trecem la pasul 2


Pasul 2: k  k  1 k=2, alegem vârful 𝑥3 din 𝑄1+ şi formăm mulţimile, 𝑆1+1 =
𝑆1  {𝑥6}  𝑆2 = {𝑥7, 𝑥6};
Au


𝑄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

La moment k=1, deci trecem la pasul 2.


Pasul 2: k  k  1 k=2, alegem vârful 𝑥4 şi formăm mulţimile,
𝑆2+1 = 𝑆1  {𝑥1}  𝑆3 = {𝑥7, 𝑥6, 𝑥1};

𝑄2+1 = 𝑄1− \  (𝑥1 ) 𝑄3− = Ø; ;
+
𝑄2+1 = 𝑄1+ \(  (𝑥1 )  {𝑥1 })𝑄3+ = Ø;
:

Pasul 3: : La moment 𝑄3− = Ø, nu este satisfacuta conditia de intoarcere, trecem la


tor

pasul 4
Pasul 4: Q3  Q3  Ø , tiparim multimea 𝑺𝟑 = {𝑥7, 𝑥6, 𝑥1} −
multime stabil interior si trecem la pasul 5
Au

Pasul 5: k  k  1  k=2; eliminam virful x1 din 𝑆3 , 𝑄2+ = Ø; 𝑄2− ={𝑥2, 𝑥1} ;


Pasul 3:Adevarat deoarce , 𝑄2+ = Ø
Pasul 5: k  k  1  k=1; eliminam virful x6 din 𝑆2 𝑆1 {x7}, 𝑄1+ ={𝑥1, 𝑥2, 𝑥3,} ;

lie
𝑄1− ={𝑥6};
Pasul 2: alegem virful x3, k=2; 𝑆2 = {𝑥7, 𝑥3}; 𝑄2− = Ø; 𝑄2+ = Ø;
Pasul 3Pasul 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 3Pasul 5:

An
k  k  1  k=0; eliminam virful x7 din 𝑆1 , 𝑆0 = Ø 𝑄0+ = {x1,x2,x3,x4,x5,x6};
𝑄0− ={x7} ;
Pasul 5Pasul 2:
alegem virful x6, k=1; 𝑆1 = {𝑥6}; 𝑄1− = {x7};
iuc 𝑄1+ = {x1, x2, x5};
Pasul 3Pasul 4Pasul 2:
alegem virful x5, k=2; 𝑆2 = {𝑥6, 𝑥5}; 𝑄2− = Ø; 𝑄2+ = {x1, x2};
Pasul 3Pasul 4Pasul 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 5Pasul 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 5: k  k  1  k=2; eliminam virful x1 din 𝑆3 , 𝑆2 ={𝑥6, 𝑥5} ; 𝑄2+ = Ø ;


tor

𝑄2− ={𝑥2, 𝑥1} ;


Pasul 3 Pasul 5:
k  k  1  k=1; eliminam virful x5 din 𝑆2 , 𝑆1 ={x6} ; 𝑄1+ = {𝑥1, 𝑥2} ;
𝑄1− ={𝑥7, 𝑥5} ;
Au

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 3Pasul 4Pasul 2

ato
Pasul 2: alegem virful x4, k=2; 𝑆2 = {𝑥5, 𝑥4}; 𝑄2− = Ø ; 𝑄2+ = {x1, x2};
Pasul 3Pasul 4Pasul 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 3Pasul 5
Pasul 5: k  k  1  k=1; eliminam virful x4 din 𝑆2 , 𝑆1 = {x5}; 𝑄1+ = {𝑥1, 𝑥2} ;
𝑄1− ={𝑥6, 𝑥4} ;
Țîg

Pasul 3Pasul 5
Pasul 5: k  k  1  k=0; eliminam virful x5 din 𝑆1 , 𝑆0 = Ø; 𝑄0+ =
{𝑥1, 𝑥2, 𝑥3, 𝑥4} ; 𝑄0− ={x7, 𝑥6, 𝑥5} ;
Pasul 5Pasul 3Pasul 4Pasul 2
Pasul 2: alegem virful x4, k=1; 𝑆1 = {𝑥4}; 𝑄1− = {𝑥5}; 𝑄1+ = {x1,x2,x3};
:

Pasul 5Pasul 3Pasul 4Pasul 2


tor

Pasul 2: alegem virful x3, k=2; 𝑆2 = {𝑥4, 𝑥3}; 𝑄2− = Ø; 𝑄2+ = Ø;


Pasul 4: Q2  Q2  Ø  tiparim 𝑺𝟐 = {𝒙𝟒, 𝒙𝟑} – multime stabil interior si trecem la
pasul 5
Pasul 5: k  k  1  k=1; eliminam virful x3 din 𝑆2 , 𝑆1 = {x4}; 𝑄1+ = Ø;
Au

𝑄1− ={𝑥6, 𝑥4, 𝑥3} ;


Pasul 3Pasul 5
Pasul 5: k  k  1  k=0; eliminam virful x4 din 𝑆1 , 𝑆0 = Ø; 𝑄0+ ={x1, x2, x3};

lie
𝑄0− ={𝑥7, 𝑥6, 𝑥5, 𝑥4} ;
Pasul 5Pasul 3Pasul 4Pasul 2
alegem virful x3, k=1; 𝑆1 = {𝑥3}; 𝑄1− = {𝑥7, 𝑥4}; 𝑄1+ = Ø;

ato
Pasul 3 Pasul 4Pasul 5
Pasul 5: k  k  1  k=0; eliminam virful x3 din 𝑆1 , 𝑆0 = Ø; 𝑄0+ ={x1, x2};
𝑄0− ={𝑥7, 𝑥6, 𝑥5, 𝑥4, 𝑥3} ;
Pasul 5Pasul 3Pasul 4Pasul 2

An
alegem virful x2, k=1; 𝑆1 = {𝑥2}; 𝑄1− = {𝑥7, 𝑥6, 𝑥5, 𝑥4}; 𝑄1+ = Ø;
Pasul 3 Pasul 4Pasul 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 5Pasul 3Pasul 4Pasul 2
alegem virful x2, k=1; 𝑆1 = {𝑥1}; 𝑄1− = {𝑥7, 𝑥6, 𝑥5, 𝑥4}; 𝑄1+ = Ø;
Pasul 3 Pasul 4Pasul 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

multimile stabile interior maximale:


Țîg

{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

Intr-un graf neorientat are loc relatia ∑ 𝑔(𝑥𝑖 ) = 2 ∗ 𝑚 .


Avem ∑ 𝑑𝑒𝑔(𝑥𝑖 ) = ∑ 𝑘 + ∑ 𝑘 + 1 = 2*m
Fie avem Graful ne orientat G(X,U)
Au
lie
ato
Graful G(X,U) are 2 vîrfuri cu gradul de adiacență k = 2 și 2 vîrfuri cu gradul de

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

În sumă este 10 deci Afirmația ∑ 𝑑𝑒𝑔(𝑥𝑖 ) = 2 ∗ 𝑚 este adevărată.


: Țîg
tor
Au
Anexa

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

for(i=k; i<=k; i++)


{
for(j=0;j<n;j++)
{
if(s[i-1][j]>0)
{
s[i][num_el1]=s[i-1][j];

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]);
:

if(q_minus[0][0]==0 && q_plus[0][0]==0)


{
tor

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

S-ar putea să vă placă și