Sunteți pe pagina 1din 16

Calcul de înaltă

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

Circuitele sunt 1321 si 15465726341


Pasul 2

 Construirea multimii R={ (i,j)/ (i,j) reprezinta circuitul c ∈ C};


 Construirea unui graf auxiliar bipartit G′=(V’,E’), unde
V’=V∪R si
E’={ (i,e) / i ∈ V, e ∈ R si i ∈ circuitului reprezentat de e }.
Exemplu
Tabloul RC

(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

 Implementat pe o masina CREW-PRAM, algoritmul necesita O(logn)


timp si O(m) procesoare.
 In varianta originala, algoritmul utilizeaza modelul CRCW-PRAM,
timpul de executie fiind O(logn) unitati de timp.
Comentarii
 Problema determinarii unui circuit Eulerian intervine frecvent ca
subtask în rezolvarea unor probleme de optimizare combinatorie.
 Remarcabile sunt
 problemele de cuplaje de cardinalitate maxima,
 problemele de colorare,
 euristicile problemei comisului voiajor.

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