Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar Algoritmos e complexidade Notas de aula - Arquivo Escolar

arquivoescolar.org
from arquivoescolar.org More from this publisher
13.04.2013 Views

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

9. <strong>Algoritmos</strong> em grafos<br />

Figura 9.1.: Grafo (esquerda) com circulação (direita)<br />

9.1. Fluxos em re<strong>de</strong>s<br />

Definição 9.1<br />

Para um grafo direcionado G = (V, E) (E ⊆ V × V ) escrevemos δ + (v) =<br />

{(v, u) | (v, u) ∈ E} para os arcos saintes <strong>de</strong> v e δ − (v) = {(u, v) | (u, v) ∈ E}<br />

para os arcos entrantes em v.<br />

Seja G = (V, E, c) um grafo direcionado e capacitado com capacida<strong>de</strong>s c :<br />

E → R nos arcos. Uma atribuição <strong>de</strong> fluxos aos arcos f : E → R em G se<br />

chama circulação, se os fluxos respeitam os limites da capacida<strong>de</strong> (fe ≤ ce) e<br />

satisfazem a conservação do fluxo<br />

f(v) := <br />

fe − <br />

fe = 0 (9.1)<br />

(ver Fig. 9.1).<br />

e∈δ + (v)<br />

e∈δ − (v)<br />

Lema 9.1<br />

Qualquer atribuição <strong>de</strong> fluxos f satisfaz <br />

v∈V f(v) = 0.<br />

Prova.<br />

198<br />

<br />

f(v) = <br />

v∈V<br />

<br />

v∈V e∈δ + (v)<br />

= <br />

(v,u)∈E<br />

fe − <br />

e∈δ − (v)<br />

f (v,u) − <br />

(u,v)∈E<br />

fe<br />

f (u,v) = 0

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!