Algoritmos e complexidade Notas de aula - Arquivo Escolar
Algoritmos e complexidade Notas de aula - Arquivo Escolar Algoritmos e complexidade Notas de aula - Arquivo Escolar
4. Algoritmos gulosos Implementação Algoritmo 4.5 (Seqüenciamento de intervalos) Entrada Um conjunto de intervalos S = {[ci, fi] | 1 ≤ i ≤ n}, cada com começo ci e fim fi tal que ci < fi. Saída Um conjunto máximo de intervalos compatíveis C. 1 C := ∅ 2 while S = ∅ do 3 Seja [c, f] ∈ S com f mínimo 4 C := C ∪ [c, f] 5 S := S \ {i ∈ S | i ∩ [c, f] = ∅} 6 end while 7 return C Seja C = ([c1, f1], . . . , [cn, fn]) o resultado do algoritmo Seqüenciamento de intervalos e O = ([c ′ 1, f ′ 1], . . . , [c ′ m, f ′ m]) seqüenciamento máximo, ambos em ordem crescente. Proposição 4.2 Para todo 1 ≤ i ≤ n temos fi ≤ f ′ i . Prova. Como O é ótimo, temos n ≤ m. Prova por indução. Base: Como o algoritmo guloso escolhe o intervalo cujo terminação é mínima, temos f1 ≤ f ′ 1. Passo: Seja fi ≤ f ′ i com i < n. O algoritmo guloso vai escolher entre os intervalos que começam depois fi o com terminação mínima. O próximo intervalo ] do seqüenciamento ótimo está entre eles, porque ele começa depois [c ′ i+1 , m′ i+1 f ′ i e f ′ i ≥ fi. Portanto, o próximo intervalo escolhido pelo algoritmo guloso termina antes de f ′ i+1 , i.e. fi+1 ≤ f ′ i+1 . Proposição 4.3 O seqüenciamento do algoritmo guloso é ótimo. Prova. Suponha que o algoritmo guloso retorna menos intervalos C que um seqüenciamento ótimo O. Pela proposição 4.2, o último (n-ésimo) intervalo do C termina antes do último intervalo de O. Como O tem mais intervalos, existe mais um intervalo que poderia ser adicionado ao conjunto C pelo algoritmo guloso, uma contradição com o fato, que o algoritmo somente termina se não sobram intervalos compatíveis. 86
Complexidade • Uma implementação detalhada pode 4.3. Algoritmos de seqüenciamento – Ordenar os intervalos pelo fim deles em tempo O(n log n) – Começando com intervalo 1 sempre escolher o intervalo atual e depois ignorar todos intervalos que começam antes que o intervalo atual termina. – Isso pode ser implementado em uma varredura de tempo O(n). – Portanto o complexidade pessimista é O(n log n). Conjunto independente máximo Considere o problema Conjunto independente máximo, CIM Instância Um grafo não-direcionado G = (V, E). Solução Um conjunto independente M ⊆ V , i.e. todo m1, m2 ∈ V temos {m1, m2} ∈ E. Objetivo Maximiza a cardinalidade |M|. (inglês: maximum independent set, MIS) Grafos de intervalo • Uma instância S de seqüenciamento de intervalos define um grafo nãodirecionado G = (V, E) com V = S; E = {{i1, i2} | i1, i2 ∈ S, i1 ∩ i2 = ∅} • Grafos que podem ser obtidos pelo intervalos são grafos de intervalo. • Um conjunto compatível de intervalos corresponde com um conjunto independente nesse grafo. • Portanto, resolvemos CIM para grafos de intervalo! • Sem restrições, CIM é NP-completo. 87
- Page 38 and 39: 2. Análise de complexidade 1. Atri
- Page 40 and 41: 2. Análise de complexidade Exemplo
- Page 42 and 43: 2. Análise de complexidade Compone
- Page 44 and 45: 2. Análise de complexidade • Qua
- Page 46 and 47: 2. Análise de complexidade Algorit
- Page 48 and 49: 2. Análise de complexidade Algorit
- Page 50 and 51: 2. Análise de complexidade Tratabi
- Page 52 and 53: 2. Análise de complexidade A compl
- Page 54 and 55: 2. Análise de complexidade • Fre
- Page 56 and 57: 2. Análise de complexidade Exemplo
- Page 58 and 59: 2. Análise de complexidade 1 i f l
- Page 60 and 61: 2. Análise de complexidade Novamen
- Page 62 and 63: 2. Análise de complexidade Logo te
- Page 64 and 65: 2. Análise de complexidade 7 for c
- Page 66 and 67: 2. Análise de complexidade Com iss
- Page 68 and 69: 2. Análise de complexidade funçã
- Page 70 and 71: 2. Análise de complexidade Algorit
- Page 72 and 73: 2. Análise de complexidade resolve
- Page 75: 3. Introdução Resolver problemas
- Page 78 and 79: 4. Algoritmos gulosos A abordagem g
- Page 80 and 81: 4. Algoritmos gulosos Do outro lado
- Page 82 and 83: 4. Algoritmos gulosos Aplicações
- Page 84 and 85: 4. Algoritmos gulosos 1 V ′ := {v
- Page 86 and 87: 4. Algoritmos gulosos Algoritmo de
- Page 90 and 91: 4. Algoritmos gulosos Variação do
- Page 92 and 93: 4. Algoritmos gulosos • Como comp
- Page 94 and 95: 4. Algoritmos gulosos Proposição
- Page 96 and 97: 4. Algoritmos gulosos Resultados O
- Page 98 and 99: 5. Programação dinâmica É simpl
- Page 100 and 101: 5. Programação dinâmica soluçã
- Page 102 and 103: 5. Programação dinâmica Teorema:
- Page 104 and 105: 5. Programação dinâmica e calcul
- Page 106 and 107: 5. Programação dinâmica 5.2.2. S
- Page 108 and 109: 5. Programação dinâmica 11 sol1
- Page 110 and 111: 5. Programação dinâmica O algori
- Page 112 and 113: 5. Programação dinâmica Dependen
- Page 114 and 115: 5. Programação dinâmica Análise
- Page 116 and 117: 5. Programação dinâmica curto do
- Page 118 and 119: 5. Programação dinâmica Logo, po
- Page 120 and 121: 5. Programação dinâmica (começa
- Page 122 and 123: 5. Programação dinâmica Árvore
- Page 125 and 126: 6. Divisão e conquista 6.1. Introd
- Page 127 and 128: Recorrências simplificadas Formalm
- Page 129 and 130: 6.2. Resolver recorrências • Usa
- Page 131 and 132: 6.2. Resolver recorrências Para co
- Page 133 and 134: 6.2. Resolver recorrências O algor
- Page 135 and 136: • Prove por indução que T (n) =
- Page 137 and 138: Saída A potência a n . 1 i f n =
4. <strong>Algoritmos</strong> gulosos<br />
Implementação<br />
Algoritmo 4.5 (Seqüenciamento <strong>de</strong> intervalos)<br />
Entrada Um conjunto <strong>de</strong> intervalos S = {[ci, fi] | 1 ≤ i ≤ n}, cada com<br />
começo ci e fim fi tal que ci < fi.<br />
Saída Um conjunto máximo <strong>de</strong> intervalos compatíveis C.<br />
1 C := ∅<br />
2 while S = ∅ do<br />
3 Seja [c, f] ∈ S com f mínimo<br />
4 C := C ∪ [c, f]<br />
5 S := S \ {i ∈ S | i ∩ [c, f] = ∅}<br />
6 end while<br />
7 return C<br />
Seja C = ([c1, f1], . . . , [cn, fn]) o resultado do algoritmo Seqüenciamento<br />
<strong>de</strong> intervalos e O = ([c ′ 1, f ′ 1], . . . , [c ′ m, f ′ m]) seqüenciamento máximo, ambos<br />
em or<strong>de</strong>m crescente.<br />
Proposição 4.2<br />
Para todo 1 ≤ i ≤ n temos fi ≤ f ′ i .<br />
Prova. Como O é ótimo, temos n ≤ m. Prova por indução. Base: Como o<br />
algoritmo guloso escolhe o intervalo cujo terminação é mínima, temos f1 ≤ f ′ 1.<br />
Passo: Seja fi ≤ f ′ i com i < n. O algoritmo guloso vai escolher entre os intervalos<br />
que começam <strong>de</strong>pois fi o com terminação mínima. O próximo intervalo<br />
] do seqüenciamento ótimo está entre eles, porque ele começa <strong>de</strong>pois<br />
[c ′ i+1 , m′ i+1<br />
f ′ i e f ′ i ≥ fi. Portanto, o próximo intervalo escolhido pelo algoritmo guloso<br />
termina antes <strong>de</strong> f ′ i+1 , i.e. fi+1 ≤ f ′ i+1 . <br />
Proposição 4.3<br />
O seqüenciamento do algoritmo guloso é ótimo.<br />
Prova. Suponha que o algoritmo guloso retorna menos intervalos C que um<br />
seqüenciamento ótimo O. Pela proposição 4.2, o último (n-ésimo) intervalo do<br />
C termina antes do último intervalo <strong>de</strong> O. Como O tem mais intervalos, existe<br />
mais um intervalo que po<strong>de</strong>ria ser adicionado ao conjunto C pelo algoritmo<br />
guloso, uma contradição com o fato, que o algoritmo somente termina se não<br />
sobram intervalos compatíveis. <br />
86