This shows you the differences between two versions of the page.
pa:laboratoare:shortest-paths-problem [2022/04/30 00:56] darius.neatu |
pa:laboratoare:shortest-paths-problem [2025/05/14 20:35] (current) darius.neatu [Shortest-paths: variants] |
||
---|---|---|---|
Line 132: | Line 132: | ||
- | > **Destinație unică** / **single-source shortest-paths problem**: Se dă un graf $G = (V, E)$ și un nod special $destination$, considerat destinație. Se cere calculul distanței de la fiecare nod la nodul **destination**. Putem reduce această problema la cea de **sursă unică** (pentru graf orientat, trebuie să folosim graful transpus). | + | > **Destinație unică** / **single-destination shortest-paths problem**: Se dă un graf $G = (V, E)$ și un nod special $destination$, considerat destinație. Se cere calculul distanței de la fiecare nod la nodul **destination**. Putem reduce această problema la cea de **sursă unică** (pentru graf orientat, trebuie să folosim graful transpus). |
\\ | \\ | ||
Line 248: | Line 248: | ||
path = RebuildPath(source, destination, p) | path = RebuildPath(source, destination, p) | ||
</code> | </code> | ||
- | |||
Analog se reconstitue drumul și dacă suntem pe cazul cu surse multiple, destinații multiple, unde tabloul $p$ este o matrice, iar atunci când cautăm un drum care începe cu nodul $source$, folosim doar elementele de pe linia $p[source]$. | Analog se reconstitue drumul și dacă suntem pe cazul cu surse multiple, destinații multiple, unde tabloul $p$ este o matrice, iar atunci când cautăm un drum care începe cu nodul $source$, folosim doar elementele de pe linia $p[source]$. | ||
Line 309: | Line 308: | ||
Mai există o varianta a problemei pe care dorim să o menționăm. Avem **k** surse (sau destinații), unde **k << n ** (k mult mai mic decât n - de exemplu, $k = 10$ constant) și ne interesează să găsim distanța pentru fiecare nod din graf către cea mai apropiată sursă. | Mai există o varianta a problemei pe care dorim să o menționăm. Avem **k** surse (sau destinații), unde **k << n ** (k mult mai mic decât n - de exemplu, $k = 10$ constant) și ne interesează să găsim distanța pentru fiecare nod din graf către cea mai apropiată sursă. | ||
- | O abordare naivă ar rula de **k** ori un algorthm de drumuri minime (de exemplu, Dijkstra) și pentru fiecare nod ar reține minimul dintre cele k distanțe calculate pentru un nod. Complexitatea este $O(k * complexitate_algoritm$). | + | O abordare naivă ar rula de **k** ori un algorthm de drumuri minime (de exemplu, Dijkstra) și pentru fiecare nod ar reține minimul dintre cele k distanțe calculate pentru un nod. Complexitatea este $O(k * complexitate\_algoritm$). |
O optimizare pe care o putem facem, este să adaugăm un nod fictiv $S$ și să îl unim cu fiecare dintre cele **k** noduri cu muchie de cost **0**. În noul graf format, dacă vom rula un algoritm să găsim toate distanțele de la nodul **S** la celelalte noduri din graf, rezolvăm și problema inițială. | O optimizare pe care o putem facem, este să adaugăm un nod fictiv $S$ și să îl unim cu fiecare dintre cele **k** noduri cu muchie de cost **0**. În noul graf format, dacă vom rula un algoritm să găsim toate distanțele de la nodul **S** la celelalte noduri din graf, rezolvăm și problema inițială. |