Aula 06: Análise matemática de algoritmos recursivos

Documentos relacionados
Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Modelagem com relações de recorrência. Exemplo: Determinada população dobra a cada ano; população inicial = 5 a n = população depois de n anos

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência

Programação I Aula 15 Definições recursivas

Análise de Problemas Recursivos. Algoritmos e Estruturas de Dados Flavio Figueiredo (

Programação I Aula 15 Definições recursivas Pedro Vasconcelos DCC/FCUP

Técnicas de projeto de algoritmos: Indução

Programação Estruturada

Análise de algoritmos

Técnicas de análise de algoritmos

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

Comparação com Divisão e Conquista

O termo Programação Dinâmica é um bocado infeliz.

Processamento da Informação

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia. 23 de Março de 2018

Divisão e Conquista. Norton T. Roman. Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder

Análise de algoritmos

Lista de Exercícios 6: Soluções Funções

Projeto e Análise de Algoritmos

05 Análise de Algoritmos (parte 4) SCC201/501 - Introdução à Ciência de Computação II

Algoritmos e Estruturas de Dados I

Análise de Complexidade para algoritmos iterativos e recursivos

Análise de Algoritmos Parte 4

Relações de recorrência

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 4, 6

Divisão e Conquista. Fernando Lobo. Algoritmos e Estrutura de Dados II. É uma técnica para resolver problemas (veremos outras técnicas mais adiante).

1 a Lista de Exercícios

Recursividade. Recursividade

Recursão David Déharbe

Aula 03: Análise de algoritmos melhor caso, pior caso e caso médio

MC102 Aula 27 Recursão II

Teoria da Computação. Aula 4 Técnicas de Análise 5COP096. Aula 4 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Projeto e Análise de Algoritmos Projeto de Algoritmos Programação Dinâmica. Prof. Humberto Brandão

ANÁLISE DE ALGORITMOS: PARTE 3

Introdução à Análise Algoritmos

SCC Capítulo 3 Análise de Algoritmos - Parte 2

Teoria da Computação. Aula 3 Comportamento Assintótico 5COP096. Aula 3 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Recursividade. Objetivos do módulo. O que é recursividade

Solução de Recorrências

Classes, Herança e Interfaces

Algoritmos de ordenação Quicksort

Aula 1. Teoria da Computação III

Introdução à Programação / Programação I

ALGORITMOS AVANÇADOS UNIDADE II Recursividade. Luiz Leão

Relações de Recorrência

Análise e Complexidade de Algoritmos

SCC Capítulo 2 Recursão

Algoritmos de Ordenação: Cota Inferior

Estruturas de Dados Algoritmos

Prof. A. G. Silva. 25 de setembro de Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de / 35

Estrutura de Dados Conceitos Iniciais

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013

Trabalho Prático 1. Valor: 1,0 pontos (10% da nota total) Data de Entrega: 02/05/2010

Luís Fernando Schultz Xavier da Silveira. 12 de maio de 2010

Mergesort. Aula 04. Algoritmo Mergesort. Divisão e Conquista. Divisão e Conquista- MergeSort

ANÁLISE DE ALGORITMOS: PARTE 4

Lista de Exercícios 6 Funções

Algoritmos e Estruturas de Dados I Linguagem C

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Recursividade

Estruturas de Dados 2

Universidade Federal da Grande Dourados Faculdade de Ciências Exatas e Tecnologia Bacharelado em Sistemas de Informação Estruturas de Dados I Lista II

Resposta da pergunta 2: Θ(n 3 ). Resposta da pergunta 8: 1. 7 O(n). Sim. 22. n log n O(1). Não. 3. n + 7 O(n). Sim. 4. n + 7 O(1). Não.

O Teorema Mestre da Complexidade

Algoritmos e Complexidade

Algoritmos de Ordenação: QuickSort

Introdução à Ciência da Computação II. Recursão. Prof. Ricardo J. G. B. Campello

# Estrutura de Dados # Aula 08 Recursão (conceito, utilização, exemplos) Prof. Leinylson Fontinele Pereira

Análise e Complexidade de Algoritmos

Método de Gauss-Jordan e Sistemas Homogêneos

CT-234. Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

CES-11. Noções de complexidade de algoritmos. Complexidade de algoritmos. Avaliação do tempo de execução. Razão de crescimento desse tempo.

Análise de Algoritmos

Matemática Discreta - 06

Introdução à Computação II Unesp Rio Claro 2012Prof. Rafael Oliveira

Referências e materiais complementares desse tópico

Uma recorrência é uma equação que descreve uma função em termos do seu valor em entradas menores

BCC202 - Estrutura de Dados I

PUC-Rio Departamento de Informática Prof. Marcus Vinicius S. Poggi de Aragão Período: Horário: 4as-feiras de 13 às 16 horas - Sala 520L

Introdução à Programação Aula 16 Mais exemplos de recursão

Recursividade. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Construção de Algoritmos II Aula 06

Universidade Federal do ABC Programação Estruturada Fabrício Olivetti França Lista de Exercícios 02

Aula 05: - Recursão (parte 1)

Projeto e Análise de Algoritmos

Relações de recorrência

Lista 2 - PMR2300/3200

Sobre a análise de algoritmos...

Análise e Projeto de Algoritmos

Aula prática 5. Funções Recursivas

EEL470 Algoritmos e Estruturas de Dados Prof. Heraldo L. S. Almeida Prova 1 (22/05/2009)

Recursividade e relações de recorrência

Recursividade. Estrutura de Dados. Prof. Kleber Rezende

Funções. Antonio Alfredo Ferreira Loureiro. UFMG/ICEx/DCC MD Funções 1

Fernando Lobo. Algoritmos e Estrutura de Dados. Outra técnica de concepção de algoritmos, tal como Divisão e Conquista.

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser

Lista de Exercícios sobre Recursividade

Análise de algoritmos

Recursividade. Métodos iterativos. Prof. Cesar Augusto Tacla. Métodos iterativos utilizam estruturas de repetição

Projeto e Análise de Algoritmos. Introdução. Prof. Ademir Constantino Universidade Estadual de Maringá Departamento de Informática

Transcrição:

Aula 06: Análise matemática de algoritmos recursivos David Déharbe Programa de Pós-graduação em Sistemas e Computação Universidade Federal do Rio Grande do Norte Centro de Ciências Exatas e da Terra Departamento de Informática e Matemática Aplicada 1 / 33

Contexto Entender problema Escolher abordagem Projetar algoritmo Provar correção Analizar complexidade Codificar algoritmo 2 / 33

Estrutura da apresentação 1 arcabouço teórico; 2 melhor caso, pior caso, caso médio; 3 notações asintóticas; O, Ω, Θ; 4 análise de algoritmos não recursivos; 5 análise de algoritmos recursivos. 3 / 33

Bibliografia usada (seções 2.4, 2.5) 4 / 33

Exemplo introdutório Exemplo (Fatorial) F(n) 1 if n = 0 then return 1 2 else return n F (n 1) Tamanho da entrada: n. Operação básica: multiplicação/teste n = 0/chamada recursiva Seja M(n) o número de multiplicações: M(n) = 1 + M(n 1) M(0) = 0 M é definida por recorrência. Como encontrar uma expressão fechada, não recursiva, de M(n)? 5 / 33

Plano da aula Introdução Um exemplo introdutório Estratégia de análise Exemplo 2 Exemplo 3 Interlúdio calculatório Exemplo 4: A sequência de Fibonacci 6 / 33

Resolução de recorrência por substituição M(n) = 1 + M(n 1) = 1 + (1 + M(n 2)) = 2 + M(n 2) = 2 + (1 + M(n 3)) = 3 + M(n 3) Conjectura: M(n) = i + M(n i) Como é conhecido M(0) = 0 = M(n n), então M(n) = n + M(0) = n. 7 / 33

Estratégia de análise 1. Identificar um parâmetro representando o tamanho da entrada 2. Identificar a operação básica do algoritmo 3. Verificar se o número de vezes que a operação básica é executada pode variar com entradas do mesmo tamanho. Se for o caso, o pior caso, a complexidade média e o melhor caso devem ser averiguados individualmente. 4. Estabelecer uma relação de recorrência que corresponde ao número de vezes que uma operação é executada. Estabelecer o valor inicial também. 5. Resolver a recorrência. Pelo menos, enquadrar o crescimento asintótico da relação. 8 / 33

Torres de Hanoi A Torre de Hanói é um quebra-cabeça que consiste em uma base contendo três pinos, em um dos quais são dispostos alguns discos uns sobre os outros, em ordem crescente de diâmetro, de cima para baixo. O problema consiste em passar todos os discos de um pino para outro qualquer, usando um dos pinos como auxiliar, de maneira que um disco maior nunca fique em cima de outro menor em nenhuma situação. (Wikipedia) 9 / 33

Resolução (recursiva) Hanoi(n, src, dest, aux) 1 if n = 1 2 return Move(src, dest) 3 else 4 Hanoi(n 1, src, aux, dest) 5 Move(src, dest) 6 Hanoi(n 1, aux, dest, src) 10 / 33

Aplicação da estratégia Hanoi(n, src, dest, aux) 1 if n = 1 2 return Move(src, dest) 3 else 4 Hanoi(n 1, src, aux, dest) 5 Move(src, dest) 6 Hanoi(n 1, aux, dest, src) Tamanho da entrada: n Operação básica: mover um disco M(n) = M(n 1) + 1 + M(n 1) = 2 M(n 1) + 1 se n > 1 M(1) = 1. Resolver M. 11 / 33

Aplicação da estratégia M(n) = 2 M(n 1) + 1 = 2 (2 M(n 2) + 1) + 1 = 4 M(n 2) + 3 = 4 (2 M(n 3) + 1) + 3 = 8 M(n 3) + 7 = 2 i M(n i) + (2 i 1) (note que 1 = n (n 1)) = 2 n 1 M(n (n 1)) + (2 n 1 1) = 2 n 1 M(1) + 2 n 1 1 = 2 n 1 + 2 n 1 1 = 2 2 n 1 1 M(n) = 2 n 1 12 / 33

Observações A resolução recursiva do problema das Torres de Hanoi cabe em 5 linhas. Tem complexidade exponencial No caso, não tem solução mais eficiente. Mas cuidado: concisão não é sinônimo de eficiência! 13 / 33

Árvore das chamadas recursivas Permite visualizar todas as chamadas realizadas por um algoritmo recursivo: pode ser útil para analizar a complexidade. n n 1 n 1 n 2 n 2 n 2 n 2 2 2 2 2 1 1 1 1 1 1 1 1 14 / 33

Número de algarismos binários de um inteiro Binary(n) 1 if n 1 2 return 1 3 else 4 return Binary( n/2 ) + 1 15 / 33

Aplicação da estratégia Binary(n) 1 if n 1 2 return 1 3 else 4 return Binary( n/2 ) + 1 Tamanho da entrada: n Operação básica: adição A(n) = 1 + A( n/2 ) A(1) = A(0) = 0. Resolver A. 16 / 33

A(n) = 1 + A( n/2 ) A(1) = A(0) = 0. Resolver A? Vamos considerar o caso de n = 2 k (n é potência de 2). A(n) = 1 + A( 2 k /2 ) = 1 + A(2 k 1 ) = 1 + (1 + A( 2 k 1 /2 ) = 2 + A(2 k 2 ) = i + A(2 k i ) = k + A(2 k k ) = k + A(2 0 ) = k + A(1) = k = log 2 n Θ(log n) 17 / 33

Resultados matemáticos relevantes Teorema Master Relações de recorrência de segunda ordem 18 / 33

O teorema Master Hipóteses = http://en.wikipedia.org/wiki/master_theorem Considere a sequência T (n) definida pela seguinte relação de recorrência: T (n) = at ( n ) + f (n), onde a 1, b 1 b Aplicação a algoritmos recursivos: n tamanho do problema a quantidade de chamadas recursivas n/b tamanho dos sub-problemas f (n) custo sem contar as chamadas recursivas divisão em sub-problemas, combinação dos resultados parciais. 19 / 33

O teorema Master T (n) = at ( n ) + f (n), onde a 1, b 1 b 1. Se f (n) O(n c ) onde c < log b a, então T (n) Θ(n log ba ) 2. Se existe k 0 tal que f (n) Θ(n c log k n) onde c = log b a então T (n) Θ(n c log k+1 n) 3. Se 3.1 f (n) Ω(n c ), onde c > log b a e 3.2 (condição de regularidade) af ( n b ) kf (n) para k < 1 e n suficientemente grande, então T (n) Θ(f (n)). Cormen, Leiserson, Rivest, Stein 20 / 33

O teorema Master Propriedades: caso 1 T (n) = at ( n ) + f (n), onde a 1, b 1 b Se f (n) O(n c ) onde c < log b a, então T (n) Θ(n log ba ) Exemplo: T (n) = 8T ( n 2 ) + n2 Temos que: a = 8, b = 2, f (n) = n 2, e f (n) O(n 2 ), logo c = 2 < 3 = log 2 8 = log b a. Pelo teorema T (n) Θ(n log b a ) = Θ(n 3 ) 21 / 33

O teorema Master Caso 2 T (n) = at ( n ) + f (n), onde a 1, b 1 b Se existe k 0 tal que f (n) Θ(n c log k n) onde c = log b a então T (n) Θ(n c log k+1 n) Exemplo: T (n) = 2T ( n 2 ) + n. Temos a = 2, b = 2, logo c = log2 2 = 1, e f (n) = n Θ(n) = Θ(n 1.1) = Θ(n c log k n), com k = 0, logo T (n) Θ(n log n). 22 / 33

O teorema Master Caso 3 T (n) = at ( n ) + f (n), onde a 1, b 1 b Se 1. f (n) Ω(n c ), onde c > log b a e 2. (condição de regularidade) af ( n b ) kf (n) para k < 1 e n suficientemente grande, então T (n) Θ(f (n)). Exemplo T (n) = 2T ( n 2 ) + n2 Temos a = 2, b = 2, f (n) = n 2, logo f (n) Ω(n c ), onde c = 2 > log b a, a condição de regularidade 2.( n 2 )2 = 2( n2 4 ) kn2 é satisfeita a partir de k = 1 2, então T (n) Θ(f (n)) = Θ(n 2 ) 23 / 33

O teorema Master Tamanho da representação binária Hipóteses do teorema master: A(n) = A( n/2 ) + 1 T (n) = at ( n ) + f (n), onde a 1, b 1 b Temos a = 1, b = 2, log 2 1 = 0, e n c = n 0 = 1 temos também f (n) = 1 Θ(n c log k n), com k = 0, logo A(n) Θ(n c log k+1 n), ou seja A(n) Θ(log n). 24 / 33

Resolução de relações de recorrência Recorrências lineares de segunda ordem com coeficientes constantes: a x(n) + b x(n 1) + c x(n 2) = f (n). Caso f (n) = 0, então a recorrência é homogênea. A equação ax 2 + bx + c = 0 é a equação característica da recorrência. 25 / 33

Resolução de relações de recorrência Teorema Seja r 1, r 2 as raizes da equação característica de uma recorrência linear homogênea de segunda ordem com coeficientes constantes. caso 1 Se r 1 and r 2 são números reais e distintos, a solução geral é x(n) = αr n 1 + βr n 2. caso 2 Se r 1 = r 2 = r, uma solução geral é x(n) = αr n + βnr n. caso 3 Se r 1,2 = u ± iv são complexos distintos, a solução geral é x(n) = γ n (α cos nθ + β sin nθ), onde θ = arctan v/u, γ = u 2 + v 2. Em todos os casos α e β são constantes reais. 26 / 33

Sequência de Fibonacci (exemplo) É uma sequência infinita, crescente, de números inteiros; http://en.wikipedia.org/wiki/fibonacci_number Definição da sequência, por recorrência; Aplicação do teorema: formulação não recorrente; Análise da complexidade de diferentes algoritmos. 27 / 33

Sequência de Fibonacci (exemplo) Sequência definida pelo matemático Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,... A sequência é definida por recorrência: caso geral: F (n) = F (n 1) + F (n 2), se n > 1, condições iniciais: F (0) = 0 e F (1) = 1. 28 / 33

Sequência de Fibonacci Note que: F (n) F (n 1) F (n 2) = 0, se n > 1. É uma relação de recorrência linear homogênea de segunda ordem, com coeficientes constantes. Sua equação característica é x 2 x 1 = 0. As raizes são r 1 = 1+ 5 2 e r 2 = 1 5 2. O termo geral é F (n) = α( 1+ 5 2 ) n + β( 1 5 2 ) n. Com as condições iniciais, temos α + β = 0 e 1+ 5 2 α + 1 5 2 β = 1. F (n) = 1 5 ( 1+ 5 2 ) n 1 5 ( 1 5 2 ) n = 1 5 (φ n ˆφ n ) Θ(φ n ). φ 1, 61803 e ˆφ 0, 61803 29 / 33

Sequência de Fibonacci Exemplo (Fibonacci) Fib(n) 1 if n 1 then return n 2 else return Fib(n 1) + Fib(n 2) tamanho da entrada: n operação básica: adição custo: caso geral: A(n) = A(n 1) + A(n 2) + 1 condições gerais: A(0) = A(1) = 0. resolver A(n)... 30 / 33

Sequência de Fibonacci Resolver: caso geral: A(n) = A(n 1) + A(n 2) + 1 condições gerais: A(0) = A(1) = 0. temos: A(n) A(n 1) A(n 2) = 1 não é homogênea. seja B(n) = A(n) + 1: B(n) B(n 1) B(n 2) = 0 é homogênea! mais ainda: B(n) = F (n + 1), logo B(n) = 1 5 (φ n+1 ˆφ n+1 ) Θ(φ n ). 31 / 33

Sequência de Fibonacci: versão eficiente Sem recursividade Fib-NR(n) 1 F [0] = 0, F [1] = 1 2 for i = 2 to n 3 F [i] = F [i 1] + F [i 2] 4 return F [n] Com recursividade Fib-Acc(n, k, x, y) 1 if n = k then return x + y 2 else return Fib-Acc(n, k + 1, y, x + y) Fib-R(n) 1 if n 1 then return n 2 else return Fib-Acc(n, 2, 0, 1) 32 / 33

Exercício Estabeleça a complexidade de Fib-NR e de Fib-R. 33 / 33