Algoritmos e complexidade Notas de aula - Arquivo Escolar
Algoritmos e complexidade Notas de aula - Arquivo Escolar Algoritmos e complexidade Notas de aula - Arquivo Escolar
6. Divisão e conquista uma forma que sabemos resolver: A(n) = 0≤i≤log c2 n f(n/c i 2) c log c 2 n/c i 2 1 = 1 c log c 2 n 1 0≤i≤log c2 n f(n/c i 2)c i 1 Após de resolver essa recorrência, podemos re-substituir para obter a solução de T (n). Exemplo 6.4 (Multiplicação de números binários) Dado dois números p, q de n bits, podemos separá-los em duas partes forma p = pl pr = pl 2 n/2 + pr q = ql qr = ql 2 n/2 + qr. Logo o produto possui a representação Observação: pq = (pl 2 n/2 + pr)(ql 2 n/2 + qr) = 2 n plql + 2 n/2 ( plqr + prql ) + prqr. plqr + prql = (pl + pr)(ql + qr) − plql − prqr. Portanto a multiplicação de dois números binários com n bits é possível com três multiplicações de números binários com aproximadamente n/2 bits. Algoritmo 6.4 (mult-bin [41]) Entrada Dois números binários p, q com n bits. 130 Saída O produto pq (com ≤ 2n bits). 1 i f n = 1 then return pq 2 else 3 x1 := mult-bin(pl, ql) 4 x2 := mult-bin(pr, qr) 5 x3 := mult-bin(pl + pr, ql + qr) 6 return x12 n + (x3 − x2 − x1)2 n/2 + x2 7 end i f
6.2. Resolver recorrências O algoritmo multiplica dois números binários com no máximo ⌈n/2⌉ bits, e os números pl + pr e ql + qr com no máximo ⌈n/2⌉ + 1 bits, e portanto possui complexidade T (n) = que podemos simplificar para Θ(1) se n ≤ 1 2T (⌈n/2⌉) + T (⌈n/2⌉ + 1) + Θ(n) caso contrário T (n) = 3T (n/2) + cn. Dividindo por 3 log 2 n obtemos T (n) 3log T (n/2) = 2 n 3log cn + 2 n/2 3log2 n e substituindo A(n) = T (n)/3 log 2 n temos e portanto A(n) = A(n/2) + cn 3log = c 2 n 0≤i≤log2 n = cn 3 log 2 n 0≤i≤log 2 n 3 2 i n/2 i 3 log 2 n/2i = cn 3log2 n (3/2) log2 n+1 = 3c 1/2 T (n) = A(n)3 log 2 n = 3cn log 2 3 = Θ(n 1.58 ). Exemplo 6.5 Com p = (1101.1100)2 = (220)10 e q = (1001.0010)2 = (146)10 temos n = 8, x = p1 + p2 = 1.1001 tal que x1 = 1 e x2 = 1001 e y = q1 + q2 = 1011 tal que y1 = 0 e y2 = 1011. Logo z = x2y2 = 0110.0011, t = y22 4 + z = 21.0001.0011, u = p1q1 = 0111.0101, v = p2q2 = 0001.1000 e finalmente r = 1111.1010.111.1000 = 32120. ♦ 6.2.2. Método da árvore de recursão O método da árvore de recursão Uma árvore de recursão apresenta uma forma bem intuitiva para a análise de complexidade de algoritmos recursivos. ♦ 131
- 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 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: 6.2. Resolver recorrências Para co
- 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
- Page 145 and 146: 6.3. Algoritmos usando divisão e c
- Page 147 and 148: 6.3. Algoritmos usando divisão e c
- Page 149 and 150: 6.3. Algoritmos usando divisão e c
- Page 151 and 152: unidade. Em total a avaliação pro
- Page 153: 3. T (n) = 3T (n/4) + n log n 4. T
- Page 156 and 157: 7. Árvores de busca, backtracking
- Page 158 and 159: 7. Árvores de busca, backtracking
- Page 160 and 161: 7. Árvores de busca, backtracking
- Page 162 and 163: 7. Árvores de busca, backtracking
- Page 164 and 165: 7. Árvores de busca, backtracking
- Page 166 and 167: 7. Árvores de busca, backtracking
- Page 168 and 169: 7. Árvores de busca, backtracking
- Page 170 and 171: 7. Árvores de busca, backtracking
- Page 172 and 173: 7. Árvores de busca, backtracking
- 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
6.2. Resolver recorrências<br />
O algoritmo multiplica dois números binários com no máximo ⌈n/2⌉ bits, e<br />
os números pl + pr e ql + qr com no máximo ⌈n/2⌉ + 1 bits, e portanto possui<br />
<strong>complexida<strong>de</strong></strong><br />
T (n) =<br />
que po<strong>de</strong>mos simplificar para<br />
<br />
Θ(1) se n ≤ 1<br />
2T (⌈n/2⌉) + T (⌈n/2⌉ + 1) + Θ(n) caso contrário<br />
T (n) = 3T (n/2) + cn.<br />
Dividindo por 3 log 2 n obtemos<br />
T (n)<br />
3log T (n/2)<br />
=<br />
2 n 3log cn<br />
+<br />
2 n/2 3log2 n<br />
e substituindo A(n) = T (n)/3 log 2 n temos<br />
e portanto<br />
A(n) = A(n/2) + cn<br />
3log <br />
= c<br />
2 n<br />
0≤i≤log2 n<br />
= cn<br />
3 log 2 n<br />
<br />
0≤i≤log 2 n<br />
3<br />
2<br />
i<br />
n/2 i<br />
3 log 2 n/2i<br />
= cn<br />
3log2 n<br />
(3/2) log2 n+1<br />
= 3c<br />
1/2<br />
T (n) = A(n)3 log 2 n = 3cn log 2 3 = Θ(n 1.58 ).<br />
Exemplo 6.5<br />
Com p = (1101.1100)2 = (220)10 e q = (1001.0010)2 = (146)10 temos n = 8,<br />
x = p1 + p2 = 1.1001 tal que x1 = 1 e x2 = 1001 e y = q1 + q2 = 1011<br />
tal que y1 = 0 e y2 = 1011. Logo z = x2y2 = 0110.0011, t = y22 4 + z =<br />
21.0001.0011, u = p1q1 = 0111.0101, v = p2q2 = 0001.1000 e finalmente<br />
r = 1111.1010.111.1000 = 32120. ♦<br />
6.2.2. Método da árvore <strong>de</strong> recursão<br />
O método da árvore <strong>de</strong> recursão<br />
Uma árvore <strong>de</strong> recursão apresenta uma forma bem intuitiva para a análise <strong>de</strong><br />
<strong>complexida<strong>de</strong></strong> <strong>de</strong> algoritmos recursivos.<br />
♦<br />
131