projeto e análise de algoritmos
Post on 05-Jan-2016
21 Views
Preview:
DESCRIPTION
TRANSCRIPT
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 1
Projeto e Análise de Algoritmos
Celso Carneiro Ribeirohttp://www.inf.puc-rio.br/~celso
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 2
Parte 1
Introdução
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 3
• 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.
Alguns exemplos
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 4
O 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.
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 5
O 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)
y ou 2x
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 6
Qual algoritmo utilizar para resolver um problema?
Quando se resolve um problema, é necessário
decidir-se pelo algoritmo a ser utilizado.
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 7
Exemplo 1: Multiplicação de dois números inteiros com n dígitos
191945
855
45405
19
45
Algoritmo 1: ~n2 Algoritmo 2: ~n2 Algoritmo 3: ~n1.59
3822
767611
1521525
3042
6086081
855
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 8
Exemplo 2: MDC – Algoritmo ingênuo
Entrada: x, y Z*
Saída: MDC(x, y) = Max{ z Z | a,b Z, x = az, y=bz }
Function mdc(x, y: integer): integer var t: integerinício
se x<y então t xsenão t y
enquanto (x mod t <>0) ou (y mod t<>0) faça t t-1;
mdc tfim
fim_function
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 9
Exemplo 2: MDC – Algoritmo de Euclides
MDC (54180, 13125) = ?
4 7 1 4 3
54180 13125 1680 1365 315 105
1680 1365 315 105 0
Function mdc_e(x, y: integer): integer início
se y=0 então mdc_exsenão mdc_emdc_e(y, x mod y)
fimfim_function_mdc_e
MDC (54180, 13125) = 105
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 10
Exemplo 2: MDC
Algoritmo ingênuo realiza 13020 iterações.
Algoritmo de Euclides realiza 5 iterações!
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 11
Exemplo 2: MDC – Algoritmo de Euclides
Eliminação da recursão
function mdc(x, y: integer): integer var t: integerinício
enquanto y<>0 faça início
t x mod yx yy t
fimmdc_e_i x
fimfim_function_mdc
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 12
an = an-1 + an-2
a0 = 0a1 = 1
Exemplo 3: Cálculo do n-ésimo elemento da seqüência de Fibonacci
Seqüência de Fibonacci:
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 13
function fib1(n) se n<2 então retorne nsenão retorne fib1(n-1) + fib1(n-2)
fim_function_fib1
Exemplo 3: Cálculo do n-ésimo elemento da seqüência de Fibonacci
Algoritmo 1
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 14
Exemplo 3: Cálculo do n-ésimo elemento da seqüência de Fibonacci
Algoritmo 2
function fib2(n) i 0j 1para k=1 até n faça
j i+ji j-i
fim_pararetorne j
fim_function_fib2
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 15
Exemplo 3: Cálculo do n-ésimo elemento da seqüência de Fibonacci
Algoritmo 3
function fib3(n) i 1, j 0, k 0, h 1enquanto n>0 faça se n é ímpar então
t j.h j i.h + j.k + ti i.k + t
fim_se t h2
h 2.k.h + t k k2 + t n n div 2fim_enquantoretorne j
fim_function_fib3
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 16
Exemplo 3: Cálculo do n-ésimo elemento da seqüência de Fibonacci
Cálculo da complexidade
• 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
1)1()0(
1)2()1()(
TT
nTnTnT
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 17
• Parte homogênea: solução da forma rn
• Parte não-homogênea: métodos dos coeficientes indeterminados (termo não homogêneo=1)
Exemplo 3: Cálculo do n-ésimo elemento da seqüência de Fibonacci
Cálculo da complexidade
nn
nnn
banT
r
rrrrr
2
51
2
51)(
2
51
010 221
1)1(
1)0(
12
51
2
51)(
11
T
T
banT
AAAAnn
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 18
Exemplo 3: Cálculo do n-ésimo elemento da seqüência de Fibonacci
Cálculo da complexidade
n
nn
OnT
nT
ba
2
51)(
12
51
2
51
5
2)(
5
51
5
51
11
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 19
Exemplo 3: Cálculo do n-ésimo elemento da seqüência de Fibonacci
Cálculo da complexidade
)618.1(
618.1)1(
)(lim
n
n
O
nS
nS
• 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
Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 20
Exemplo 3: Cálculo do n-ésimo elemento da seqüência de Fibonacci
Cálculo da complexidade
n
n
n
log~
~
2
51~
n=102 n=108
109 anos _
1 ½ ms 25 minutos ½ ms 2 ms
Algoritmo 1:
Algoritmo 2:
Algoritmo 3:
Algoritmo 1:Algoritmo 2:Algoritmo 3:
f100: 21 dígitos decimais
Pascal, CDC Cyber 835:
top related