Documente Academic
Documente Profesional
Documente Cultură
performanţă
Circuite Euleriene
Definirea problemei
Problema consta în determinarea unui ciclu (circuit) într-un graf
neorientat (digraf) conex G=(V,E)) care traverseaza fiecare muchie
(arc) o singura data.
Un graf care contine un ciclu (circuit) Eulerian se numeste graf
Eulerian.
Un graf conex neorientat G, este Eulerian daca si numai daca gradul
fiecarui vârf este par.
Un digraf conex G, este Eulerian daca si numai daca pentru orice
vârf v, gradul-interior(v) = gradul-exterior(v).
Algorimul lui Atallah si Vishkin,
1984
Fie G=(V,E) un graf cu V={1,2,...,n} si E ⊆ V×V, |E| = m
Graful G este dat prin lista muchiilor memorata într-un tablou.
Pentru simplitate, se noteaza si lista si tabloul tot cu E.
Algoritmul presupune ca G este un digraf Eulerian.
Pentru grafurile neorientate poate fi aplicat acelasi algoritm,
executia acestuia fiind precedata de o operatie de preprocesare
care consta în orientarea muchiilor grafului Eulerian neorientat în
asa fel încât digraful rezultat sa fie Eulerian.
Preprocesarea
Dat fiind un graf Eulerian neorientat H=(V,E) se construieste digraful
H’=(V,E’) unde
E’={(i,j)/ {i,j} ∈ E}∪ {(j,i)/ {i,j} ∈ E}, |E’| = 2m.
Graful rezultat H’, va fi Eulerian.
Pe multimea E’ se define ste operatia min astfel:
min’{(i,j),(k,l)}=
(i,j),daca (i < k) sau (i=k si j < l)
(k,l),altfel
Eliminarea
circuitelor antiparalele
Se considera lista muchiilor E′, sortate crescator conform ordinei definite de
min'.
Operatia de sortare se poate face în logn unitati de timp.
Considerând sublista [(i,i0);(i,i1);...;(i,id-1)] a muchiilor ce ies dintr-un vârf i se
defineste sucesorul unei muchii, astfel:
succ((ik,i))=(i,ik⊕1)
succ((ik⊕1,i))=(i,ik)
∀k ∈ {0,1,... } unde ⊕ = adunarea modulo d
Se creeaza astfel o multime de circuite doua cate doua antiparalele.
Considerând doua circuite antiparalele C si C′, unul din ele se elimina, astfel
încit pentru orice i ∈ V gradul sa ramana par.
Pasul 1
Determinarea unei multimii C de circuite disjuncte relativ la muchii
Tablourile E, S si P definesc multimea C.
Ordinea definita pe E este data de operatorul min definit astfel:
min{(i,j),(k,l)} =
(i,j),daca (j < l) sau (j=l si i < k)
(k,l),altfel
Ordinea definita pe S este data de operatorul min' definit anterior.
Exemplu
Exemplu
Tabloul E
(2,1) (4,1) (3,2) (7,2) (1,3) (6,3) (3,4) (5,4) (1,5) (6,5) (2,6) (4,6) (5,7)
Tabloul S
(1,3) (1,5) (2,1) (2,6) (3,2) (3,4) (4,1) (4,6) (5,4) (5,7) (6,3) (6,5) (7,2)
Tabloul P
5 9 1 11 3 7 2 12 8 13 6 10 4
(1,3) (1,5) (1,3) (1,5) (1,3) (1,5) (1,5) (1,5) (1,5) (1,5) (1,5) (1,5) (1,5)
Tabloul RCN
12 16 12 16 12 16 16 16 16 16 16 16 16
RCN[i]=|V|+adrE(RC[i])
Exemplu: Graful bibartit G’
Pasul 3
1. Determinarea unui arbore partial T în graful bipartit G′
2. Parcurgerea Euleriana a lui T conform unei ordine circulare a
listelor de adiacenta definita de asa maniera încat înlocuind
pseudovârfurile din T cu muchiile circuitelor ale caror
reprezentante sunt, sa rezulte un circuit al lui G∪T’ unde T’=T∪{
(j,i)/ (i,j) ∈ T}
3. Eliminarea muchiilor lui T’
Exemplu: Arborele partial T
Circuitul eulerian al lui G U T’
T
G
Complexitatea