Algoritmos e complexidade Notas de aula - Arquivo Escolar
Algoritmos e complexidade Notas de aula - Arquivo Escolar Algoritmos e complexidade Notas de aula - Arquivo Escolar
9. Algoritmos em grafos Figura 9.1.: Grafo (esquerda) com circulação (direita) 9.1. Fluxos em redes Definição 9.1 Para um grafo direcionado G = (V, E) (E ⊆ V × V ) escrevemos δ + (v) = {(v, u) | (v, u) ∈ E} para os arcos saintes de v e δ − (v) = {(u, v) | (u, v) ∈ E} para os arcos entrantes em v. Seja G = (V, E, c) um grafo direcionado e capacitado com capacidades c : E → R nos arcos. Uma atribuição de fluxos aos arcos f : E → R em G se chama circulação, se os fluxos respeitam os limites da capacidade (fe ≤ ce) e satisfazem a conservação do fluxo f(v) := fe − fe = 0 (9.1) (ver Fig. 9.1). e∈δ + (v) e∈δ − (v) Lema 9.1 Qualquer atribuição de fluxos f satisfaz v∈V f(v) = 0. Prova. 198 f(v) = v∈V v∈V e∈δ + (v) = (v,u)∈E fe − e∈δ − (v) f (v,u) − (u,v)∈E fe f (u,v) = 0
9.1. Fluxos em redes A circulação vira um fluxo, se o grafo possui alguns vértices que são fontes ou destinos de fluxo, e portanto não satisfazem a conservação de fluxo. Um fluxo s–t possui um único fonte s e um único destino t. Um objetivo comum (transporte, etc.) é achar um fluxo s–t máximo. Fluxo s–t máximo Instância Grafo direcionado G = (V, E, c) com capacidades c nos arcos, um vértice origem s ∈ V e um vértice destino t ∈ V . Solução Um fluxo f, com f(v) = 0, ∀v ∈ V \ {s, t}. Objetivo Maximizar o fluxo f(s). Lema 9.2 Um fluxo s–t satisfaz f(s) + f(t) = 0. Prova. Pelo lema 9.1 temos v∈V f(v) = 0. Mas v∈V f(v) = f(s) + f(t) pela conservação de fluxo nos vértices em V \ {s, t}. Uma formulação como programa linear é maximiza f(s) (9.2) sujeito a f(v) = 0 ∀v ∈ V \ {s, t} 0 ≤ fe ≤ ce ∀e ∈ E. Observação 9.1 O programa (9.2) possui uma solução, porque fe = 0 é uma solução viável. O sistema não é ilimitado, porque todas variáveis são limitadas, e por isso possui uma solução ótima. O problema de encontrar um fluxo s–t máximo pode ser resolvido em tempo polinomial via programação linear. ♦ 9.1.1. Algoritmo de Ford-Fulkerson Nosso objetivo: Achar um algoritmo combinatorial mais eficiente. Idéia básica: Começar com um fluxo viável fe = 0 e aumentar ele gradualmente. 199
- Page 149 and 150: 6.3. Algoritmos usando divisão e c
- Page 151 and 152: unidade. Em total a avaliação pro
- Page 153: 3. T (n) = 3T (n/4) + n log n 4. T
- Page 156 and 157: 7. Árvores de busca, backtracking
- Page 158 and 159: 7. Árvores de busca, backtracking
- Page 160 and 161: 7. Árvores de busca, backtracking
- Page 162 and 163: 7. Árvores de busca, backtracking
- Page 164 and 165: 7. Árvores de busca, backtracking
- Page 166 and 167: 7. Árvores de busca, backtracking
- Page 168 and 169: 7. Árvores de busca, backtracking
- Page 170 and 171: 7. Árvores de busca, backtracking
- Page 172 and 173: 7. Árvores de busca, backtracking
- Page 174 and 175: 7. Árvores de busca, backtracking
- Page 176 and 177: 7. Árvores de busca, backtracking
- Page 178 and 179: 7. Árvores de busca, backtracking
- Page 180 and 181: 8. Algoritmos de aproximação Clas
- Page 182 and 183: 8. Algoritmos de aproximação Exem
- Page 184 and 185: 8. Algoritmos de aproximação - Te
- Page 186 and 187: 8. Algoritmos de aproximação O qu
- Page 188 and 189: 8. Algoritmos de aproximação Como
- Page 190 and 191: 8. Algoritmos de aproximação decr
- Page 192 and 193: 8. Algoritmos de aproximação •
- Page 194 and 195: 8. Algoritmos de aproximação Apro
- Page 196 and 197: 8. Algoritmos de aproximação 12(l
- Page 199: 9. Algoritmos em grafos 197
- Page 203 and 204: + + − + Figura 9.3.: Manter a con
- Page 205 and 206: Prova. Seja f um fluxo s-t. Temos 9
- Page 207 and 208: 9.1. Fluxos em redes aumentou nessa
- Page 209 and 210: 9.1. Fluxos em redes Figura 9.5.: R
- Page 211 and 212: V ′ = V ∪ {s ∗ , t ∗ } 9.1.
- Page 213 and 214: s 30 19 12 i 10 10 j 10 10 10 1010
- Page 215 and 216: Solução Um fluxo s-t f com valor
- Page 217 and 218: Objetivo Minimiza o valor c(M) de M
- Page 219 and 220: 9.2. Emparelhamentos Teorema 9.4 (B
- Page 221 and 222: 9.2. Emparelhamentos V1 e V2 com fl
- Page 223 and 224: 9.2. Emparelhamentos não sabemos c
- Page 225 and 226: 9.2. Emparelhamentos Sobre a implem
- Page 227 and 228: 9.2. Emparelhamentos reduzir o prob
- Page 229 and 230: v10 v9 v1 v8 v2 v3 v7 v6 v4 v5 v10
- Page 231 and 232: 10. Algoritmos de aproximação (As
- Page 233 and 234: 2 2 10.2. Aproximações para o PCV
- Page 235 and 236: 10.3. Algoritmos de aproximação p
- Page 237 and 238: 10.3. Algoritmos de aproximação p
- Page 239: Parte IV. Teoria de complexidade 23
- Page 242 and 243: 11. Do algoritmo ao problema Modelo
- Page 244 and 245: 11. Do algoritmo ao problema - entr
- Page 246 and 247: 11. Do algoritmo ao problema Lingua
- Page 248 and 249: 11. Do algoritmo ao problema Observ
9.1. Fluxos em re<strong>de</strong>s<br />
A circulação vira um fluxo, se o grafo possui alguns vértices que são fontes<br />
ou <strong>de</strong>stinos <strong>de</strong> fluxo, e portanto não satisfazem a conservação <strong>de</strong> fluxo. Um<br />
fluxo s–t possui um único fonte s e um único <strong>de</strong>stino t. Um objetivo comum<br />
(transporte, etc.) é achar um fluxo s–t máximo.<br />
Fluxo s–t máximo<br />
Instância Grafo direcionado G = (V, E, c) com capacida<strong>de</strong>s c nos arcos,<br />
um vértice origem s ∈ V e um vértice <strong>de</strong>stino t ∈ V .<br />
Solução Um fluxo f, com f(v) = 0, ∀v ∈ V \ {s, t}.<br />
Objetivo Maximizar o fluxo f(s).<br />
Lema 9.2<br />
Um fluxo s–t satisfaz f(s) + f(t) = 0.<br />
Prova. Pelo lema 9.1 temos <br />
<br />
v∈V f(v) = 0. Mas v∈V f(v) = f(s) + f(t)<br />
pela conservação <strong>de</strong> fluxo nos vértices em V \ {s, t}. <br />
Uma formulação como programa linear é<br />
maximiza f(s) (9.2)<br />
sujeito a f(v) = 0 ∀v ∈ V \ {s, t}<br />
0 ≤ fe ≤ ce<br />
∀e ∈ E.<br />
Observação 9.1<br />
O programa (9.2) possui uma solução, porque fe = 0 é uma solução viável. O<br />
sistema não é ilimitado, porque todas variáveis são limitadas, e por isso possui<br />
uma solução ótima. O problema <strong>de</strong> encontrar um fluxo s–t máximo po<strong>de</strong> ser<br />
resolvido em tempo polinomial via programação linear. ♦<br />
9.1.1. Algoritmo <strong>de</strong> Ford-Fulkerson<br />
Nosso objetivo: Achar um algoritmo combinatorial mais eficiente. Idéia<br />
básica: Começar com um fluxo viável fe = 0 e aumentar ele gradualmente.<br />
199