Sunteți pe pagina 1din 12

Complemente de Matematici

Determinarea Drumurilor Hamiltoniene

Olteanu Andrei
Stoian Catalin
1. Drum optim, drum critic

Def Fie Γ = (X, U) un graf orientat.


X = {x1, …. , xn } varfuri (noduri)
U = {(xi, xj) xi, xj ∈ X } arce (muchii)
a) S. n. drum(lant) o succesiune de arce a. i. extremitatea terminal a fiecarui arc sa coincide
cu extremitatea initiala a arcului urmator.
Se noteaza d = (u1, u2, …, un)
b) S. n. circuit(ciclu) un drum in care extremitatea initialaa primului arc coincide cu
extremiatea finala a ultimului.
Clasificare:
1. Drum simplu: fiecare arc este folosit o singura data
Drum compus: poate sa contina acelasi arc de mai multe ori
2. Drum elementar: nu foloseste de 2 ori acelasi varf
Drum neelementar: contine de mai multe ori acelasi varf
3. Drum Hamiltonian: drumul elementar care trece prin toate varfurile
4. Semidrum eulerian: intr-un graf neorientat este semidrumul care foloseste
fiecare muchie o singura data

2. Determinarea drumurilor hamiltoniene in grafuri fara circuite(Algoritmul lui


Chen)
Fie Γ = (X, U) un graf orientat.
Consideram A = (αij) matricea arcelor

1 ∋ (𝑥𝑖 , 𝑥𝑗 ) ∊ 𝑈
𝛼𝑖𝑗 = {
0 ∌ (𝑥𝑖 , 𝑥𝑗 ) ∉ 𝑈

D = (dij) matricea drumurilor


1 ∋ 𝑢𝑛 𝑑𝑟𝑢𝑚 𝑖𝑛𝑡𝑟𝑒 𝑥𝑖 , 𝑥𝑗
𝑑𝑖𝑗 = {
0 𝑖𝑛 𝑐𝑎𝑧 𝑐𝑜𝑛𝑡𝑟𝑎𝑟
(𝑘)
Obs. dij = 1 daca si numai daca 𝑥𝑗 ∈ ⋃𝑛−1 𝑘
𝑘=1 𝛤𝑥𝑖 unde 𝛤𝑥 = 𝛤(𝛤(… 𝛤(𝑥)) … ) multimea
varfurilor care pot fi atinse de la varful x prin drumuri de lungime k
Def S. n. putere de atingere a unui varf xi numarul varfurilor care pot fi atinse de la xi si
se noteaza p(xi)
𝑝(𝑥𝑖 ) = ∑𝑛𝑗=1 𝑑𝑖𝑗
X1 X2

X3

X4

X6 X5

Fie A(Γ)
x1 x2 x3 x4 x5 x6
x1 0 1 0 0 0 0
x2 0 0 1 0 0 0
x3 0 0 0 0 0 0
x4 1 1 0 0 1 0
x5 0 1 1 0 0 1
x6 1 0 1 0 0 0

Matricea drumurilor D(Γ) se obtine astfel:

x1 x2 x3 x4 x5 x6 p(xi)
X1 0 1 1 0 0 0 2
X2 0 0 1 0 0 0 1
X3 0 0 0 0 0 0 0
X4 1 1 1 0 1 1 5
X5 1 1 1 0 0 1 4
X6 1 1 1 0 0 0 3
15

T Conditia necesara si suficienta ca un graf Γ sa contina un drum Hamiltonian esta ca


𝑛∗(𝑛−1)
∑𝑥𝑖=1 𝑝(𝑥𝑖 ) = , unde n este nr de varfuri
2
6∗5
ex: 15 = (A)
2
Cum se obtine: se scriu varfurile in ordinea descrescatoare a puterilor de atingere dH = (x4, x5,
x6, x1, x2, x3).
Obs: Se obtine astfel si forma triangularizata si se poate optimiza.
Modelul anterior este al problemei:
Prelucrarea unui produs poate trece prin 6 faze distincte notate prin xi, iar posibilitatile
de trecere de la o faza la alta se reprezinta prin arce. Este posibil ca produsul sa treaca prin
toate fazele de prelucrare?

Algoritmul lui Chen


Pas1 Se scrie matricea de adiacenta A.
Pas2 Se calculeaza matricea drumurilor D.
Pas3 Daca exista un indice i cu dii = 1 atunci graful are circuite, nu se poate aplica
algoritmul lui Chen si algoritmul se opreste. Daca nu, se trece la pasul 4.
Pas4 Se calculeaza puterile de atingere pentru fiecare nod.
𝑛∗(𝑛−1)
Pas5 Daca nu se verifica relatia ∑𝑥𝑖=1 𝑝(𝑥𝑖 ) = atunci graful nu are drumuri
2
hamiltoniene si algoritmul se opreste, altfel se trece la pasul 6.
Pas6 Se ordoneaza nodurile in ordinea descrescatoare a puterilor lor de atingere si
obtinem drumul hamiltonian cautat.

Exemplu 1: Intr-o hala, procesul de productie se desfasoara in 8 puncte de lucru legate


printr-un sistem de benzi rulante.
Fiecare punct de lucru executa cate o operatie.
Intreprinderea produce un nou produs care trebuie sa treaca prin cele 8 operatii. Sa se
cerceteze daca sistemul de benzi rulante permite acest lucru si daca nu sa se imbunatateasca.
X1 X2 X3

X4

X6

X5

X7
X8

Fie A(Γ)
X1 X2 X3 X4 X5 X6 X7 X8
X1 0 1 0 0 0 0 0 0
X2 0 0 1 1 0 0 0 0
X3 0 0 0 0 0 0 0 0
X4 0 0 0 0 1 0 0 0
X5 0 0 1 0 0 0 0 0
X6 1 0 0 1 0 0 1 0
X7 0 0 0 0 0 0 0 1
X8 1 0 0 0 0 0 0 0

Matricea drumuriloe D(Γ) este


X1 X2 X3 X4 X5 X6 X7 X8 p(Xi)
X1 0 1 1 1 1 0 0 0 4
X2 0 0 1 1 1 0 0 0 3
X3 0 0 0 0 0 0 0 0 0
X4 0 0 1 0 1 0 0 0 2
X5 0 0 1 0 0 0 0 0 1
X6 1 1 1 1 1 0 1 1 7
X7 1 1 1 1 1 0 0 1 6
X8 1 1 1 1 1 0 0 0 5
28
8∗7
28 = = 33 (F)
2

Nu exista drumuri hamiltoniene.


Facem D’(Γ)
X6 X7 X8 X1 X2 X4 X5 X3
X6 0 1 1 1 1 1 1 1
X7 0 0 1 1 1 1 1 1
X8 0 0 0 1 1 1 1 1
X1 0 0 0 0 1 1 1 1
X2 0 0 0 0 0 1 1 1
X4 0 0 0 0 0 0 1 1
X5 0 0 0 0 0 0 0 1
X3 0 0 0 0 0 0 0 0

Intre X3 si X5 se allege coloana cu cel mai mic nr de zerouri si se pune o banda rulanta intre X3 si
X 5.

Exemplu 2: Prelucrarea unui produs poate trece prin 7 faze distincte notate prin x i, iar
posibilitatile de trecere de la o faza la alta se reprezinta prin arce. Este posibil ca produsul sa
treaca prin toate fazele de prelucrare? In caz afirmativ sa se precizeze drumul.

X1 X2 X3

X7

X4

X6 X5
Fie A(Γ)
X1 X2 X3 X4 X5 X6 X7
X1 0 1 0 0 0 0 1
X2 0 0 1 0 0 1 0
X3 0 0 0 1 0 0 0
X4 0 0 0 0 0 0 1
X5 0 0 1 0 0 0 1
X6 0 0 0 0 1 0 0
X7 0 0 0 0 0 0 0

Matricea drumurilor D(Γ)


X1 X2 X3 X4 X5 X6 X7 p(Xi)
X1 0 1 1 1 1 1 1 6
X2 0 0 1 1 1 1 1 5
X3 0 0 0 1 0 0 1 2
X4 0 0 0 0 0 0 1 1
X5 0 0 1 1 0 0 1 3
X6 0 0 1 1 1 0 1 4
X7 0 0 0 0 0 0 0 0
21

7∗6
21 = = 21 (A)
2

Drumul Hamiltonian este: dH = (X1, X2, X6, X5, X3, X4, X7)

3. Determinarea drumului Hamiltonian in grafuri oarecare (cu circuite)


Algoritmul Kaufmann(produsul latin)
Fie Γ = (X, U) un graf oarecare, cardX = n.
Se construiesc matricele latine M(1), M(n-1).
1) M(1) in (i, j) se pune secventa (xi, xj) daca (xi, xj) ∈ U, daca nu se pune 0.
Ex: X1 X2

X3

X5

X4

Fie A(Γ)
X1 X2 X3 X4 X5
X1 0 1 1 0 1
X2 0 0 0 0 1
X3 0 0 0 1 0
X4 0 1 0 0 0
X5 1 0 1 1 0

Matricea latina M(1)

0 𝑥1 𝑥2 𝑥1 𝑥3 0 𝑥1 𝑥5
0 0 0 0 𝑥2 𝑥5
𝑀(1) = 0 0 0 𝑥3 𝑥4 0
0 𝑥4 𝑥2 0 0 0
( 5 𝑥1
𝑥 0 𝑥5 𝑥3 𝑥5 𝑥4 0 )

̃
2) Se contruieste 𝑀 (1) taind primul capat al arcurilor din 𝑀 (1)

0 𝑥2 𝑥3 0 𝑥5
0 0 0 0 𝑥5
̃
𝑀 (1) = 0 0 0 𝑥4 0
0 𝑥2 0 0 0
(𝑥1 0 𝑥3 𝑥4 0)
(𝑘−1) ̃
3) Se calculeaza 𝑀(𝑘) = 𝑀𝐿 ∗ 𝑀(1) pana la k = n - 1 dupa regula: se pune
secventa daca varfurile sunt distincte, 0 daca se obtine 0 sau nu apar varfuri
distincte
0 0 𝑥1 𝑥5 𝑥3 𝑥1 𝑥3 𝑥4 𝑥1 𝑥5 𝑥4 𝑥1 𝑥2 𝑥3
𝑥2 𝑥5 𝑥1 0 𝑥2 𝑥5 𝑥3 𝑥2 𝑥5 𝑥4 0
(1) ̃
𝑀(2) = 𝑀𝐿 ∗ 𝑀 (1) = 0 𝑥3 𝑥4 𝑥2 0 0 0
0 0 0 0 𝑥4 𝑥2 𝑥5
( 0 𝑥5 𝑥1 𝑥2 𝑥5 𝑥4 𝑥2 𝑥5 𝑥1 𝑥3 𝑥5 𝑥3 𝑥4 0 )
(2)
𝑀(3) = 𝑀𝐿 ∗ 𝑀 ̃
(1)

0 𝑥1 𝑥3 𝑥4 𝑥2 𝑥1 𝑥5 𝑥4 𝑥2 𝑥1 𝑥2 𝑥5 𝑥3 𝑥1 𝑥5 𝑥3 𝑥4 𝑥1 𝑥2 𝑥5 𝑥4 0
0 0 𝑥2 𝑥5 𝑥1 𝑥3 𝑥2 𝑥5 𝑥3 𝑥4 0
= 0 0 0 0 𝑥3 𝑥4 𝑥2 𝑥5
𝑥4 𝑥2 𝑥5 𝑥1 0 𝑥4 𝑥2 𝑥5 𝑥3 0 0
( 0 𝑥5 𝑥4 𝑥3 𝑥2 0 𝑥5 𝑥1 𝑥3 𝑥4 0 )

̃
(3)
𝑀(4) = 𝑀𝐿 ∗ 𝑀 (1)

0 𝑥1 𝑥5 𝑥3 𝑥4 𝑥2 0 𝑥1 𝑥2 𝑥5 𝑥3 𝑥4 𝑥1 𝑥3 𝑥4 𝑥2 𝑥5
0 0 0 𝑥2 𝑥5 𝑥1 𝑥3 𝑥4 0
= 𝑥3 𝑥4 𝑥2 𝑥5 𝑥1 0 0 0 0
0 0 𝑥4 𝑥2 𝑥5 𝑥1 𝑥3 0 0
( 0 𝑥5 𝑥1 𝑥3 𝑥4 𝑥2 0 0 0 )

Avem 7 drumuri hamiltoniene: unele fiind aceleasi dar ordinea varfurilor difera.

dH1 = (x1, x5, x3, x4, x2), dH2 = (x1, x2, x5, x3, x4), dH3 = (x1, x3, x4, x2, x5), dH4 = (x2, x5, x1, x3, x4),
dH5 = (x3, x4, x2, x5, x1), dH6 = (x4, x2, x5, x1, x3), dH17 = (x5, x1, x3, x4, x2)

Algoritmul Kaufmann

Pas1 Construim matricea latina M asociata grafului, unde

𝑥𝑖 𝑥𝑗 𝑑𝑎𝑐𝑎 𝑒𝑥𝑖𝑠𝑡𝑎 𝑎𝑟𝑐𝑢𝑙 (𝑥𝑖 , 𝑥𝑗 )


𝑀𝑖𝑗 = {
0 𝑑𝑎𝑐𝑎 𝑛𝑢 𝑒𝑥𝑖𝑠𝑡𝑎 𝑎𝑟𝑐𝑢𝑙 (𝑥𝑖 , 𝑥𝑗 )

Pas2 ̃ , definita prin


Construim matricea 𝑀

𝑥𝑗 𝑑𝑎𝑐𝑎 𝑒𝑥𝑖𝑠𝑡𝑎 𝑎𝑟𝑐𝑢𝑙 (𝑥𝑖 , 𝑥𝑗 )


̃𝑖𝑗 = {
𝑀
0 𝑑𝑎𝑐𝑎 𝑛𝑢 𝑒𝑥𝑖𝑠𝑡𝑎 𝑎𝑟𝑐𝑢𝑙 (𝑥𝑖 , 𝑥𝑗 )

numita matricea latina redusa.

(𝑘−1) ̃
Pas3 Se calculeaza 𝑀(𝑘) = 𝑀𝐿 ∗ 𝑀(1) pana la k = n - 1 dupa regula: se pune
secventa daca varfurile sunt distincte, 0 daca se obtine 0 sau nu apar varfuri distincte.
Pas4 Daca se doresc si circuitele atunci se verifica pentru fiecare drum hamiltonian
daca poate fi completat pana la un circuit (adica daca exista in graf arcul care uneste
nodul final cu cel initial)
Pas5 Daca se doreste si drumul (sau circuitul) de valoare optima (maxima sau minima)
se calculeaza suma valorilor pentru fiecare drum si/sau circuit si se alege cel cu valoarea
optima.

Exemplu: 1)

X1 X2

X3

X6 X4

X5

Fie A(Γ)

X1 X2 X3 X4 X5 X6

X1 0 1 0 0 0 0

X2 0 0 1 1 0 0

X3 0 0 0 0 1 0

X4 0 0 0 0 0 1

X5 0 0 1 0 0 1

X6 0 0 1 1 0 0
Matricea latina M(1)

0 𝑥1 𝑥2 0 0 0 0
0 0 𝑥2 𝑥3 𝑥2 𝑥4 0 0
0 0 0 0 𝑥3 𝑥5 0
𝑀(1) =
0 0 0 0 0 𝑥4 𝑥6
0 0 𝑥5 𝑥3 0 0 𝑥5 𝑥6
(0 0 𝑥6 𝑥3 𝑥6 𝑥4 0 0 )

̃
Matricea latina redusa 𝑀 (1)

0 𝑥2 0 0 0 0
0 0 𝑥3 𝑥4 0 0
̃ (1) =
0 0 0 0 𝑥5 0
𝑀
0 0 0 0 0 𝑥6
0 0 𝑥3 0 0 𝑥6
(0 0 𝑥3 𝑥4 0 0)

Calculul matricei M(5)

0 0 𝑥1 𝑥2 𝑥3 𝑥1 𝑥2 𝑥4 0 0
0 0 0 0 𝑥2 𝑥3 𝑥5 𝑥2 𝑥4 𝑥6
(1) ̃ 0 0 0 0 0 𝑥3 𝑥5 𝑥6
𝑀(2) = 𝑀𝐿 ∗ 𝑀 (1) =
0 0 𝑥4 𝑥6 𝑥3 0 0 0
0 0 𝑥5 𝑥6 𝑥3 𝑥5 𝑥6 𝑥4 0 0
(0 0 0 0 𝑥6 𝑥3 𝑥5 0 )

0 0 0 0 𝑥1 𝑥2 𝑥3 𝑥5 𝑥1 𝑥2 𝑥4 𝑥6
0 0 𝑥2 𝑥4 𝑥6 𝑥3 0 0 𝑥2 𝑥3 𝑥5 𝑥6
(2) ̃ 0 0 0 𝑥3 𝑥5 𝑥6 𝑥4 0 0
𝑀(3) = 𝑀𝐿 ∗ 𝑀 (1) =
0 0 0 0 𝑥4 𝑥6 𝑥3 𝑥5 0
0 0 0 0 0 0
(0 0 0 0 0 0 )

0 0 0 0 0 𝑥1 𝑥2 𝑥3 𝑥5 𝑥6
0 0 0 𝑥2 𝑥3 𝑥5 𝑥6 𝑥4 0 0
(3) ̃ 0 0 0 0 0 0
𝑀(4) = 𝑀𝐿 ∗ 𝑀(1) =
0 0 0 0 0 0
0 0 0 0 0 0
(0 0 0 0 0 0 )
0 0 0 𝑥1 𝑥2 𝑥3 𝑥5 𝑥6 𝑥4 0 0
0 0 0 0 0 0
(4) ̃ 0 0 0 0 0 0
𝑀(5) = 𝑀𝐿 ∗ 𝑀(1) =
0 0 0 0 0 0
0 0 0 0 0 0
(0 0 0 0 0 0)

Rezulta un singur drum Hamiltonian: dH = (x1, x2, x3, x5, x6, x4)

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