projeto e análise de algoritmos

20
Setembro 200 4 Projeto e Análise de Algoritmos - Celso Carneiro R ibeiro 1 Projeto e Análise de Algoritmos Celso Carneiro Ribeiro http://www.inf.puc- rio.br/~celso

Upload: wyoming-meyer

Post on 05-Jan-2016

21 views

Category:

Documents


0 download

DESCRIPTION

Projeto e Análise de Algoritmos. Celso Carneiro Ribeiro http://www.inf.puc-rio.br/~celso. Parte 1. Introdução. Alguns exemplos. Totalizar uma folha de pagamento Ordenar uma lista de números Multiplicar dois números inteiros Multiplicar duas matrizes - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Projeto e Análise de Algoritmos

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

Page 2: Projeto e Análise de Algoritmos

Setembro 2004 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro 2

Parte 1

Introdução

Page 3: Projeto e Análise de Algoritmos

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

Page 4: Projeto e Análise de Algoritmos

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.

Page 5: Projeto e Análise de Algoritmos

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

Page 6: Projeto e Análise de Algoritmos

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.

Page 7: Projeto e Análise de Algoritmos

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

Page 8: Projeto e Análise de Algoritmos

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

Page 9: Projeto e Análise de Algoritmos

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

Page 10: Projeto e Análise de Algoritmos

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!

Page 11: Projeto e Análise de Algoritmos

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

Page 12: Projeto e Análise de Algoritmos

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:

Page 13: Projeto e Análise de Algoritmos

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

Page 14: Projeto e Análise de Algoritmos

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

Page 15: Projeto e Análise de Algoritmos

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

Page 16: Projeto e Análise de Algoritmos

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

Page 17: Projeto e Análise de Algoritmos

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

Page 18: Projeto e Análise de Algoritmos

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

Page 19: Projeto e Análise de Algoritmos

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

Page 20: Projeto e Análise de Algoritmos

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: