Documente Academic
Documente Profesional
Documente Cultură
Armando Matos
Conte udo
0 Introdu c ao 1 Preliminares: fundamentos da an alise de algoritmos 1.1 Eci encia dos algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1 1.1.2 1.1.3 1.1.4 1.2 Eci encia dos algoritmos: duas an alises . . . . . . . . . . . . . . . . . . . . Recursos e modelos de computa c ao . . . . . . . . . . . . . . . . . . . . . . . Pior caso e caso m edio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Recorr encias, pior caso e caso m edio, um exemplo . . . . . . . . . . . . . . 9 13 13 13 14 14 15 17 17 20 21 21 22 24 26 28 28 29 30 30 32 35 35 36
Ordens de grandeza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1 1.2.2 Majora c ao, minora c ao e ordem exacta . . . . . . . . . . . . . . . . . . . . . Tempo de execu c ao em algoritmos de ordena c ao e pesquisa . . . . . . . . .
1.3
Solu c ao de recorr encias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 Exemplos de fun c oes denidas atrav es de recorr encias deni c oes indutivas O que e uma recorr encia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . M etodo Tabelar suspeitar demonstrar . . . . . . . . . . . . . . . . . . M etodo das diferen cas nitas constantes . . . . . . . . . . . . . . . . . . . . M etodo da mudan ca de vari avel . . . . . . . . . . . . . . . . . . . . . . . .
M etodo da equa c ao caracter stica homog enea . . . . . . . . . . . . . . . . . Equa c ao caracter stica homog enea ra zes distintas . . . . . . . . . . . . . Equa c ao caracter stica homog enea, caso geral: exist encia de ra zes m ultiplas M etodo da equa c ao caracter stica n ao homog enea . . . . . . . . . . . . . . .
1.4
2 Tempo de execu c ao dos algoritmos complementos 2.1 2.2 Tempo de execu c ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sobre os modelos de computa c ao . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CONTEUDO . . . . . . . . . . . . . . . . . . . . . . . . . . 37 38 39 40 42 44 45 49 49 51 51 54 57 57 59 60 60 61 61 63 65 66 66 67 67 68 72 72 73 77 79 79
Monotonia de t(n) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
An alise amortizada de algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1 2.3.2 2.3.3 2.3.4 Stack com gest ao de mem oria . . . . . . . . . . . . . . . . . . . . . . . .
A fun c ao potencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Outro exemplo, um contador bin ario . . . . . . . . . . . . . . . . . . . . . . Contador bin ario com custo exponencial na ordem do bit . . . . . . . . . .
3 Sobre o esquema Dividir para Conquistar 3.1 3.2 Uma recorr encia associada ao esquema dividir para conquistar . . . . . . . . . . Multiplicar mais rapidamente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 3.2.2 Multiplica c ao de inteiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Multiplica c ao de matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 Algoritmos aleatorizados e classes de complexidade 4.1 4.2 4.3 Um problema de colora c ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O produto de duas matrizes iguala uma terceira? . . . . . . . . . . . . . . . . . . . O quick sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1 4.3.2 4.3.3 4.3.4 4.4 4.5 Esquema b asico do quick sort . . . . . . . . . . . . . . . . . . . . . . . . . An alise no pior caso do quick sort cl assico. . . . . . . . . . . . . . . . . . An alise do tempo m edio do quick sort cl assico . . . . . . . . . . . . . . . O quick sort aleatorizado . . . . . . . . . . . . . . . . . . . . . . . . . . .
T ecnica de redu c ao da probabilidade de erro . . . . . . . . . . . . . . . . . . . . . . Outro algoritmo aleatorizado: o algoritmo de Rabin-Miller . . . . . . . . . . . . . . 4.5.1 4.5.2 4.5.3 4.5.4 Ineci encia dos algoritmos elementares de primalidade . . . . . . . . . . . . Existem algoritmos polinomiais para a primalidade . . . . . . . . . . . . . . Testemunhos rarefeitos da n ao primalidade . . . . . . . . . . . . . . . . . . Testemunhos frequentes da n ao primalidade . . . . . . . . . . . . . . . . . .
4.6
Computa c ao aleatorizada: classes de complexidade . . . . . . . . . . . . . . . . . . 4.6.1 4.6.2 Panorama geral das classes de complexidade . . . . . . . . . . . . . . . . . . Classes de complexidade aleatorizadas . . . . . . . . . . . . . . . . . . . . .
5 Sobre a ordena c ao e a selec c ao 5.1 Quando o universo e pequeno: indexa c ao nos valores . . . . . . . . . . . . . . . . . 5.1.1 Vector sem elementos repetidos . . . . . . . . . . . . . . . . . . . . . . . . .
CONTEUDO 5.1.2 5.1.3 5.1.4 5.1.5 5.2 Coment ario: uma representa c ao de conjuntos . . . . . . . . . . . . . . . . . Vector com elementos repetidos . . . . . . . . . . . . . . . . . . . . . . . . . Notas sobre as tentativas de generaliza c ao do universo . . . . . . . . . . . . Ordena c ao de reais no intervalo [0, 1) . . . . . . . . . . . . . . . . . . . . . .
5 80 81 83 83 85 85 86 88 89 91 95 95 98 98 98
M etodos de ordena c ao baseados na representa c ao dos valores . . . . . . . . . . . . 5.2.1 5.2.2 Radix sort: come cando pelo s mbolo mais signicativo . . . . . . . . . . . Radix sort: come cando pelo s mbolo menos signicativo . . . . . . . . . .
5.3
Mediana; selec c ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.1 5.3.2 Mediana em tempo m edio O(n) . . . . . . . . . . . . . . . . . . . . . . . . . Mediana em tempo O(n) (pior caso) . . . . . . . . . . . . . . . . . . . . . .
6 Circuitos e redes de ordena c ao 6.1 Circuitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1 6.2 Classes de complexidade associadas ao modelo dos circuitos . . . . . . . . .
Redes de compara c ao e redes de ordena c ao . . . . . . . . . . . . . . . . . . . . . . 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 Introdu c ao e conceitos fundamentais . . . . . . . . . . . . . . . . . . . . . .
Princ pio 0/1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Ordenadores bit onicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Rede de ordena c ao baseada no merge sort . . . . . . . . . . . . . . . . . . 105 Sum ario, complexidade e minorantes . . . . . . . . . . . . . . . . . . . . . . 107 111
Considera c oes gerais sobre os m etodos de hash . . . . . . . . . . . . . . . . . . . 111 7.1.1 7.1.2 Universos grandes, fun c oes de hash . . . . . . . . . . . . . . . . . . . . . 111 Variantes do m etodo de hash . . . . . . . . . . . . . . . . . . . . . . . . 114
7.2
Hash universal: aleatoriza c ao do hash . . . . . . . . . . . . . . . . . . . . . . 115 7.2.1 O m etodo matricial de constru c ao . . . . . . . . . . . . . . . . . . . . . . . 116
7.3
Hash perfeito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 7.3.1 7.3.2 Constru c ao com espa co O(n2 ) . . . . . . . . . . . . . . . . . . . . . . . . . 118 Constru c ao com espa co O(n) . . . . . . . . . . . . . . . . . . . . . . . . . . 119
7.4
CONTEUDO Parentiza c ao optima de um produto matricial . . . . . . . . . . . . . . . . . 125 M axima sub-sequ encia comum . . . . . . . . . . . . . . . . . . . . . . . . . 129 Problema da mochila (knapsack problem) . . . . . . . . . . . . . . . . . . 134
Transforma c oes de representa c ao, generalidades . . . . . . . . . . . . . . . . . . . . 137 Polin omios em corpos. Representa c oes . . . . . . . . . . . . . . . . . . . . . . . . . 137 9.2.1 9.2.2 9.2.3 9.2.4 9.2.5 C alculo de um polin omio num ponto . . . . . . . . . . . . . . . . . . . . . . 137 Dois modos de representar um polin omio . . . . . . . . . . . . . . . . . . . 138 Multiplica c ao de 2 polin omios . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Corpos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Ra zes primitivas da unidade . . . . . . . . . . . . . . . . . . . . . . . . . . 141
9.3
A DFT: dos coecientes para os valores . . . . . . . . . . . . . . . . . . . . . . . . 142 9.3.1 9.3.2 O que e a transformada discreta de Fourier, DFT? . . . . . . . . . . . . . . 142 A inversa da transformada discreta de Fourier . . . . . . . . . . . . . . . . . 143
9.4
O algoritmo FFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 9.4.1 An alise da eci encia do algoritmo FFT . . . . . . . . . . . . . . . . . . . . 146
9.5
Aplica c oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 9.5.1 9.5.2 Multiplica c ao eciente de matrizes . . . . . . . . . . . . . . . . . . . . . . . 150 Transformadas tempo frequ encia . . . . . . . . . . . . . . . . . . . . . . 150 153
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
10.1.1 Um problema simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 10.1.2 O problema das 12 bolas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 10.2 Entropia, informa c ao e minorantes de complexidade . . . . . . . . . . . . . . . . . 157 10.2.1 Introdu c ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 10.2.2 Informa c ao e os problemas de pesagens . . . . . . . . . . . . . . . . . . . . 158 10.3 Minorantes de algoritmos de ordena c ao . . . . . . . . . . . . . . . . . . . . . . . . . 159 10.4 Algoritmos de ordena c ao em que o custo e o n umero de trocas . . . . . . . . . . . 161
10.5 Minorantes de algoritmos de determina c ao do maior elemento . . . . . . . . . . . . 163 10.6 Determina c ao do segundo maior elemento . . . . . . . . . . . . . . . . . . . . . . . 164 10.7 Minorantes do problema de Merge . . . . . . . . . . . . . . . . . . . . . . . . . . 166 10.8 Conectividade de grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
CONTEUDO 11 Ap endices
7 169
11.1 Ap endice: Alguns resultados u teis . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 11.2 Ap endice: Implementa c oes do quick sort em Haskell, Prolog e Python . . . . . . 170 11.3 Ap endice: Algoritmo eciente de potencia c ao modular . . . . . . . . . . . . . . . . 171 11.4 Ap endice: Algoritmo de Rabin-Miller (teste de primalidade) . . . . . . . . . . . . . 172 11.5 Ap endice: Algoritmo do radix sort em python . . . . . . . . . . . . . . . . . . . 173
CONTEUDO
Cap tulo 0
Introdu c ao
Nesta publica c ao reunimos um conjunto de notas informais das aulas te oricas da disciplina de T opicos Avan cados em Algoritmos1 . Incluimos tamb em diversos exerc cios propostos nas aulas te oricas. Uma grande parte da Ci encia de Computadores consiste no estudo dos algoritmos projecto (design), prova da correc c ao, an alise da eci encia e implementa c ao2 . H a muitos, muitos, algoritmos nas mais diversas areas: algoritmos de ordena c ao e pesquisa, algoritmos para procura de padr oes em textos (pattern matching) algoritmos de compress ao de cheiros, algoritmos num ericos, algoritmos geom etricos, algoritmos para an alise l exica ou sint atica, algoritmos para garbage collection, algoritmos para problemas relacionados com grafos, algoritmos usados na Teoria dos Grupos. . . a lista quase n ao tem m. Contudo, vale a pena estudarmos algoritmos espec cos: quando se compreende bem ou se inventa um algoritmo concreto est a-se muitas vezes a utilizar uma ideia ou um conjunto de ideias que s ao aplic aveis com muito mais generalidade. Nesta publica c ao estudaremos os seguintes temas relacionados com algoritmos: Algumas t ecnicas de an alise da eci encia de algoritmos. Algoritmos espec cos. Algumas t ecnicas gen ericas aplic aveis em muitos problemas: dividir para conquistar e Programa c ao Din amica. Minorantes de complexidade.
1 Anos de 2008 e 2009, Departamento de Ci encia de Computadores, Faculdade de Ci encias da Universidade do Porto. 2 O projecto, a prova da correc c ao e a an alise da eci encia est ao intimamente relacionados; devem efectuar-se em paralelo.
10
CAP ITULO 0. INTRODUC AO Este livro est a organizado daseguinte forma. No pr oximo cap tulo apresentam-se alguns ele-
mentos de an alise de algoritmos, sendo especialmente estudadas as ordens de grandeza das fun c oes e alguns m etodos de solu c ao de recorr encias. O Cap tulo 2 trata dos modelos de computa c ao e do tempo de execu c ao dos algoritmos, estudando-se em especial a an alise amortizada do tempo de execu c ao. O esquema dividir para conquistar, bem como a solu c ao das recorr encias que lhe est ao associadas s ao estudados no Cap tulo 3; esse esquema e aplicado a algoritmos de multiplica c ao de inteiros e de matrizes grandes. No cap tulo seguinte s ao considerados os algoritmos aleatorizados, isto e, que t em acesso a uma fonte de n umeros aleat orios (ou pseudo-aleat orios); em particular e estudado o quick-sort aleatorizado e o algoritmo de primalidade Rabin-Miller. As classes de complexidade aleatorizadas s ao tamb em estudadas. O Cap tulo 5 trata de alguns algoritmos relacionados com o problema da ordena c ao, sendo considerados m etodos de ordena c ao aplic aveis a universos pequenos, o radix-sort e um algoritmo eciente de determina c ao da mediana. Os circuitos como modelos de computa c ao s ao mencionados no Cap tulo 6, sendo estudadas em algum pormenor as redes de ordena ca o. No Cap tulo 7 s ao consideradas 2 quest oes relacionadas com os m etodos de hash: o hash universal e o hash perfeito. Algumas aplica c oes t picas da Programa c ao Din amica parentiza c ao optima de um produto matricial, m axima sub-sequ encia comum e o problema da mochila (knapsack problem) s ao considerados em algum pormenor no Cap tulo 8. O cap tulo seguinte trata do importante algoritmo FFT (Fast Fourier Transform); este algoritmo e estudado do ponto de vista da convers ao entre 2 representa c oes dos polin omios representa c ao por coecientes e representa c ao por valores em determinados pontos. A Teoria da Informa c ao e aplicada no Cap tulo 10 ` a determina c ao de minorantes de complexidade de algoritmos de ordena c ao e pesquisa.
Pr e-requesitos. Para a boa compreens ao destes apontamentos e necess ario : (i) ter alguma maturidade matem atica, em particular na area da matem atica discreta, (ii) ter conhecimentos m nimos da teoria das probabilidades, (iii) conhecer os principais algoritmos de ordena c ao e respectiva eci encia, (iv) ter alguma experi encia de programa c ao numa linguagem como, por exemplo, o C, o C++, o Python ou at e o Java, e ter capacidade de implementar nessa linguagem algoritmos descritos numa linguagem informal, (v) conhecer os fundamentos da teoria dos problemas completos em NP.
11
Os exerc cios s ao parte integrante deste curso. O leitor dever a fazer um esfor co s erio para os resolver!