Algoritmos e complexidade Notas de aula - Arquivo Escolar
Algoritmos e complexidade Notas de aula - Arquivo Escolar Algoritmos e complexidade Notas de aula - Arquivo Escolar
1. Introdução e conceitos básicos obtendo ⎛ 1 ⎝0 2 −3 3 −5 ⎞ 2 −4⎠ ; 0 −6 −12 −8 ⎛ 1 ⎝0 2 −3 3 −5 ⎞ 2 −4⎠ 0 0 −2 0 e logo x3 = 0, x2 = 3/4, x1 = 1/2 é uma solução. ♦ Logo temos um algoritmo que determina a solução com 1≤i≤n 3(n − i + 1)(n − i) = n 3 − n operações de ponto flutuante, que é (exceto valores de n bem pequenos) consideravelmente melhor que os resultados com n! operações acima 2 . Observe que esse método também fornece o determinante do matriz: ela é o produto dos elementos na diagonal! De fato, o método é um dos melhores para calcular o determinante. Observe também que ela não serve para melhorar o método de Cramer, porque a solução do problema original já vem junto. Qual o melhor algoritmo? • Para um dado problema, existem diversos algoritmos com desempenhos diferentes. • Queremos resolver um sistema de equações lineares de tamanho n. • O método de Cramer precisa ≈ 6n! operações de ponto flutuante (OPF). • O método de Gauss precisa ≈ n 3 − n OPF. • Usando um computador de 3 GHz que é capaz de executar um OPF por ciclo temos n Cramer Gauss 2 4 ns 2 ns 3 12 ns 8 ns 4 48 ns 20 ns 5 240ns 40 ns 10 7.3ms 330 ns 20 152 anos 2.7 µs 2 O resultado pode ser melhorado considerando que aji/aii não depende do k 14
Motivação para algoritmos eficientes • Com um algoritmo ineficiente, um computador rápido não ajuda! • Suponha que uma máquina resolva um problema de tamanho N em um dado tempo. • Qual tamanho de problema uma máquina 10 vezes mais rápida resolve no mesmo tempo? Número de operações Máquina rápida log2 n N 10 n 10N n log2 n n 10N (N grande) 2 √ 10N ≈ 3.2N n3 3 √ 10N ≈ 2.2N 2n 3 N + log2 10 ≈ N + 3.3 n N + log3 10 ≈ N + 2.1 Exemplo 1.4 Esse exemplo mostra como calcular os dados da tabela acima. Dado um algoritmo que precisa f(n) passos de execução numa determinada máquina. Qual o tamanho de problema n ′ que podemos resolver numa máquina c vezes mais rápido? A quantidade n ′ satisfaz f(n ′ ) = cf(n). Para funções que possuam uma inversa (por exemplo funções monotônicas) obtemos n ′ = f −1 (cf(n)). Por exemplo para f(n) = log 2 n e c = 10 (exemplo acima), temos log 2 n ′ = 10 log 2 n ⇐⇒ n ′ = n 10 . ♦ Crescimento de funções 15
- Page 1: Algoritmos e complexidade Notas de
- Page 4 and 5: Conteúdo 5. Programação dinâmic
- Page 6 and 7: Conteúdo 15.Complexidade de circui
- Page 9: Parte I. Análise de algoritmos 7
- Page 12 and 13: 1. Introdução e conceitos básico
- Page 14 and 15: 1. Introdução e conceitos básico
- Page 18 and 19: 1. Introdução e conceitos básico
- Page 20 and 21: 1. Introdução e conceitos básico
- Page 22 and 23: 1. Introdução e conceitos básico
- Page 24 and 25: 1. Introdução e conceitos básico
- Page 26 and 27: 1. Introdução e conceitos básico
- Page 28 and 29: 1. Introdução e conceitos básico
- Page 30 and 31: 1. Introdução e conceitos básico
- Page 32 and 33: 1. Introdução e conceitos básico
- Page 34 and 35: 2. Análise de complexidade • Par
- Page 36 and 37: 2. Análise de complexidade • Uma
- 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
1. Introdução e conceitos básicos<br />
obtendo ⎛<br />
1<br />
⎝0 2<br />
−3<br />
3<br />
−5<br />
⎞<br />
2<br />
−4⎠<br />
;<br />
0 −6 −12 −8<br />
⎛<br />
1<br />
⎝0 2<br />
−3<br />
3<br />
−5<br />
⎞<br />
2<br />
−4⎠<br />
0 0 −2 0<br />
e logo x3 = 0, x2 = 3/4, x1 = 1/2 é uma solução. ♦<br />
Logo temos um algoritmo que <strong>de</strong>termina a solução com<br />
<br />
1≤i≤n<br />
3(n − i + 1)(n − i) = n 3 − n<br />
operações <strong>de</strong> ponto flutuante, que é (exceto valores <strong>de</strong> n bem pequenos) consi<strong>de</strong>ravelmente<br />
melhor que os resultados com n! operações acima 2 .<br />
Observe que esse método também fornece o <strong>de</strong>terminante do matriz: ela é o<br />
produto dos elementos na diagonal! De fato, o método é um dos melhores para<br />
calcular o <strong>de</strong>terminante. Observe também que ela não serve para melhorar o<br />
método <strong>de</strong> Cramer, porque a solução do problema original já vem junto.<br />
Qual o melhor algoritmo?<br />
• Para um dado problema, existem diversos algoritmos com <strong>de</strong>sempenhos<br />
diferentes.<br />
• Queremos resolver um sistema <strong>de</strong> equações lineares <strong>de</strong> tamanho n.<br />
• O método <strong>de</strong> Cramer precisa ≈ 6n! operações <strong>de</strong> ponto flutuante (OPF).<br />
• O método <strong>de</strong> Gauss precisa ≈ n 3 − n OPF.<br />
• Usando um computador <strong>de</strong> 3 GHz que é capaz <strong>de</strong> executar um OPF por<br />
ciclo temos<br />
n Cramer Gauss<br />
2 4 ns 2 ns<br />
3 12 ns 8 ns<br />
4 48 ns 20 ns<br />
5 240ns 40 ns<br />
10 7.3ms 330 ns<br />
20 152 anos 2.7 µs<br />
2 O resultado po<strong>de</strong> ser melhorado consi<strong>de</strong>rando que aji/aii não <strong>de</strong>pen<strong>de</strong> do k<br />
14