200 likes | 352 Views
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
E N D
Projeto e Análise de Algoritmos Celso Carneiro Ribeiro http://www.inf.puc-rio.br/~celso Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro
Parte 1 Introdução Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro
Alguns 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. Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro
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. Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro
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) Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro
Qual algoritmo utilizar para resolver um problema? Quando se resolve um problema, é necessário decidir-se pelo algoritmo a ser utilizado. Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro
Exemplo 1: Multiplicação de dois números inteiros com n dígitos Algoritmo 1: ~n2 Algoritmo 3: ~n1.59 Algoritmo 2: ~n2 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro
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: integer início se x<y então t x senão t y enquanto (x mod t <>0) ou (y mod t<>0) faça t t-1; mdc t fim fim_function Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro
Exemplo 2: MDC – Algoritmo de Euclides Function mdc_e(x, y: integer): integer início se y=0 então mdc_ex senão mdc_emdc_e(y, x mod y) fim fim_function_mdc_e MDC (54180, 13125) = ? MDC (54180, 13125) = 105 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro
Exemplo 2: MDC Algoritmo ingênuo realiza 13020 iterações. Algoritmo de Euclides realiza 5 iterações! Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro
Exemplo 2: MDC – Algoritmo de Euclides Eliminação da recursão function mdc(x, y: integer): integer var t: integer início enquanto y<>0 faça início t x mod y x y y t fim mdc_e_i x fim fim_function_mdc Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro
Exemplo 3:Cálculo do n-ésimo elemento da seqüência de Fibonacci Seqüência de Fibonacci: an = an-1 + an-2 a0 = 0 a1 = 1 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro
Exemplo 3:Cálculo do n-ésimo elemento da seqüência de Fibonacci Algoritmo 1 function fib1(n) se n<2 então retorne n senão retorne fib1(n-1) + fib1(n-2) fim_function_fib1 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro
Exemplo 3:Cálculo do n-ésimo elemento da seqüência de Fibonacci Algoritmo 2 function fib2(n) i 0 j 1 para k=1 até n faça j i+j i j-i fim_para retorne j fim_function_fib2 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro
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 1 enquanto n>0 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 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro
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 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro
Exemplo 3:Cálculo do n-ésimo elemento da seqüência de Fibonacci Cálculo da complexidade • Parte homogênea: solução da forma rn • Parte não-homogênea: métodos dos coeficientes indeterminados (termo não homogêneo=1) Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro
Exemplo 3:Cálculo do n-ésimo elemento da seqüência de Fibonacci Cálculo da complexidade Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro
Exemplo 3:Cálculo do n-ésimo elemento da seqüência de Fibonacci Cálculo da complexidade • S(n): número de somas efetuadas para calcular n-ésimo termo • S(n) = S(n-1) + S(n-2) + 1 Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro
Exemplo 3:Cálculo do n-ésimo elemento da seqüência de Fibonacci Algoritmo 1: Algoritmo 2: Algoritmo 3: Cálculo da complexidade Algoritmo 1: Algoritmo 2: f100: 21 dígitos decimais Algoritmo 3: Pascal, CDC Cyber 835: n=102 n=108 109 anos _ 1 ½ ms 25 minutos ½ ms 2 ms Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro