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 2. O início e termino de Q é livre em M: eles não pertencem a P , porque são livres em M ′ . 3. Nenhum outro vértice de P ou Q é livre em relação a M: P só contém dois vértices livres e Q só contém dois vértices livres em Q mas não em P . 4. Temos dois caminhos M-aumentantes, começando com um vértice livre em Q e terminando com um vértice livre em P . O caminho em Q \ P é M-alternante, porque as arestas livres em M ′ são exatamente as arestas livres em M. O caminho Q entra em P sempre após uma aresta livre em M, porque o primeiro vértice em P já é emparelhado em M e sai de P sempre antes de uma aresta livre em M, porque o último vértice em P já é emparelhado. Portanto os dois caminhos em P ⊕ Q são Maumentantes. Os dois caminhos M-aumentantes em P ⊕ Q tem que ser maiores que |P |. Com isso temos |P ⊕ Q| ≥ 2|P | e |Q| = |P ⊕ Q| + 2|P ∩ Q ⊢ |P | ≥ |P | + 2|P ∩ Q|. Prova. (do lema 9.14). Seja S o conjunto de caminhos M-aumentantes da fase anterior, e P um caminho aumentante. Caso P é disjunto de todos caminhos em S, ele deve ser mais comprido, porque S é um conjunto máximo de caminhos aumentantes. Caso P possui um vértice em comum com algum caminho em S, ele possui também um arco em comum (por quê?) e podemos aplicar lema 9.16. Prova. (do lema 9.15). Seja M ∗ um emparelhamento máximo e M o emparelhamento obtido após de √ n/2 fases. O comprimento de qualquer caminho M-aumentante é no mínimo √ n, pelo lema 9.14. Pelo teorema 9.8 existem ao menos |M ∗ ⊢ |M| caminhos M-aumentantes disjuntos. Mas então |M ∗ ⊢ |M| ≤ √ n, porque no caso contrário eles possuem mais que n vértices em total. Como o emparelhamento cresce ao menos um em cada fase, o algoritmo executar no máximo mais √ n fases. Portanto, o número total de fases é O( √ n). O algoritmo de Hopcroft-Karp é o melhor algoritmo conhecido para encontrar emparelhamentos máximos em grafos bipartidos não-ponderados 1 . Para subclasses de grafos bipartidos existem algoritmos melhores. Por exemplo, existe um algoritmo randomizado para grafos bipartidos regulares com complexidade de tempo esperado O(n log n) [30]. 1 Feder e Motwani [23, 24] melhoraram o algoritmo para O( √ nm(2 − logn m)). 222
9.2. Emparelhamentos Sobre a implementação A seguir supomos que o conjunto . de vértices é V = [1, n] e um grafo G = (V, E) bi-partido com partição V1 ∪ V2. Podemos representar um emparelhamento usando um vetor mate, que contém, para cada vértice emparelhado, o índice do vértice vizinho, e 0 caso o vértice é livre. O núcleo de uma implementação do algoritmo de Hopcroft e Karp é descrito na observação 9.8: ele consiste em uma busca por largura até encontrar um ou mais caminhos M-alternantes mínimos e depois uma fase que extrai do DAG definido pela busca um conjunto máximo de caminhos disjuntos (de vértices). A busca por largura começa com todos vértices livres em V1. Usamos um vetor H para marcar os arcos que fazem parte do DAG definido pela busca por largura2 e um vetor m para marcar os vértices visitados. 1 s e a r c h p a t h s (M ) := 2 for a l l v ∈ V do mv := false 3 for a l l e ∈ E do He := false 4 5 U1 := {v ∈ V1 | v livre} 6 7 do 8 { determina vizinhos em U2 via arestas l i v r e s } 9 U2 := ∅ 10 for a l l u ∈ U1 do 11 mu := true 12 for a l l uv ∈ E , uv ∈ M do 13 i f not mv then 14 Huv := true 15 U2 := U2 ∪ v 16 end i f 17 end for 18 end for 19 20 { determina vizinhos em U1 via arestas emparelhadas } 21 found := f a l s e { ao menos um caminho encontrado? } 22 U1 := ∅ 23 for a l l u ∈ U2 do 24 mu := true 25 i f (u l i v r e ) then 26 found := true 27 else 2 H, porque o DAG se chama árvore húngara na literatura. 223
- 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 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: 9.2. Emparelhamentos não sabemos c
- 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
- Page 255 and 256: 12.2. Hierarquias básicas Prova. (
- Page 257 and 258: 12.2. Hierarquias básicas 1. Temos
- Page 259: 12.3. Exercícios 12.3. Exercícios
- Page 262 and 263: 13. Teoria de NP-completude • Int
- Page 264 and 265: 13. Teoria de NP-completude C-≤-d
- Page 266 and 267: 13. Teoria de NP-completude Ladrilh
- Page 268 and 269: 13. Teoria de NP-completude (q, a)
- Page 270 and 271: 13. Teoria de NP-completude Sejam c
- Page 272 and 273: 13. Teoria de NP-completude Decisã
9. <strong>Algoritmos</strong> em grafos<br />
2. O início e termino <strong>de</strong> Q é livre em M: eles não pertencem a P , porque<br />
são livres em M ′ .<br />
3. Nenhum outro vértice <strong>de</strong> P ou Q é livre em relação a M: P só contém<br />
dois vértices livres e Q só contém dois vértices livres em Q mas não em<br />
P .<br />
4. Temos dois caminhos M-aumentantes, começando com um vértice livre<br />
em Q e terminando com um vértice livre em P . O caminho em Q \ P é<br />
M-alternante, porque as arestas livres em M ′ são exatamente as arestas<br />
livres em M. O caminho Q entra em P sempre após uma aresta livre<br />
em M, porque o primeiro vértice em P já é emparelhado em M e sai<br />
<strong>de</strong> P sempre antes <strong>de</strong> uma aresta livre em M, porque o último vértice<br />
em P já é emparelhado. Portanto os dois caminhos em P ⊕ Q são Maumentantes.<br />
Os dois caminhos M-aumentantes em P ⊕ Q tem que ser maiores que |P |.<br />
Com isso temos |P ⊕ Q| ≥ 2|P | e<br />
|Q| = |P ⊕ Q| + 2|P ∩ Q ⊢ |P | ≥ |P | + 2|P ∩ Q|.<br />
<br />
Prova. (do lema 9.14). Seja S o conjunto <strong>de</strong> caminhos M-aumentantes<br />
da fase anterior, e P um caminho aumentante. Caso P é disjunto <strong>de</strong> todos<br />
caminhos em S, ele <strong>de</strong>ve ser mais comprido, porque S é um conjunto máximo<br />
<strong>de</strong> caminhos aumentantes. Caso P possui um vértice em comum com algum<br />
caminho em S, ele possui também um arco em comum (por quê?) e po<strong>de</strong>mos<br />
aplicar lema 9.16. <br />
Prova. (do lema 9.15). Seja M ∗ um emparelhamento máximo e M o emparelhamento<br />
obtido após <strong>de</strong> √ n/2 fases. O comprimento <strong>de</strong> qualquer caminho<br />
M-aumentante é no mínimo √ n, pelo lema 9.14. Pelo teorema 9.8<br />
existem ao menos |M ∗ ⊢ |M| caminhos M-aumentantes disjuntos. Mas então<br />
|M ∗ ⊢ |M| ≤ √ n, porque no caso contrário eles possuem mais que n vértices<br />
em total. Como o emparelhamento cresce ao menos um em cada fase, o algoritmo<br />
executar no máximo mais √ n fases. Portanto, o número total <strong>de</strong> fases<br />
é O( √ n). <br />
O algoritmo <strong>de</strong> Hopcroft-Karp é o melhor algoritmo conhecido para encontrar<br />
emparelhamentos máximos em grafos bipartidos não-pon<strong>de</strong>rados 1 . Para subclasses<br />
<strong>de</strong> grafos bipartidos existem algoritmos melhores. Por exemplo, existe<br />
um algoritmo randomizado para grafos bipartidos regulares com <strong>complexida<strong>de</strong></strong><br />
<strong>de</strong> tempo esperado O(n log n) [30].<br />
1 Fe<strong>de</strong>r e Motwani [23, 24] melhoraram o algoritmo para O( √ nm(2 − logn m)).<br />
222