This shows you the differences between two versions of the page.
pa:laboratoare:maximum-flow-problem [2022/05/24 15:45] radu.nichita [Maximum flow problem] |
pa:laboratoare:maximum-flow-problem [2022/05/24 16:01] (current) darius.neatu |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Maximum flow problem ====== | ||
- | |||
- | ===== Importanţă – aplicaţii practice ===== | ||
- | |||
- | Algoritmii pentru determinarea unui flux maxim în rețele de trasnsport au multiple aplicații practice. Câteva exemple de aplicații sunt: | ||
- | |||
- | * Modelarea unei rețele de transport (canalizare, curent, petrol etc). | ||
- | * Planificarea zborurilor pentru avioane. | ||
- | * Segmentarea imaginilor. | ||
- | * Calcul clasamente (de exemplu, la baseball). | ||
- | |||
====== Maximum flow problem ====== | ====== Maximum flow problem ====== | ||
Line 75: | Line 64: | ||
> **Flux** / **flow**: O funcție $f: V x V -> R$ se numește funcție de flux într-o rețea de transport $G = (V, E)$ dacă respectă următoarele 3 proprietăți: | > **Flux** / **flow**: O funcție $f: V x V -> R$ se numește funcție de flux într-o rețea de transport $G = (V, E)$ dacă respectă următoarele 3 proprietăți: | ||
- | |||
- | |||
- | |||
- | |||
- **restricție de capacitate** - $f(u, v) \leq c(u, v), \forall u,v \in V$; | - **restricție de capacitate** - $f(u, v) \leq c(u, v), \forall u,v \in V$; | ||
- | + | - **antisimetrie** - $f(u, v) = - f(v, u), \forall u,v \in V$; | |
- | + | - **conservare** - $\sum f(u, v) = 0, \forall u \in V \ {S, T}, \forall v \in V$. | |
- | + | ||
- | + | ||
- | + | ||
- | <ol start="2" style="list-style-type: decimal;"> | + | |
- | <li>**antisimetrie** - $f(u, v) = - f(v, u), \forall u,v \in V$;</li></ol> | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | <ol start="3" style="list-style-type: decimal;"> | + | |
- | <li>**conservare** - $\sum f(u, v) = 0, \forall u \in V \ {S, T}, \forall v \in V$.</li></ol> | + | |
<spoiler Exemplu> | <spoiler Exemplu> | ||
Line 225: | Line 198: | ||
[0] Chapters **Maximum Flow**, “Introduction to Algorithms”, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein. | [0] Chapters **Maximum Flow**, “Introduction to Algorithms”, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein. | ||
- | ===== [Studiu de caz] k surse / p destinații ===== | ||
- | **Maximum flow problem** se poate existe considerând **k** surse și **p** destinații în aceeași rețea **G**. Scopul este ca să se transporte o cantitate maximă de flux total de la sursele $S_1, S_2, ... S_k$ la terminalele $T_1, T_2, ..., T_p$. | ||
- | |||
- | Soluția este asemănătoare ca în cazul **shortest paths-problem multiple sources/destinations**, adică se adaugă o sursă și o destinație fictive, care se vor lega de graful curent prin arce speciale . | ||
- | |||
- | <spoiler Exemplu> | ||
- | |||
- | {{https://ocw.cs.pub.ro/courses/_media/pa/new_pa/lab12-multiple-sources-sinks.png?512| Exemplu}} | ||
- | |||
- | În exemplul atașat, avem o **rețea de transport** cu k surse și p terminale. Putem simplifica această problemă construind o rețea **G’** astfel: | ||
- | |||
- | * Se adaugă un nod fictiv **S** pe care îl unim de fiecare dintre cele **k** surse inițiale prin arce de capacitate infinită (ca în figură). | ||
- | * Se adaugă un nod fictiv **T** pe care îl unim de fiecare dintre cele **p** terminale inițiale prin arce de capacitate infinită (ca în figură). | ||
- | * În noua rețea **G’** considerăm o unică sursă **S** și un unic terminal **T**. | ||
- | * Aplicăm un algoritm de determinare flux maxim în rețeaua **G’**. Fluxul de pe arce de la finalul algoritmului va reprezenta flux maxim și în rețeaua inițială **G**. | ||
- | |||
- | </spoiler> \\ | ||
- | |||
- | |||
- | ===== Maximum flow: variants ===== | ||
- | |||
- | Există o variantă puțin modificată a problemei curente - dacă pe muchii avem pe lângă capacitate și un cost asociat? | ||
- | |||
- | În acest caz, ne interesează să găsim un **flux maxim de cost minim** (**maximum flow minimum cost**). Problema se rezolvă în mod similar - de exemplu, algoritmul Edmonds-Karp rămăne aproximativ același, dar în locul algoritmului BFS, folosește Dijkstra pentru a determina drumurile de ameliorare. | ||
- | |||
- | ===== Referințe ===== | ||
- | |||
- | [0] Chapters **Maximum Flow**, “Introduction to Algorithms”, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein. | ||