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 Proposição 4.4 O conjunto das folhas de cada árvore binária corresponde com um código livre de prefixo. Prova. Dado uma árvore binária com as folhas representando códigos, nenhum código pode ser prefixo de outro: senão ocorreria como nó interno. Qual o melhor código? • A teoria de informação (Shannon) fornece um limite. • A quantidade de informação contido num símbolo que ocorre com freqüência f é − log 2 f, logo o número médio de bits transmitidos (para um número grande de símbolos) é H = − fi log 2 fi. • H é um limite inferior para qualquer código. • Nem sempre é possível atingir esse limite. Com A = 1/3, B = 2/3; H ≈ 0.92b mas o código ótimo precisa ao menos 1b por símbolo. • Nosso exemplo: H ≈ 1.92. Como achar o melhor código? 92 • Observação 1: Uma solução ótima é uma árvore completa. • 1 • ∗ • 0 1 • • ⇒ • 1 • 0 1 • • • Observação 2: Em uma solução ótima, os dois símbolos com menor freqüência ocorrem como irmãos no nível mais alto. Logo: Podemos substituir eles com um nó cujo freqüência é a soma dos dois.
Algoritmo • 1 • 0 1 fi fj ⇒ • 1 fi + fj 4.4. Tópicos Algoritmo 4.8 (Huffman) Entrada Um alfabeto de símbolos S com uma freqüência fs para cada s ∈ S. Saída Uma árvore binária que representa o melhor código livre de prefixos para S. 1 Q := {Leaf(fs) | s ∈ S} { f i l a de prioridade } 2 while |Q| > 0 do 3 b1 := Q. min() com b1 = Node(fi, bi1, bi2) 4 b2 := Q. min() com b2 = Node(fj, bj1, bj2) 5 Q := Q.add(Node(fi + fj, b1, b2)) 6 end while Exemplo 4.4 Saccharomyces cerevisiae Considere a sequência genética do Saccharomyces cerevisiae (inglês: baker’s yeast) MSIT NGT SRSV SAMGHP AV ERY T P GHIV CV GT HKV EV V . . . com 2900352bp. O alfabeto nessa caso são os 20 amino-ácidos S = {A, C, D, E, F, G, H, I, K, L, M, N, P, Q, R, S, T, V, W, Y } que ocorrem com as freqüências A C D E F G H I K L 0.055 0.013 0.058 0.065 0.045 0.050 0.022 0.066 0.073 0.096 M N P Q R S T V W Y 0.021 0.061 0.043 0.039 0.045 0.090 0.059 0.056 0.010 0.034 93
- 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 88 and 89: 4. Algoritmos gulosos Implementaç
- Page 90 and 91: 4. Algoritmos gulosos Variação do
- Page 92 and 93: 4. Algoritmos gulosos • Como comp
- 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 =
- Page 139 and 140: 3 Quicksort (l ,m − 1 ,a ) ; 4 Qu
- Page 141 and 142: 6.2. Resolver recorrências 1. Se f
- Page 143 and 144: 6.3. Algoritmos usando divisão e c
Algoritmo<br />
• <br />
1<br />
<br />
•<br />
0<br />
<br />
1 <br />
<br />
fi<br />
fj<br />
⇒ • <br />
1 <br />
fi + fj<br />
4.4. Tópicos<br />
Algoritmo 4.8 (Huffman)<br />
Entrada Um alfabeto <strong>de</strong> símbolos S com uma freqüência fs para cada<br />
s ∈ S.<br />
Saída Uma árvore binária que representa o melhor código livre <strong>de</strong> prefixos<br />
para S.<br />
1 Q := {Leaf(fs) | s ∈ S} { f i l a <strong>de</strong> priorida<strong>de</strong> }<br />
2 while |Q| > 0 do<br />
3 b1 := Q. min() com b1 = No<strong>de</strong>(fi, bi1, bi2)<br />
4 b2 := Q. min() com b2 = No<strong>de</strong>(fj, bj1, bj2)<br />
5 Q := Q.add(No<strong>de</strong>(fi + fj, b1, b2))<br />
6 end while<br />
Exemplo 4.4<br />
Saccharomyces cerevisiae<br />
Consi<strong>de</strong>re a sequência genética do Saccharomyces cerevisiae (inglês: baker’s<br />
yeast)<br />
MSIT NGT SRSV SAMGHP AV ERY T P GHIV CV GT HKV EV V . . .<br />
com 2900352bp. O alfabeto nessa caso são os 20 amino-ácidos<br />
S = {A, C, D, E, F, G, H, I, K, L, M, N, P, Q, R, S, T, V, W, Y }<br />
que ocorrem com as freqüências<br />
A C D E F G H I K L<br />
0.055 0.013 0.058 0.065 0.045 0.050 0.022 0.066 0.073 0.096<br />
M N P Q R S T V W Y<br />
0.021 0.061 0.043 0.039 0.045 0.090 0.059 0.056 0.010 0.034<br />
93