Algoritmos e complexidade Notas de aula - Arquivo Escolar

Algoritmos e complexidade Notas de aula - Arquivo Escolar Algoritmos e complexidade Notas de aula - Arquivo Escolar

arquivoescolar.org
from arquivoescolar.org More from this publisher
13.04.2013 Views

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

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!