Documente Academic
Documente Profesional
Documente Cultură
Biconexitate
1. Noțiuni generale
2. Algoritmul de determinare a:
1. punctelor critice
2. punților
3. componentelor biconexe
Fie G=(V,E) un graf neorientat conex:
• un nod al grafului se numește punct de articulație sau nod critic dacă
subgraful obținut prin eliminarea lui nu este conex;
• o muchie se numește punte sau muchie critică dacă graful parțial
obținut prin eliminarea ei nu este conex;
• un graf neorientat se numește biconex dacă nu conține puncte de
articulație;
• se numește componentă biconexă un subgraf biconex maximal – prin
adăugarea încă a unui nod nu mai este biconex.
Exemple:
Exemplu. Puncte de articulatie
Exemplu. Punti
Exemplu de graf biconex.
1 3 2
5 6
8
4
7
Observații:
1. pentru fiecare muchie critică, cel puțin o extremitate este punct de
articulație;
nma[k]=min[(nivel(k),
min{nivel[yi], (yi ,k) –muchie de intoarcere},
min{nma[yi], yi- fii a lui k}]
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 5 5 4 6
Nma[k] 1 2 3 1 1 4 4 4
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 5 5 4 6
Nma[k] 1 2 3 1 1 4 4 4
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 2 3 1 1 4 4 4
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 2 3 1 1 4 4 4
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 2 3 1 1 4 4 4
nma[k]=min[(nivel(k),
min{nivel[yi], (yi ,k) –muchie de intoarcere},
min{nma[yi], yi- fii a lui k}]
Pentru 1 nu putem calcula deoarece are fii
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 2 3 1 1 4 4 4
nma[k]=min[(nivel(k),
min{nivel[yi], (yi ,k) –muchie de intoarcere},
min{nma[yi], yi- fii a lui k}]
Pentru 1 nu putem calcula deoarece are fii
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 2 3 1 1 4 4 4
nma[k]=min[(nivel(k),
min{nivel[yi], (yi ,k) –muchie de intoarcere},
min{nma[yi], yi- fii a lui k}]
Pentru 2 nu putem calcula deoarece are fii
5 nu putem calcula are fii
Pentru 4 putem calcula, nu area fii, are
muchie de intoarcere: min(nivel(4), nivel(1))
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 2 3 1 1 4 4 4
nma[k]=min[(nivel(k),
min{nivel[yi], (yi ,k) –muchie de intoarcere},
min{nma[yi], yi- fii a lui k}]
Pentru 2 nu putem calcula deoarece are fii
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 2 3 1 1 4 4 4
nma[k]=min[(nivel(k),
min{nivel[yi], (yi ,k) –muchie de intoarcere},
min{nma[yi], yi- fii a lui k}]
5 nu putem calcula deoarece are fii
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 2 3 1 1 4 4 4
nma[k]=min[(nivel(k),
min{nivel[yi], (yi ,k) –muchie de intoarcere},
min{nma[yi], yi- fii a lui k}]
5 nu putem calcula deoarece are fii
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 2 3 1 1 4 4 4
nma[k]=min[(nivel(k),
min{nivel[yi], (yi ,k) –muchie de intoarcere},
min{nma[yi], yi- fii a lui k}]
6 putem calcula min{nivel(6), nma(8)}
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 2 3 1 1 4 4 4
nma[k]=min[(nivel(k),
min{nivel[yi], (yi ,k) –muchie de intoarcere},
min{nma[yi], yi- fii a lui k}]
6 putem calcula min{nivel(6), nma(8)}
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 2 3 1 1 4 4 4
nma[k]=min[(nivel(k),
min{nivel[yi], (yi ,k) –muchie de intoarcere},
min{nma[yi], yi- fii a lui k}]
7 putem calcula min{nivel(7), nma(6)}
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 2 3 1 1 4 4 4
nma[k]=min[(nivel(k),
min{nivel[yi], (yi ,k) –muchie de intoarcere},
min{nma[yi], yi- fii a lui k}]
7 putem calcula min{nivel(7), nma(6)}
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 2 3 1 1 4 4 4
nma[k]=min[(nivel(k),
min{nivel[yi], (yi ,k) –muchie de intoarcere},
min{nma[yi], yi- fii a lui k}]
5 putem calcula:
min[(nivel(5), min{nma(4), nma(7)}]
Min[3, 1, 4]
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 2 3 1 1 4 4 4
nma[k]=min[(nivel(k),
min{nivel[yi], (yi ,k) –muchie de intoarcere},
min{nma[yi], yi- fii a lui k}]
5 putem calcula:
min[(nivel(5), min{nma(4), nma(7)}]
Min[3, 1, 4]
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 2 3 1 1 4 4 4
nma[k]=min[(nivel(k),
min{nivel[yi], (yi ,k) –muchie de intoarcere},
min{nma[yi], yi- fii a lui k}]
2 putem calcula:
min[(nivel(2), min{nma(5), nma(3)}]
Min[2, 1, 3]
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 2 3 1 1 4 4 4
nma[k]=min[(nivel(k),
min{nivel[yi], (yi ,k) –muchie de intoarcere},
min{nma[yi], yi- fii a lui k}]
1 putem calcula:
min[(nivel(1), min{nma(2)}
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 1 3 1 1 4 4 4
nma[k]=min[(nivel(k),
min{nivel[yi], (yi ,k) –muchie de intoarcere},
min{nma[yi], yi- fii a lui k}]
1 putem calcula:
min[(nivel(1), min{nma(2)}
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 1 3 1 1 4 4 4
un nod k care nu este rădăcina arborelui este
punct de articulație dacă și numai dacă are cel
puțin un fiu x pentru care nivelul minim
accesibil este mai mare sau egal cu nivelul
nodului (nivel[k] <= nma[x]).
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 1 3 1 1 4 4 4
(nivel[k] <= nma[x]).
2 1 nu este punct de articulație, deoarece este
rădăcina arborelui și are un singur descendent
direct
2 este punct de articulație, deoarece 3 este fiu
al lui 2 și nivel[2] <= nma[3]
3 nu este punct de articulație, deoarece nu are
niciun fiu
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 1 3 1 1 4 4 4
(nivel[k] <= nma[x]).
2 4 nu este punct de articulație, deoarece nu are
niciun fiu
5 5 este punct de articulație deoarece 7 este fiu
al lui 5 și nivel[5] <= nma[7]
6 nu este punct de articulație; pentru singurul
fiu al lui 6, 8 relația este nivel[6] > nma[8]
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 1 3 1 1 4 4 4
(nivel[k] <= nma[x]).
2 7 este punct de articulație deoarece 6 este fiu
al lui 7 și nivel[7] <= nma[6]
5 8 nu este punct de articulație deoarece nu are
7 fii
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 1 3 1 1 4 4 4
Determinarea punțile
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 1 3 1 1 4 4 4
Pentru muchia de parcurgere (k,x)
2 nivel[k] < nma[x].
Muchia (1,2) nivel[1]=nma[2]. Nu este punte.
5 Muchia (2,3) nivel[2]<nma[3]. Este punte.
7 Muchia (2,5) nivel[2]>nma[5]. Nu este punte.
Muchia (5,4) nivel[5]>nma[4]. Nu este punte.
Muchia (5,7) nivel[5]<nma[7]. Este punte.
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 1 3 1 1 4 4 4
Pentru muchia de parcurgere (k,x)
2 nivel[k] < nma[x].
Muchia (1,2) nivel[1]=nma[2]. Nu este punte.
5 Muchia (2,3) nivel[2]<nma[3]. Este punte.
7 Muchia (2,5) nivel[2]>nma[5]. Nu este punte.
Muchia (5,4) nivel[5]>nma[4]. Nu este punte.
Muchia (5,7) nivel[5]<nma[7]. Este punte.
Muchia (7,6) nivel[7]=nma[6]. Nu este punte.
Muchia (6,8) nivel[6]>nma[8]. Nu este punte.
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 1 3 1 1 4 4 4
Algoritmul de determinare a componentelor biconexe
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 1 3 1 1 4 4 4
DFS: 1, 2, 3, 5, 4, 7, 6, 8
Analiza respectarii inegalitătii nivel[k] <= nma[x] (x
descedent direct
Se analizează muchia (6,8) conform parcurgerii. 8
este descedent pentru 6:
nivel[6] <= nma[8]? NU!
Se analizează muchia (7,6) conform parcurgerii. 6
este descedent pentru 7:
nivel[7] <= nma[6]? DA!
Nodurile 7, 6, 8 formeaza o componentă conexă
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 1 3 1 1 4 4 4
DFS: 1, 2, 3, 5, 4, 7
- Se exclude din parcurgere nodurile 6 și 8
-Analiza respectarii inegalitătii nivel[k] <= nma[x]
(x descedent direct) :
Se analizează muchia (5,7) conform parcurgerii.
7 este descedent pentru 5:
nivel[5] <= nma[7]? DA!
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 1 3 1 1 4 4 4
DFS: 1, 2, 3, 5, 4, 7
- Se exclude din parcurgere nodurile 6 și 8
-Analiza respectarii inegalitătii nivel[k] <= nma[x]
(x descedent direct) :
Se analizează muchia (5,7) conform parcurgerii.
7 este descedent pentru 5:
nivel[5] <= nma[7]? DA!
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 1 3 1 1 4 4 4
DFS: 1, 2, 3, 5, 4
- Se exclude din parcurgere nodul 7
-Analiza respectarii inegalitătii nivel[k] <= nma[x] (x
descedent direct) :
Se analizează muchia (5,4). 4 este descedent p/u 5:
nivel[5] <= nma[4]? Nu!
Se analizează muchia (2,5). 5 este descedent p/u 2:
nivel[2] <= nma[5]? Nu!
Muchia (1,2). 2 este descedent p/u 1:
nivel[1] <= nma[2]? Da!
Nodurile 1,2,5,4 formeaza o componentă biconexă
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 1 3 1 1 4 4 4
DFS: 1, 2, 3, 5, 4
- Se exclude din parcurgere nodul 7
-Analiza respectarii inegalitătii nivel[k] <= nma[x] (x
descedent direct) :
Se analizează muchia (5,4). 4 este descedent p/u 5:
nivel[5] <= nma[4]? Nu!
Se analizează muchia (2,5). 5 este descedent p/u 2:
nivel[2] <= nma[5]? Nu!
Muchia (1,2). 2 este descedent p/u 1:
nivel[1] <= nma[2]? Da!
Nodurile 1,2,5,4 formeaza o componentă biconexă
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 1 3 1 1 4 4 4
DFS: 1, 2,3
- Conform algoritmului parcurs trebuie să excludem
din parcurgere toate nodurile 4,5,2. Dar deoarece s-a
analizat nodul 1, care este rădăcină și pentru care
intotdeuna are loc nivel[k] <= nma[x] (x descedent
direct) si a rămas noduri, care nu au fost analizate se
va exclude doar 4 si 5
-Analiza respectarii inegalitătii :
Se analizează muchia (2,3). 3 este descedent p/u 2:
nivel[2] <= nma[3]? DA!
Nodurile 2,3 formeaza o componentă biconexă
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 1 3 1 1 4 4 4
DFS: 1, 2, 3, 5, 4, 7, 6, 8
- Conform algoritmului parcurs trebuie să excludem
din parcurgere toate nodurile 4,5,2. Dar deoarece s-a
analizat nodul 1, care este rădăcină și pentru care
intotdeuna are loc nivel[k] <= nma[x] (x descedent
direct) si a rămas noduri, care nu au fost analizate se
va exclude doar 4 si 5
-Analiza respectarii inegalitătii :
Se analizează muchia (2,3). 3 este descedent p/u 2:
nivel[2] <= nma[3]? DA!
Nodurile 2,3 formeaza o componentă biconexă
k 1 2 3 4 5 6 7 8
Nivel[k] 1 2 3 4 3 5 4 6
Nma[k] 1 1 3 1 1 4 4 4