Title: Projeto e An
1Projeto e Análise de Algoritmos
Celso Carneiro Ribeiro http//www.inf.puc-rio.br/
celso
2Parte 1
Introdução
3Alguns exemplos
- Totalizar uma folha de pagamento
- Ordenar uma lista de números
- Multiplicar dois números inteiros
- Multiplicar duas matrizes
- Dado um tabuleiro de xadrez, obter o melhor
movimento para as peças brancas. - Obter o conjunto de rotas ótimas para um
determinado número de veículos, que devem
distribuir um certo número de produtos em
determinados pontos de venda de certas cidades. - Dado um programa R escrito em uma linguagem L e
uma entrada X qualquer para R, decidir se R
termina se for submetido à entrada X.
4O que é um algoritmo?
- Do dicionário Aurélio processo de cálculo ou de
resolução de um grupo de problemas semelhantes,
em que se estipulam, com generalidade e sem
restrições, regras formais para a obtenção do
resultado, ou da solução do problema. - Conjunto predeterminado e bem definido de regras
e processos destinados à solução de um problema,
com um número finito de etapas.
5O que é um algoritmo?
- Sequência finita de instruções elementares e bem
definidas (não-ambíguas), que levam à solução de
um problema específico. - Operações válidas
- Definidas (some 6 ou 7 a x)
- Efetivas ( )
(aritmética de inteiros versus reais) - Término em tempo finito (procedimento
computacional)
6Qual algoritmo utilizar para resolver um problema?
- Quando se resolve um problema, é necessário
decidir-se pelo algoritmo a ser utilizado.
7Exemplo 1 Multiplicação de dois números inteiros
com n dígitos
Algoritmo 3 n1.59
Algoritmo 2 n2
8Exemplo 2 MDC Algoritmo ingênuo
- Entrada x, y ? Z
- Saída MDC(x, y) Max z ? Z ? a,b ? Z, x
az, ybz
Function mdc(x, y integer) integer var t
integer início se xlty então t ? x senão t
? y enquanto (x mod t ltgt0) ou (y mod tltgt0) faça
t ? t-1 mdc ? t fim fim_function
9Exemplo 2 MDC Algoritmo de Euclides
4 7 1 4 3
54180 13125 1680 1365 315 105
1680 1365 315 105 0
MDC (54180, 13125) 105
10Exemplo 2 MDC
- Algoritmo ingênuo realiza 13020 iterações.
Algoritmo de Euclides realiza 5 iterações!
11Exemplo 2 MDC Algoritmo de Euclides
function mdc(x, y integer) integer var t
integer início enquanto yltgt0 faça
início t? x mod y x? y y? t
fim mdc_e_i ? x fim fim_function_mdc
12Exemplo 3 Cálculo do n-ésimo elemento da
seqüência de Fibonacci
an an-1 an-2 a0 0 a1 1
13Exemplo 3 Cálculo do n-ésimo elemento da
seqüência de Fibonacci
function fib1(n) se nlt2 então retorne
n senão retorne fib1(n-1) fib1(n-2)
fim_function_fib1
14Exemplo 3 Cálculo do n-ésimo elemento da
seqüência de Fibonacci
function fib2(n) i ? 0 j ? 1 para k1 até
n faça j ? ij i ? j-i fim_para retorne
j fim_function_fib2
15Exemplo 3 Cálculo do n-ésimo elemento da
seqüência de Fibonacci
function fib3(n) i ? 1, j ? 0, k ? 0, h ?
1 enquanto ngt0 faça se n é ímpar
então t ? j.h j ? i.h j.k t i ?
i.k t fim_se t ?
h2 h ? 2.k.h t k ? k2 t
n ? n div 2 fim_enquanto retorne
j fim_function_fib3
16Exemplo 3 Cálculo do n-ésimo elemento da
seqüência de Fibonacci
- fib1(n) fib1(n-1) fib1(n-2)
- Cada chamada de fib1 O(1)
- T(n) é o número de chamadas de fib1 para o
cálculo do n-ésimo termo
17Exemplo 3 Cálculo do n-ésimo elemento da
seqüência de Fibonacci
- Parte homogênea solução da forma rn
- Parte não-homogênea métodos dos coeficientes
indeterminados (termo não homogêneo1)
18Exemplo 3 Cálculo do n-ésimo elemento da
seqüência de Fibonacci
19Exemplo 3 Cálculo do n-ésimo elemento da
seqüência de Fibonacci
- S(n) número de somas efetuadas para calcular
n-ésimo termo - S(n) S(n-1) S(n-2) 1
n 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
S(n) 0 0 1 2 4 7 12 20 33 54 88 143 232 376 609 1596
20Exemplo 3 Cálculo do n-ésimo elemento da
seqüência de Fibonacci
Algoritmo 1
Algoritmo 2
f100 21 dígitos decimais
Algoritmo 3
Pascal, CDC Cyber 835
n102 n108 109 anos _ 1 ½ ms
25 minutos ½ ms 2 ms