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 Lema 9.4 Em cada iteração, o fluxo aumenta ao menos 1. Prova. O caminho s–t possui por definição do grafo residual uma capacidade “gargalo” g(f, P ) > 0. O fluxo f(s) aumenta exatamente g(f, P ). Lema 9.5 O número de iterações do algoritmo Ford-Fulkerson é limitado por C = e∈δ + (s) ce. Portanto ele tem complexidade O((n + m)C). Prova. C é um limite superior do fluxo máximo. Como o fluxo inicialmente possui valor 0 e aumenta ao menos 1 por iteração, o algoritmo de Ford-Fulkerson termina em no máximo C iterações. Em cada iteração temos que achar um caminho s–t em Gf . Representando G por listas de adjacência, isso é possível em tempo O(n+m) usando uma busca por profundidade. O aumento do fluxo precisa tempo O(n) e a atualização do grafo residual é possível em O(m), visitando todos arcos. Corretude do algoritmo de Ford-Fulkerson Definição 9.2 Seja ¯ X := V \ X. Escrevemos F (X, Y ) := {(x, y) | x ∈ X, y ∈ Y } para os arcos passando do conjunto X para Y . O fluxo de X para Y é f(X, Y ) := e∈F (X,Y ) fe. Ainda estendemos a notação do fluxo total de um vértice (9.1) para conjuntos: f(X) := f(X,¯X) − f(¯X, X) é o fluxo neto do saindo do conjunto X. Analogamente, escrevemos para as capacidades c(X, Y ) := e∈F (X,Y ) ce. Uma partição (X, ¯ X) é um corte s–t, se s ∈ X e t ∈ ¯ X. Um arco e se chama saturado para um fluxo f, caso fe = ce. Lema 9.6 Para qualquer corte (X, ¯ X) temos f(X) = f(s). Prova. f(X) = f(X,¯X) − f(¯X, X) = f(v) = f(s). (O último passo é correto, porque para todo v ∈ X, v = s, temos f(v) = 0 pela conservação do fluxo.) v∈X Lema 9.7 O valor c(X, ¯ X) de um corte s–t é um limite superior para um fluxo s–t. 202
Prova. Seja f um fluxo s–t. Temos 9.1. Fluxos em redes f(s) = f(X) = f(X,¯X) − f(¯X, X) ≤ f(X,¯X) ≤ c(X,¯X). Consequência: O fluxo máximo é menor ou igual a o corte mínimo. De fato, a relação entre o fluxo máximo e o corte mínimo é mais forte: Teorema 9.1 (Fluxo máximo – corte mínimo) O valor do fluxo máximo entre dois vértices s e t é igual a do corte mínimo. Lema 9.8 Quando o algoritmo de Ford-Fulkerson termina, o valor do fluxo é máximo. Prova. O algoritmo termina se não existe um caminho entre s e t em Gf . Podemos definir um corte (X, ¯ X), tal que X é o conjunto de vértices alcançáveis em Gf a partir de s. Qual o valor do fluxo nos arcos entre X e ¯ X? Para um arco e ∈ F (X, ¯ X) temos fe = ce, senão Gf terá um arco “forward” e, uma contradição. Para um arco e = (u, v) ∈ F (¯X, X) temos fe = 0, senão Gf terá um arco “backward” e ′ = (v, u), uma contradição. Logo f(s) = f(X) = f(X,¯X) − f(¯X, X) = f(X,¯X) = c(X,¯X). Pelo lema 9.7, o valor de um fluxo arbitrário é menor ou igual que c(X, ¯ X), portanto f é um fluxo máximo. Prova. (Do teorema 9.1) Pela análise do algoritmo de Ford-Fulkerson. Desvantagens do algoritmo de Ford-Fulkerson O algoritmo de Ford-Fulkerson tem duas desvantagens: 1. O número de iterações C pode ser alto, e existem grafos em que C iterações são necessárias (veja Fig. 9.4). Além disso, o algoritmo com complexidade O((n + m)C) é somente pseudo-polinomial. 2. É possível que o algoritmo não termina para capacidades reais (veja Fig. 9.4). Usando uma busca por profundidade para achar caminhos s–t ele termina, mas é ineficiente [17]. 9.1.2. O algoritmo de Edmonds-Karp O algoritmo de Edmonds-Karp elimina esses problemas. O princípio dele é simples: Para achar um caminho s–t simples, usa busca por largura, i.e. selecione o caminho mais curto entre s e t. Nos temos (sem prova) 203
- 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 and 200: 9. Algoritmos em grafos 197
- Page 201 and 202: 9.1. Fluxos em redes A circulação
- Page 203: + + − + Figura 9.3.: Manter a con
- 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
- Page 250 and 251: 11. Do algoritmo ao problema Decibi
- Page 253 and 254: 12. Classes de complexidade 12.1. D
Prova. Seja f um fluxo s–t. Temos<br />
9.1. Fluxos em re<strong>de</strong>s<br />
f(s) = f(X) = f(X,¯X) − f(¯X, X) ≤ f(X,¯X) ≤ c(X,¯X).<br />
<br />
Consequência: O fluxo máximo é menor ou igual a o corte mínimo. De fato,<br />
a relação entre o fluxo máximo e o corte mínimo é mais forte:<br />
Teorema 9.1 (Fluxo máximo – corte mínimo)<br />
O valor do fluxo máximo entre dois vértices s e t é igual a do corte mínimo.<br />
Lema 9.8<br />
Quando o algoritmo <strong>de</strong> Ford-Fulkerson termina, o valor do fluxo é máximo.<br />
Prova. O algoritmo termina se não existe um caminho entre s e t em Gf . Po<strong>de</strong>mos<br />
<strong>de</strong>finir um corte (X, ¯ X), tal que X é o conjunto <strong>de</strong> vértices alcançáveis<br />
em Gf a partir <strong>de</strong> s. Qual o valor do fluxo nos arcos entre X e ¯ X? Para um<br />
arco e ∈ F (X, ¯ X) temos fe = ce, senão Gf terá um arco “forward” e, uma<br />
contradição. Para um arco e = (u, v) ∈ F (¯X, X) temos fe = 0, senão Gf terá<br />
um arco “backward” e ′ = (v, u), uma contradição. Logo<br />
f(s) = f(X) = f(X,¯X) − f(¯X, X) = f(X,¯X) = c(X,¯X).<br />
Pelo lema 9.7, o valor <strong>de</strong> um fluxo arbitrário é menor ou igual que c(X, ¯ X),<br />
portanto f é um fluxo máximo. <br />
Prova. (Do teorema 9.1) Pela análise do algoritmo <strong>de</strong> Ford-Fulkerson. <br />
Desvantagens do algoritmo <strong>de</strong> Ford-Fulkerson O algoritmo <strong>de</strong> Ford-Fulkerson<br />
tem duas <strong>de</strong>svantagens:<br />
1. O número <strong>de</strong> iterações C po<strong>de</strong> ser alto, e existem grafos em que C<br />
iterações são necessárias (veja Fig. 9.4). Além disso, o algoritmo com<br />
<strong>complexida<strong>de</strong></strong> O((n + m)C) é somente pseudo-polinomial.<br />
2.<br />
É possível que o algoritmo não termina para capacida<strong>de</strong>s reais (veja<br />
Fig. 9.4). Usando uma busca por profundida<strong>de</strong> para achar caminhos s–t<br />
ele termina, mas é ineficiente [17].<br />
9.1.2. O algoritmo <strong>de</strong> Edmonds-Karp<br />
O algoritmo <strong>de</strong> Edmonds-Karp elimina esses problemas. O princípio <strong>de</strong>le é<br />
simples: Para achar um caminho s–t simples, usa busca por largura, i.e. selecione<br />
o caminho mais curto entre s e t. Nos temos (sem prova)<br />
203