This shows you the differences between two versions of the page.
pa:laboratoare:maximum-flow-problem [2022/05/23 10:54] darius.neatu created |
pa:laboratoare:maximum-flow-problem [2022/05/24 16:01] (current) darius.neatu |
||
---|---|---|---|
Line 20: | Line 20: | ||
- | > **Rețea de transport** / **flow network**: Este un graf orientat $G = (V, E)$ care respectă următoarele 3 proprietăți: 1) există două noduri speciale **S** (numit **sursă** / **source**) și **T** (numit **terminal** / **destinație** / **sink**); 2) există o funcție de capacitate $c: V x V -> R_{+}$ astfel încât $c(u, v) >= 0$ dacă arcul $(u, v)$ există, altfel $c(u, v) = 0$; 3) pentru orice nod $v \in V \setminus \{S, T\}$ există cel puțin o cale $S -> ... -> v -> ... T$. | + | > **Rețea de transport** / **flow network**: Este un graf orientat $G = (V, E)$ care respectă următoarele 3 proprietăți: |
+ | |||
+ | - există două noduri speciale **S** (numit **sursă** / **source**) și **T** (numit **terminal** / **destinație** / **sink**); | ||
+ | - există o funcție de capacitate $c: V x V -> R_{+}$ astfel încât $c(u, v) >= 0$ dacă arcul $(u, v)$ există, altfel $c(u, v) = 0$; | ||
+ | - pentru orice nod $v \in V \setminus \{S, T\}$ există cel puțin o cale $S -> ... -> v -> ... T$. | ||
<note> | <note> | ||
- | Într-o rețea avem 2 noduri speciale. Vom vedea că S joacă rol de producător, iar T de consumator. | + | Într-o rețea avem 2 noduri speciale. Vom vedea că **S** joacă rol de **producător**, iar **T** de **consumator**. |
În plus, pentru simplitate, vom dori ca în graf să nu avem **self-loops**. | În plus, pentru simplitate, vom dori ca în graf să nu avem **self-loops**. | ||
Line 59: | Line 63: | ||
- | > **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: 1) **restricție de capacitate** - $f(u, v) \leq c(u, v), \forall u,v \in V$; 2) **antisimetrie** - $f(u, v) = - f(v, u), \forall u,v \in V$; 3) **conservare** - $\sum f(u, v) = 0, \forall u \in V \ {S, T}, \forall v \in V$. | + | > **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$; | ||
+ | - **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$. | ||
<spoiler Exemplu> | <spoiler Exemplu> | ||
Line 97: | Line 105: | ||
Spunem că fluxul total prin rețea este $f = 1 + 2 + 3 = 6$ (6 unități de flux circulă de la sursa S la terminalul T prin rețeaua G). | Spunem că fluxul total prin rețea este $f = 1 + 2 + 3 = 6$ (6 unități de flux circulă de la sursa S la terminalul T prin rețeaua G). | ||
- | Observăm că pe drumurile $1 -> 4 -> 7$ / $1 -> 3 -> 6- > 7$ se mai poate pompa flux în plus. Deducem atunci că funcția de flux din figura anterioară nu reprezintă flux maxim! | + | Observăm că pe drumurile $1 -> 4 -> 7$ și $1 -> 3 -> 6- > 7$ se mai poate pompa flux în plus. Deducem atunci că funcția de flux din figura anterioară nu reprezintă flux maxim! |
Un exemplu de flux maxim găsim în figura următoare: {{https://ocw.cs.pub.ro/courses/_media/pa/new_pa/lab12-maximum-flow-example.png?512| Exemplu}} | Un exemplu de flux maxim găsim în figura următoare: {{https://ocw.cs.pub.ro/courses/_media/pa/new_pa/lab12-maximum-flow-example.png?512| Exemplu}} | ||
Line 136: | Line 144: | ||
* Inițial, fluxul are valorile 0 peste tot în rețea. | * Inițial, fluxul are valorile 0 peste tot în rețea. | ||
* Enumerăm toate **drumurile de ameliorare** din rețeaua curentă: | * Enumerăm toate **drumurile de ameliorare** din rețeaua curentă: | ||
- | * $1 - 2 - 5 - 10$: capacitatea sa reziduală este valoarea minimă dintre $3 - 0, 2 - 0, 1 - 0$, adică **1** (pe acest drum se mai poate pompa în plus o unitate de flux). | + | * $1 - 2 - 5 - 7$: capacitatea sa reziduală este valoarea minimă dintre $3 - 0, 2 - 0, 1 - 0$, adică **1** (pe acest drum se mai poate pompa în plus o unitate de flux). |
- | * $1 - 2 - 5 - 6 - 10$: capacitatea sa reziduală este valoarea minimă dintre $3 - 0, 2 - 0, 1 - 0, 3 - 0$, adică **1** (pe acest drum se mai poate pompa în plus o unitate de flux). | + | * $1 - 2 - 5 - 6 - 7$: capacitatea sa reziduală este valoarea minimă dintre $3 - 0, 2 - 0, 1 - 0, 3 - 0$, adică **1** (pe acest drum se mai poate pompa în plus o unitate de flux). |
- | * $1 - 2 - 6 - 10$: capacitatea sa reziduală este valoarea minimă dintre $3 - 0, 1 - 0, 3 - 0$, adică **1** (pe acest drum se mai poate pompa în plus o unitate de flux). | + | * $1 - 2 - 6 - 7$: capacitatea sa reziduală este valoarea minimă dintre $3 - 0, 1 - 0, 3 - 0$, adică **1** (pe acest drum se mai poate pompa în plus o unitate de flux). |
- | * $1 - 3 - 6 - 10$: capacitatea sa reziduală este valoarea minimă dintre $2 - 0, 5 - 0, 3 - 0$, adică **2** (pe acest drum se mai poate pompa în plus încă 2 unități de flux). | + | * $1 - 3 - 6 - 7$: capacitatea sa reziduală este valoarea minimă dintre $2 - 0, 5 - 0, 3 - 0$, adică **2** (pe acest drum se mai poate pompa în plus încă 2 unități de flux). |
- | * $1 - 4 - 6 - 10$: capacitatea sa reziduală este valoarea minimă dintre $5 - 0, 1 - 0, 3 - 0$, adică **1** (pe acest drum se mai poate pompa în plus încă o unitate de flux). | + | * $1 - 4 - 6 - 7$: capacitatea sa reziduală este valoarea minimă dintre $5 - 0, 1 - 0, 3 - 0$, adică **1** (pe acest drum se mai poate pompa în plus încă o unitate de flux). |
- | * $1 - 4 - 10$: capacitatea sa reziduală este valoarea minimă dintre $5 - 0, 10 - 0$, adică **5** (pe acest drum se mai poate pompa în plus încă 5 unități de flux). | + | * $1 - 4 - 7$: capacitatea sa reziduală este valoarea minimă dintre $5 - 0, 10 - 0$, adică **5** (pe acest drum se mai poate pompa în plus încă 5 unități de flux). |
**Alegem** drumul $1 - 4 - 7$ pe care pompăm **5** unități de flux. Muchia $(1, 4)$ devinde saturată (**5/5** - capacitate reziduală **5 - 5 = 0**, prin urmare o putem șterge din rețea). Obținem rețeaua reziduală din figura următoare: | **Alegem** drumul $1 - 4 - 7$ pe care pompăm **5** unități de flux. Muchia $(1, 4)$ devinde saturată (**5/5** - capacitate reziduală **5 - 5 = 0**, prin urmare o putem șterge din rețea). Obținem rețeaua reziduală din figura următoare: | ||
Line 189: | Line 197: | ||
[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. | ||
+ | |||
+ | |||