Algoritmos e complexidade Notas de aula Marcus Ritt com contribui¸co˜es de Edson Prestes e Luciana Buriol 16 de Maio de 2012 Conteu´do I. An´alise de algoritmos 7 1. Introduc¸˜ao e conceitos b´asicos 9 1.1. Nota¸c˜ao assint´otica . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.2. Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.3. Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2. An´alise de complexidade 31 2.1. Introdu¸c˜ao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.2. Complexidade pessimista . . . . . . . . . . . . . . . . . . . . . 35 2.2.1. Metodologia de an´alise de complexidade . . . . . . . . . 35 2.2.2. Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.3. Complexidade m´edia . . . . . . . . . . . . . . . . . . . . . . . . 47 2.4. Outros t´ıpos de an´alise . . . . . . . . . . . . . . . . . . . . . . . 61 2.4.1. An´alise agregada . . . . . . . . . . . . . . . . . . . . . . 61 2.4.2. An´alise amortizada . . . . . . . . . . . . . . . . . . . . . 64 2.5. Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 2.6. Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 II. Projeto de algoritmos 71 3. Introduc¸˜ao 73 4. Algoritmos gulosos 75 4.1. Introdu¸c˜ao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 4.2. Algoritmos em grafos . . . . . . . . . . . . . . . . . . . . . . . . 78 4.2.1. A´rvores espalhadas m´ınimas . . . . . . . . . . . . . . . . 78 4.2.2. Caminhos mais curtos . . . . . . . . . . . . . . . . . . . 84 4.3. Algoritmos de sequ¨enciamento . . . . . . . . . . . . . . . . . . 85 4.4. To´picos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 4.5. Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 4.6. Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 1 Conteu´do 5. Programa¸c˜ao dinˆamica 95 5.1. Introdu¸c˜ao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 5.2. Compara¸c˜ao de sequˆencias . . . . . . . . . . . . . . . . . . . . . 98 5.2.1. Subsequˆencia comum mais longa . . . . . . . . . . . . . 98 5.2.2. Similaridade entre strings . . . . . . . . . . . . . . . . . 103 5.3. Problema da Mochila. . . . . . . . . . . . . . . . . . . . . . . . 105 5.4. Multiplica¸c˜ao de Cadeias de Matrizes. . . . . . . . . . . . . . . 107 5.5. T´opicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 5.5.1. Algoritmo de Floyd-Warshall . . . . . . . . . . . . . . . 109 5.5.2. Caixeiro viajante . . . . . . . . . . . . . . . . . . . . . . 111 5.5.3. Cobertura por conjuntos . . . . . . . . . . . . . . . . . . 113 5.5.4. Caminho mais longo . . . . . . . . . . . . . . . . . . . . 113 5.5.5. Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 5.6. Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 6. Divis˜ao e conquista 117 6.1. Introdu¸c˜ao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 6.2. Resolver recorrˆencias . . . . . . . . . . . . . . . . . . . . . . . . 119 6.2.1. M´etodo da substitui¸c˜ao . . . . . . . . . . . . . . . . . . 119 6.2.2. M´etodo da ´arvore de recurs˜ao . . . . . . . . . . . . . . . 125 6.2.3. M´etodo Mestre . . . . . . . . . . . . . . . . . . . . . . . 127 6.2.4. Um novo m´etodo Mestre. . . . . . . . . . . . . . . . . . 132 6.3. Algoritmos usando divis˜ao e conquista . . . . . . . . . . . . . . 133 6.3.1. O algoritmo de Strassen . . . . . . . . . . . . . . . . . . 133 6.3.2. Menor distˆancia . . . . . . . . . . . . . . . . . . . . . . 135 6.3.3. Selec¸˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 6.3.4. Convolu¸c˜oes . . . . . . . . . . . . . . . . . . . . . . . . . 138 6.4. Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 6.5. Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 7. A´rvores de busca, backtracking e branch-and-bound 145 7.1. Backtracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 7.1.1. Exemplo: O problema das n-rainhas . . . . . . . . . . . 147 7.1.2. Exemplo: Caixeiro viajante . . . . . . . . . . . . . . . . 149 7.1.3. Exemplo: Cobertura por v´ertices . . . . . . . . . . . . . 150 7.1.4. T´opicos . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 7.2. Branch-and-bound . . . . . . . . . . . . . . . . . . . . . . . . . 156 7.3. Analisar ´arvores de busca . . . . . . . . . . . . . . . . . . . . . 167 7.4. Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 7.5. Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 2 Conteu´do III. Estruturas de dados 171 8. Estruturas abstratas de dados 173 8.1. Exemplos de estruturas abstratos de dados . . . . . . . . . . . 173 9. Estruturas da dados elementares 177 9.1. Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 10.Dicion´arios 183 10.1.Listas skip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 10.2.A´rvores de busca . . . . . . . . . . . . . . . . . . . . . . . . . . 184 10.2.1. A´rvores bin´arias . . . . . . . . . . . . . . . . . . . . . . 185 10.2.2. Treaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 10.2.3. A´rvores bin´arias de busca ´otimas . . . . . . . . . . . . . 190 10.2.4. A´rvores rubro-negros . . . . . . . . . . . . . . . . . . . . 194 10.2.5. A´rvores AVL . . . . . . . . . . . . . . . . . . . . . . . . 202 10.2.6. A´rvores Splay . . . . . . . . . . . . . . . . . . . . . . . . 203 10.2.7. A´rvores (a,b) . . . . . . . . . . . . . . . . . . . . . . . . 204 10.2.8. A´rvores B . . . . . . . . . . . . . . . . . . . . . . . . . . 204 10.2.9. Tries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 11.Filas de prioridade e heaps 207 11.1.Filas de prioridade e heaps . . . . . . . . . . . . . . . . . . . . 207 11.1.1. Heaps bin´arios . . . . . . . . . . . . . . . . . . . . . . . 210 11.1.2. Heaps binomiais . . . . . . . . . . . . . . . . . . . . . . 213 11.1.3. Heaps Fibonacci . . . . . . . . . . . . . . . . . . . . . . 218 11.1.4. Rank-pairing heaps . . . . . . . . . . . . . . . . . . . . . 222 11.1.5. T´opicos . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 11.1.6. Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . 231 12.Tabelas hash 233 12.1.Hashing com listas encadeadas . . . . . . . . . . . . . . . . . . 233 12.2.Hashing com endere¸camento aberto. . . . . . . . . . . . . . . . 237 12.3.Cuco hashing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 12.4.Filtros de Bloom . . . . . . . . . . . . . . . . . . . . . . . . . . 241 13.Grafos 243 IV. Algoritmos 245 14.Algoritmos em grafos 247 3 Conteu´do 14.1.Fluxos em redes. . . . . . . . . . . . . . . . . . . . . . . . . . . 248 14.1.1. Algoritmo de Ford-Fulkerson . . . . . . . . . . . . . . . 249 14.1.2. O algoritmo de Edmonds-Karp . . . . . . . . . . . . . . 253 14.1.3. O algoritmo “caminho mais gordo” (“fattest path”) . . 255 14.1.4. Varia¸c˜oes do problema . . . . . . . . . . . . . . . . . . . 256 14.1.5. Aplicac¸˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . 261 14.1.6. Outros problemas de fluxo . . . . . . . . . . . . . . . . . 264 14.1.7. Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . 264 14.2.Emparelhamentos. . . . . . . . . . . . . . . . . . . . . . . . . . 266 14.2.1. Aplicac¸˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . 269 14.2.2. Grafos bi-partidos . . . . . . . . . . . . . . . . . . . . . 270 14.2.3. Emparelhamentos em grafos n˜ao-bipartidos . . . . . . . 281 14.2.4. Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . 282 15.Algoritmos de aproximac¸˜ao 283 15.1.Problemas, classes e reduc¸˜oes . . . . . . . . . . . . . . . . . . . 283 15.2.Medidas de qualidade . . . . . . . . . . . . . . . . . . . . . . . 284 15.3.T´ecnicas de aproxima¸c˜ao. . . . . . . . . . . . . . . . . . . . . . 285 15.3.1. Algoritmos gulosos . . . . . . . . . . . . . . . . . . . . . 285 15.3.2. Aproximac¸˜oes com randomiza¸c˜ao . . . . . . . . . . . . . 290 15.4.Esquemas de aproxima¸c˜ao . . . . . . . . . . . . . . . . . . . . . 291 15.5.Aproximando o problema da ´arvore de Steiner m´ınima . . . . . 294 15.6.Aproximando o PCV . . . . . . . . . . . . . . . . . . . . . . . . 295 15.7.Aproximando problemas de cortes . . . . . . . . . . . . . . . . 296 15.8.Aproximando empacotamento unidimensional . . . . . . . . . . 300 15.8.1. Um esquema de aproxima¸c˜ao assint´otico para min-EU . 305 15.9.Aproximando problemas de sequˆenciamento . . . . . . . . . . . 307 15.9.1. Um esquema de aproxima¸c˜ao para P ||C . . . . . . 309 max 15.10.Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 16.Algoritmos randomizados 313 16.1.Teoria de complexidade . . . . . . . . . . . . . . . . . . . . . . 313 16.1.1. Amplificac¸˜ao de probabilidades . . . . . . . . . . . . . . 315 16.1.2. Relac¸˜ao entre as classes . . . . . . . . . . . . . . . . . . 316 16.2.Sele¸c˜ao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 16.3.Corte m´ınimo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 16.4.Teste de primalidade . . . . . . . . . . . . . . . . . . . . . . . . 325 16.5.Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 V. Teoria de complexidade 331 4 Conteu´do 17.Do algoritmo ao problema 333 17.1.Introdu¸c˜ao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 18.Classes de complexidade 345 18.1.Defini¸c˜oes b´asicas . . . . . . . . . . . . . . . . . . . . . . . . . . 345 18.2.Hierarquias b´asicas . . . . . . . . . . . . . . . . . . . . . . . . . 347 18.3.Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 19.Teoria de NP-completude 353 19.1.Caracterizac¸˜oes e problemas em NP . . . . . . . . . . . . . . . 353 19.2.Redu¸c˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 19.3.Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 20.Fora do NP 367 20.1.De P at´e PSPACE . . . . . . . . . . . . . . . . . . . . . . . . . . 369 20.2.De PSPACE at´e ELEMENTAR . . . . . . . . . . . . . . . . . . . 374 20.3.Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 21.Complexidade de circuitos 379 A. Conceitos matem´aticos 387 A.1. Fun¸c˜oes comuns. . . . . . . . . . . . . . . . . . . . . . . . . . . 387 A.2. Somat´orio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 A.3. Indu¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 A.4. Limites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 A.5. Probabilidade discreta . . . . . . . . . . . . . . . . . . . . . . . 396 A.6. Grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 B. Soluc¸˜oes dos exerc´ıcios 401 5 Conteu´do Essas notas servem como suplemento `a material do livro “Complexidade de algoritmos” de Toscani/Veloso e o material did´atico da disciplina “Complexi- dade de algoritmos” da UFRGS. Vers˜ao 4227 do 2012-05-16, compilada em 16 de Maio de 2012. A obra est´a licenciada sob uma Licen¸ca Creative Commons (Atribui¸c˜ao-Uso N˜ao- Comercial-N˜ao a obras derivadas 2.5 Brasil). 6 Parte I. An´alise de algoritmos 7
Description: