0% au considerat acest document util (0 voturi)
5 vizualizări13 pagini

Week 4

Încărcat de

Adrian Gavrilescu
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
5 vizualizări13 pagini

Week 4

Încărcat de

Adrian Gavrilescu
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

ALGORITMICA GRAFURILOR

09-10

C. Croitoru

săptămâna 4
AGENDA

 Probleme de drum ı̂n (di)grafuri


(ag 09-10 [Link] pag. 68 −→ )

 Problemele pentru seminarul 4

♦♦

1
 Probleme de drum

Parcurgeri

BFS

DFS

Componente conexe, tari conexe !!! (pen-


tru examen; algoritmică uşoară !!!)

2
 Probleme de drum
Drumuri de cost minim

P1 Date G digraf;a : E(G) → R; s, t ∈ V (G),s = t.


∗ ∈ D , astfel ı̂ncı̂t
Să se determine Dst st
a(Dst∗ ) = min{a(D ) | D ∈ D }.
st st st

P2 Date G digraf; a : E(G) → R; s ∈ V (G).


∗ ∈ D ∀i ∈ V (G), a.ı̂.
Să se determine Dsi si
a(Dsi∗ ) = min{a(D ) | D ∈ D }.
si si si

P3 Date G digraf; a : E(G) → R.


∗ ∈ D ∀i, j ∈ V (G), a.ı̂.
Să se determine Dij ij
a(Dij∗ ) = min{a(D ) | D ∈ D }.
ij ij ij

3
 Probleme de drum minim

Rezolvarea problemei P2

Teoremă. 1. Fie G = (V, E) digraf, V =


{1, . . . , n}, s ∈ V şi a : E → R, astfel ı̂ncı̂t

(I) ∀C circuit ı̂n G, a(C) > 0.


Atunci (u1, . . . , un) este o soluţie a sistemu-
lui


⎨ us = 0
(∗) ∀i = s.

⎩ ui = min (uj + aji )
j=i

dacă şi numai dacă

∗ ∈ D
∀i ∈ V , ∃Dsi ∗
si astfel ı̂ncı̂t a(Dsi ) = ui şi
∗ ) = min{a(D) | D ∈ D }.
a(Dsi si

4
 Probleme de drum minim

O numerotare aciclică a (vârfurilor) digrafu-


lui G = (V, E) este un vector ord[v] v ∈ V ,
(cu interpretarea ord[v] = numărul de ordine
al vârfului v) a. ı̂.

∀vw ∈ E ⇒ ord[v] < ord[w].

G este un digraf fără circuite dacă şi numai


dacă admite o numerotare aciclică .

Sortare topologică O(n + m).

Rezolvarea sistemului (∗) prin substituţie.

5
 Probleme de drum minim
Algoritmul lui Dijkstra aij ≥ 0 !!!

1. S ← {s}; us ← 0; ı̂nainte[s] ← 0;
for i ∈ V \ {s} do
{ ui ← asi; ı̂nainte[i] ← s }
// după aceste iniţializări (D) are loc
2. while S = V do
{
determină j ∗ ∈ V \ S : uj ∗ = min{uj | j ∈ V \ S};
S :← S ∪ {j ∗};
for j ∈ V \ S do
if uj > uj ∗ + aj ∗ j then
{ uj ← uj ∗ + aj ∗j ; ı̂nainte[j] ← j ∗ }
}

Complexitatea timp a algoritmului, ı̂n descrierea dată


este O(n2) .
Este posibilă organizarea unor cozi cu prioritate (de
exemplu heap-urile) pentru obţinerea unui algoritm cu
complexitatea O(m log n) (unde m = |E|) Johnson ,1977).

Cea mai bună implementare se obţine utilâzând heap-


uri Fibonacci, ceea ce conduce la o complexitate timp
de O(m + n log n) (Fredman şi Tarjan, 1984).
6
 Probleme de drum minim
Rezolvarea lui P2 ı̂n cazul general.

Algoritmul lui Bellman, Ford, Moore (∼ 1960)

s ← 0; for i ∈ V \ {s} do ui ← asi ;


1. u1 1

// evident (BM) are loc


2. for m := 1 to n − 2 do
for i := 1 to n do
 
m+1
ui ← min ui , minj=i(uj + aji )
m m

Complexitatea O(n3), dacă determinarea min-


imului din pasul 2 necesită O(n) operaţii.

Testarea ı̂n O(n3) a existenţei unui circuit C


de cost negativ ı̂n digraful G !

7
 Problemele pentru seminarul 4

Problema 1. Să se construiască o funcţie care să


recunoască un turneu. La intrare aceasta va primi un
digraf G = ({1, ..., n}, E) reprezentat cu ajutorul listelor
de adiacenţă şi va returna true sau f alse. Stabiliţi com-
plexitatea timp a algoritmului folosit.

Problema 2. Să se construiască o funcţie care prim-


ind la intrare un digraf G = ({1, ..., n}, E) reprezentat cu
ajutorul listelor de adiacenţă să returneze inversul lui G
reprezentat cu ajutorul listelor de adiacenţă. Complexi-
tatea timp a algoritmului folosit trebuie să fie O(n+|E|).

Problema 3. Se consideră un graf G = ({1, ..., n}, E)


reprezentat cu ajutorul matricii de adiacenţă. Mulţimea
de n − 1 muchii A are proprietatea că T = (V, A) este ar-
bore parţial al lui G. Construiţi un algoritm care să
listeze cele m − n + 1 circuite care se formează prin
adăugarea muchiilor din E−A la T (|E| = m). Reprezentarea
lui T trebuie să permită depistarea fiecărui astfel de cir-
cuit ı̂n timpul O(n).

8
Problema 4. Să se construiască o funcţie
care să determine gradul maxim al unui vârf al
unui graf. La intrare aceasta va primi un graf
G = ({1, ..., n}, E) reprezentat cu ajutorul lis-
telor de adiacenţă şi va returna Δ(G). Stabiliţi
complexitatea timp a algoritmului folosit.

Problema 5. Construiţi o funcţie care pri-


mind la intrare graful G = (V, E) reprezen-
tat cu ajutorul listelor de adiacenţă şi k, un
număr ı̂ntreg pozitiv, returnează graful G(k) cu
aceeaşi mulţime de virfuri ca şi G , ı̂n care două
virfuri distincte sunt adiacente dacă şi numai
dacă ı̂n graful iniţial sunt conectate printr-un
drum de lungime cel mult k. Care este com-
plexitatea timp a construcţiei ?

Problema 6. Pentru graful conex G = (V, E)


cu n vârfuri şi m muchii, se dispune de o repre-
zentare cu ajutorul listelor de adiacenţă. Descrieţi
un algoritm, cu complexitatea timp O(n + m),
pentru construcţia listelor de adiacenţă ale unui
arbore parţial al lui G.
9
Problema 7. Fie G = (V, E) un graf cu ordinul |V | ≥ 2
şi T = (V, ET ) un arbore parţial al lui G, reprezentat
cu ajutorul tabloului (p[v])v∈V , unde p[v] este părintele
lui v ı̂n T : vârful dinaintea lui v de pe drumul unic
de la o rădăcină fixată r, la v, ı̂n T ( pentru r avem
p[r] = r). Descrieţi un algoritm care să determine, ı̂n
timpul O(|V |), un vârf v0 pendant (frunză) ı̂n T şi apoi
demonstraţi că G − v0 este conex.

Problema 8. Fie G = (V, E) un digraf reprezentat cu


ajutorul listelor de adiacenţă. Descrieţi un algoritm de
complexitate timp O(|V | + |E|) care să decidă dacă se
pot ordona vârfurile sale: vi1 , . . . , vi|V | , astfel ı̂ncât dacă
vij apare ı̂n lista de adiacenţă a lui vik atunci k < j.

Problema 9. Fie T = (V, ET ) un arbore cu mulţimea


vârfurilor V = {1, . . . , n} (n ≥ 2), reprezentat cu ajutorul
tabloului (p[v])v∈V , unde p[v] este părintele lui v ı̂n T :
vârful dinaintea lui v de pe drumul unic de la o rădăcină
fixată r, la v, ı̂n T ( pentru r avem p[r] = r). Descrieţi
un algoritm care să construiască , ı̂n timpul O(n), listele
de adiacenţă ale lui T .

10
Problema 10. Se consideră un graf G = (V, E) (V =
{1, . . . , n}), izomorf cu graful circuit (cu cel puţin 3
vârfuri), G = ∼ Cn. Fiecare muchie e ∈ E are asociat
un cost real c(e). Aceste informaţii sunt disponibile ı̂n
tablourile dreapta şi cost de dimensiune n cu semnificaţia:
dreapta[v] = vecinul din dreapta al lui v, iar costul muchiei
{v, dreapta(v)} este cost[v]. Descrieţi un algoritm cât mai
eficient pentru aflarea unui arbore parţial al lui G de cost
minim.

Problema 11. Se consideră un graf G = (V, E) (V =


{1, . . . , n}), reprezentat cu ajutorul listelor de adiacenţă.
Se ştie că graful are gradul minim δ(G) mărginit de o
constantă c ∈ N. Descrieţi un algoritm cu complexitatea
timp O(n) pentru determinarea lui δ(G) şi a unui vârf
v0 ∈ V cu gradul ı̂n G egal cu δ(G).

Problema 12. Se consideră un grafurile G1 şi G2 (


Gi = (Vi , Ei) , Vi = {1, . . . , ni}, (i=1,2)) reprezentate
cu ajutorul matricilor de adiacenţă A1 şi A2. Scrieţi (ı̂n
pseudocod) un algoritm pentru construirea listelor de
adiacenţă ale grafului G1 × G2 .

11
 Problemele pentru seminarul special 4

• Problema 1, Setul 3”
– Aceasta e o problemă foarte interesantă pentru că oferă
o caracterizare algoritmică a unei clase de grafuri. Utilă
pentru ı̂nţelegerea df s.

• Problema 3, Setul 4
– Exerciţiu util. Tripartiţia evidenţiată la a) poate fi con-
struită algoritmic ! Rezultatul de la b) e util ı̂n recunoaşterea
grafurilor cordale.

12

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