Sunteți pe pagina 1din 3

Grafuri T1

??
November 2021

1. a) Sunt n! 2 − 1 grafuri izomorfe. Sunt n! permutari ale celor n noduri


pe care le impartim la 2 pentru ca fiecare graf drum este egal (nu izomorf!) cu
”inversul” sau (ex. drumul 1 − 2 − ... − n cu drumul n − (n − 1) − ... − 1), iar
la final scadem 1 pentru a nu numara graful Pn .
n!
b) Sunt 2n − 1 grafuri izomorfe. Sunt n! permutari ale celor n noduri, pe
care le impartim la 2n pentru ca fiecare ciclu este egal (nu izomorf!) cu cele 2n
cicluri obtinute prin parcurgerea (in ambele sensuri) a ciclului original pornind
din fiecare nod din acesta, iar la final scadem 1 pentru a nu numara graful Cn .
2. Algoritmul elimina, pe rand, frunze din T (si, implicit, si din subarborii
sai). Atunci cand unul dintre subarbori ramane cu un singur nod v, inainte ca
acesta sa fie eliminat, v este adaugat lui W , iar subarborii lui T care il contin
pe v sunt eliminati din cautare (deoarece prin existenta lui v ∈ W deja este
garantat ca W contine macar un nod din ei).
Fie W o solutie non-optimala a problemei si u, v ∈ W a.i. u, v ∈ Ti si
v ∈ / Tj , ∀j ̸= i - deci W \ {v} ar fi o solutie optima. Algoritmul prezentat
ar evita aceasta situatie deoarece atunci cand il selecteaza pe u, elimina toti
subarborii care il contin pe acesta din cautare (deci si subarborele cu v) - astfel,
v este eliminat complet din cautare si nu va putea fi selectat.
Fie W o alta solutie non-optimala si u, v ∈ W a.i. u ∈ Ti , v ∈ Tj dar exista
un w ∈ Ti , Tj - solutia optima ar fi (W \ {u, v}) ∪ {w}. Algoritmul ar evita
aceasta situatie deoarece elimina nodurile bottom-up (elimina doar frunzele) si
adauga un nod la W doar atunci cand un subarbore este format doar din acel
nod. In aceasta situatie, algoritmul ar elimina noduri din subarborele care este
”mai jos” in T dintre Ti si Tj , pana cand acesta va mai contine doar nodul de
intersectie dintre cele 2, w - care este radacina arborelui de ”mai jos” - si il va
adauga pe acesta la W . Apoi va elimina si Ti din cautare, deci il va elimina si
pe u.
Deci, algoritmul gaseste o solutie optima.
3. a) Presupunem prin reducere la absurd ca exista un ciclu in G, fie el C.
Fie u′ , v ′ ∈ V 2 noduri din C si u, v ∈ V 2 noduri a.i. u ∈ V (u′ ) si v ∈ V (v ′ ).
u′ , v ′ ∈ C ⇒ exista un drum de la u′ la v ′ in G, deci evident exista si un drum
de la u la v in G. Dar, C fiind un ciclu, exista si un drum de la v ′ la u′ in G, deci
si de la v la u in G. Asta ar insemna ca u si v fac parte din aceeasi componenta
tare-conexa, ceea ce este absurd. Deci, G este aciclic.

1
b) Putem aplica algoritmul lui Tarjan pentru determinarea componentelor
tari conexe. Acesta va face si o ordonare inversa (SP-) topologica a nodurilor
grafului, deoarece are proprietatea ca orice componenta tare conexa va fi identi-
ficata dupa vecinii sai[1]. Algoritmul are complexitatea O(|V |+|E|) deoarece cea
mai costisitoare operatie este parcurgerea DFS a grafului.
function T arjan(G = (V, E))
v.adancime = −1, ∀v ∈ V
v.peStiva = f alse, ∀v ∈ V
componenteConexe = ListaV ida()
index = 0
s = StivaV ida()
for (V ∈ V ) do
if (v.adacime == −1) then
recursie(v)
end if
end for
componenteConexe.reverse()
return componenteConexe
end function
function recursie(v)
v.adancime = index
v.low = index {low reprezinta cel mai de sus stramos (cu adancimea cea
mai mica) accesibil al nodului curent din arborele DFS (folosind muchii de
intoarcere)}
index + +
s.push(v)
v.peStiva = true
for all (w ∈ NG (v)) do
if (w.adancime == −1) then
recursie(w)
v.low = min(v.low, w.low)
else if (w.peStiva == true) then
v.low = min(v.low, w.adancime)
end if
end for
if (v.low == v.adancime) then
c = ListaV ida()
repeat
w = s.pop()
w.peStiva = f alse
c.add(w)
until (w = v)
componenteConexe.add(c)
end if
end function

2
c) Fie vi , vj ∈ V (D) a.i. vi apare inaintea lui vj pe D. Daca vi si vj
apartin unor componente tari conexe diferite, este imposibil ca j < i pentru
oricare sortare SP-topologica (deoarece vi si vj ar trebui sa apartina aceleiasi
componente - contradictie).
Ramane de demonstrat ca nodurile din interiorul fiecare componente pot fi
sortate a.i. i < j. In continuare voi descrie o metoda de a obtine sortarea dorita,
pornind de la o sortare SP-topologica oarecare: pentru fiecare din componentele
tari conexe ale lui G, mai intai eliminam toate muchiile care nu apar in D (pentru
a elimina ciclurile), apoi sortam topolgic nodurile din respectiva componenta.
La final, sortarea ramane SP-topologica (am modificat doar ordinea nodurilor
din interiorul fiecare componente, nu si ordinea componentelor), iar sortarea
fiind topologica raportat la D avem si garantia ca i < j.
∗ ∗
4. a) Uj = δj ⇐⇒ δi + aij = δj ⇐⇒ a(Psi ) + aij = a(Psj ). Presupunem
prin reducere la absurd ca egalitatea nu are loc. Atunci, avem 2 cazuri:

• Daca a(Psi∗ ∗
) + aij < a(Psj ), atunci ar insemna ca exista un drum de la s

la j D = Psi ◦ aij a.i. a(D) < δj , ceea ce este in contradictie cu modul de
alegere al lui δj
• Daca a(Psi ∗
) + aij > a(Psj ∗
), atunci fie i′ penultimul nod de pe Psj ∗
. Re-
latia de demonstrat devine echivalenta cu δi + aij > a(Psi′ ) + ai′ j . Cum

a(Psi′ ) ≥ a(Psi ′ ) = δi′ , relatia este echivalenta cu δi + aij > δi′ + ai′ j , care

este in contradictie cu modul in care a fost ales nodul i pentru a calcula


Uj (in acest caz ar fi trebuit sa se aleaga i′ )

Amebele cazuri au dus la contradictii, deci am demonstrat ca Uj = δj .

References
[1] https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_
components_algorithm#cite_note-5 - pseudocod pentru algoritmul lui
Tarjan

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