Análise de algoritmos. Parte II



Documentos relacionados
Análise de algoritmos

COMPLEXIDADE DE ALGORITMOS

COMPLEXIDADE DE ALGORITMOS COMPLEXIDADE DE ALGORITMOS

Algoritmos e Estruturas de Dados I. Recursividade. Pedro O.S. Vaz de Melo

Aula 01 Introdução Custo de um algoritmo, Funções de complexidad e Recursão

Análise de algoritmos Parte I

Teoria dos Grafos. Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada.

Metodologias de Programação

OBSERVAÇÕES: EXERCÍCIOS

Exercícios: Recursão

Análise e Projeto de Algoritmos

CURSO DE MATEMÁTICA BÁSICA PROGRAMA DE EDUCAÇÃO TUTORIAL CENTRO DE ENGENHARIA DA MOBILIDADE

Estruturas de Repetição

BCC202 - Estrutura de Dados I

Resolução de sistemas de equações lineares: Método de eliminação de Gauss

Programação Dinâmica. Aplicação directa - Fibonacci

Introdução à Algoritmos. Aula 11

Árvores de Decisão Matemática Discreta

O cilindro deitado. Eduardo Colli

Tipos de problemas de programação inteira (PI) Programação Inteira. Abordagem para solução de problemas de PI. Programação inteira

Sistemas de equações do 1 grau com duas variáveis LISTA 1

Exercícios de Fixação Aulas 05 e 06

CAP. II RESOLUÇÃO NUMÉRICA DE EQUAÇÕES NÃO LINEARES

CAMPUS DE GUARATINGUETÁ FACULDADE DE ENGENHARIA. Introdução à Programação em C. Algoritmos: Estruturas de Repetição. Prof. Dr. Galeno.J.

Algoritmos e Estruturas de Dados I. Variáveis Indexadas. Pedro O.S. Vaz de Melo

Equação e Inequação do 2 Grau Teoria

Capítulo 5: Repetições

Análise de Algoritmos

Calculando seno(x)/x com o interpretador Hall.

Algoritmo da raiz quadrada

Expressões de sequencias

Matemática Discreta. Leandro Colombi Resendo. Matemática Discreta Bacharel em Sistemas de Informações

1. Noção de algoritmo

2) Escreva um algoritmo que leia um conjunto de 10 notas, armazene-as em uma variável composta chamada NOTA e calcule e imprima a sua média.

Álgebra Linear Computacional

CAPÍTULO O Método Simplex Pesquisa Operacional

Versão 2 COTAÇÕES pontos pontos pontos pontos pontos pontos

PHP Estruturas de repetição

SUMÁRIO. 1. REVISÃO DE GINÁSIO Critérios de divisibilidade. 2. CONJUNTOS Introdução. Operações de conjuntos. Conjuntos numéricos

Programação de Computadores I Estruturas de Repetição PROFESSORA CINTIA CAETANO

Prática. Exercícios didáticos ( I)

TEORIA 5: EQUAÇÕES E SISTEMAS DO 1º GRAU MATEMÁTICA BÁSICA

Apostila de Matemática 16 Polinômios

Apontamentos de matemática 5.º ano - Múltiplos e divisores

Um pouco da História dos Logaritmos

Teoria de Jogos. Algoritmo Minimax e Alfa-Beta AED

Árvore de Decisão. 3. Árvore de Decisão

Árvores Parte 1. Aleardo Manacero Jr. DCCE/UNESP Grupo de Sistemas Paralelos e Distribuídos

Sumário 1. PROBLEMAS DE RACIOCÍNIO INTUITIVO ESPACIAL, NUMÉRICO E VERBAL PROBLEMAS DE ARGUMENTAÇÃO LÓGICA INTUITIVA...55

Matrizes e Sistemas Lineares. Professor: Juliano de Bem Francisco. Departamento de Matemática Universidade Federal de Santa Catarina.

Método Simplex Revisado

Quinto roteiro de exercícios no Scilab Cálculo Numérico

Semana 7 Resolução de Sistemas Lineares

Actividade de enriquecimento. Algoritmo da raiz quadrada

MÉTODO SIMPLEX QUADRO SIMPLEX

AV2 - MA UMA SOLUÇÃO

Raiz quadrada. Índice. Propriedades

Geometria Analítica. Geometria Analítica. Geometria Analítica 15/08/2012. Objetivos gerais da disciplina. Prof. Luiz Antonio do Nascimento

Em linguagem matemática, essa proprieade pode ser escrita da seguinte maneira: x. 1 = x Onde x representa um número natural qualquer.

Lista de Exercícios Critérios de Divisibilidade

Unidade 5. A letra como incógnita equações do segundo grau

Uma equação trigonométrica envolve como incógnitas arcos de circunferência e relacionados por meio de funções trigonométricas.

Algoritmos e Estruturas de Dados II. Introdução

Linguagens de Programação:

Introdução à Programação. Funções e Procedimentos. Prof. José Honorato F. Nunes honoratonunes@gmail.com

Aula Extra. Depurador Code::Blocks. Monitoria de Introdução à Programação

Recursividade. Estrutura de Dados. Prof. Kleber Rezende

Medidas de Tendência Central. Introdução Média Aritmética Moda Mediana

Prova Escrita de MATEMÁTICA A - 12o Ano a Fase

TUTORIAL MATLAB Victor Breder 2016

1 CLASSIFICAÇÃO 2 SOMA DOS ÂNGULOS INTERNOS. Matemática 2 Pedro Paulo

Erros e Incertezas. Rafael Alves Batista Instituto de Física Gleb Wataghin Universidade Estadual de Campinas (Dated: 10 de Julho de 2011.

A primeira coisa ao ensinar o teorema de Pitágoras é estudar o triângulo retângulo e suas partes. Desta forma:

Complexidade de Algoritmos

Matemática para a Economia I - 1 a lista de exercícios Prof. - Juliana Coelho

UNIVERSIDADE DO ESTADO DE SANTA CATARINA CENTRO DE CIÊNCIAS TECNOLÓGICAS CCT DEPTO. DE ENG. DE PRODUÇÃO E SISTEMAS 1 REDES PERT-CPM

INF1005: Programação I. Algoritmos e Pseudocódigo

que não torne uma variável básica negativa. Se esse valor for infinito, o PL é ilimitado. Caso contrário, escolha uma variável

Arquitetura de Computadores I

MATEMÁTICA FINANCEIRA NO ENSINO MÉDIO: APRIMORANDO O DESENPENHO DE ALUNOS E PROFESSORES

=...= 1,0 = 1,00 = 1,000...

AMEI Escolar Matemática 9º Ano Sistemas de Equações

Resolução Numérica de Equações Parte I

Projecto Delfos: Escola de Matemática Para Jovens 1 TEORIA DOS NÚMEROS

Lista de Exercícios - Subtração

PROJETO PILOTO O uso do Material Dourado como ferramenta para compreender o Sistema de Numeração Decimal-posicional.

UNIPAC Araguari FACAE - Faculdade de Ciências Administrativas e Exatas SISTEMAS DE INFORMAÇÃO

FUNÇÃO QUADRÁTICA. Resumo

números decimais Inicialmente, as frações são apresentadas como partes de um todo. Por exemplo, teremos 2 de um bolo se dividirmos esse bolo

MATRIZ DA PROVA DE EXAME A NÍVEL DE ESCOLA AO ABRIGO DO DECRETO-LEI Nº 357/2007, DE 29 DE OUTUBRO

Universidade dos Açores Curso de Especialização Tecnológica Gestão da Qualidade Matemática

Usando potências de 10

Exercícios de Aprofundamento Mat Polinômios e Matrizes

Números escritos em notação científica

1 - RECORDANDO 2 - CENTRO NA ORIGEM 3 - EQUAÇÃO GERAL DA CIRCUNFERÊNCIA. Exercício Resolvido 2: Exercício Resolvido 1: Frente I

Unidade 10 Análise combinatória. Introdução Princípio Fundamental da contagem Fatorial

Congruências Lineares

IBM1018 Física Básica II FFCLRP USP Prof. Antônio Roque Aula 7

Transcrição:

Análise de algoritmos Parte II 1

Análise de algoritmos Existem basicamente 2 formas de estimar o tempo de execução de programas e decidir quais são os melhores Empírica ou teoricamente É desejável e possível estimar qual o melhor algoritmo sem ter que executá-los Função da análise de algoritmos 2

Calculando o tempo de execução Supondo que as operações simples demoram uma unidade de tempo para executar, considere o n 3 programa abaixo para calcular o resultado de i Início declare soma_parcial numérico; soma_parcial 0; para i 1 até n faça soma_parcial soma_parcial+i*i*i; escreva(soma_parcial); Fim i= 1 3

Calculando o tempo de execução Supondo que as operações simples demoram uma unidade de tempo para executar, considere o n 3 programa abaixo para calcular o resultado de i Início declare soma_parcial numérico; soma_parcial 0; para i 1 até n faça soma_parcial soma_parcial+i*i*i; escreva(soma_parcial); Fim 1 unidade de tempo i= 1 1 unidade para inicialização de i, n+1 unidades para testar se i n e n unidades para incrementar i = 2n+2 4 unidades (1 da soma, 2 das multiplicações e 1 da atribuição) executada n vezes (pelo comando para ) = 4n unidades 4

Calculando o tempo de execução Supondo que as operações simples demoram uma unidade de tempo para executar, considere o n 3 programa abaixo para calcular o resultado de i Início declare soma_parcial numérico; soma_parcial 0; para i 1 até n faça soma_parcial soma_parcial+i*i*i; Custo total: somando escreva(soma_parcial); tudo, tem-se 6n+4 Fim unidades de de tempo, ou ou seja, a função é O(n) O(n) 1 unidade de tempo i= 1 1 unidade para inicialização de i, n+1 unidades para testar se i n e n unidades para incrementar i = 2n+2 4 unidades (1 da soma, 2 das multiplicações e 1 da atribuição) executada n vezes (pelo comando para ) = 4n unidades 5

Calculando o tempo de execução Ter que realizar todos esses passos para cada algoritmo (principalmente algoritmos grandes) pode se tornar uma tarefa cansativa Em geral, como se dá a resposta em termos do bigoh, costuma-se desconsiderar as constantes e elementos menores dos cálculos No exemplo anterior A linha soma_parcial 0 é insignificante em termos de tempo É desnecessário ficar contando 2, 3 ou 4 unidades de tempo na linha soma_parcial soma_parcial+i*i*i O que realmente dá a grandeza de tempo desejada é a repetição na linha para i 1 até n faça 6

Regras para o cálculo Repetições O tempo de execução de uma repetição é pelo menos o tempo dos comandos dentro da repetição (incluindo testes) vezes o número de vezes que é executada 7

Regras para o cálculo Repetições aninhadas A análise é feita de dentro para fora O tempo total de comandos dentro de um grupo de repetições aninhadas é o tempo de execução dos comandos multiplicado pelo produto do tamanho de todas as repetições O exemplo abaixo é O(n 2 ) para i 0 até n faça para j 0 até n faça faça k k+1; 8

Regras para o cálculo Comandos consecutivos É a soma dos tempos de cada um, o que pode significar o máximo entre eles O exemplo abaixo é O(n 2 ), apesar da primeira repetição ser O(n) para i 0 até n faça k 0; para i 0 até n faça para j 0 até n faça faça k k+1; 9

Regras para o cálculo Se... então... senão Para uma cláusula condicional, o tempo de execução nunca é maior do que o tempo do teste mais o tempo do maior entre os comandos relativos ao então e os comandos relativos ao senão O exemplo abaixo é O(n) se i<j então i i+1 senão para k 1 até n faça i i*k; 10

Regras para o cálculo Chamadas a sub-rotinas Uma sub-rotina deve ser analisada primeiro e depois ter suas unidades de tempo incorporadas ao programa/sub-rotina que a chamou 11

Exercício Estime quantas unidades de tempo são necessárias para rodar o algoritmo abaixo Início declare i e j numéricos; declare A vetor numérico de n posições; i 1; enquanto i n faça A[i] 0; i i+1; para i 1 até n faça para j 1 até n faça A[i] A[i]+i+j; Fim 12

Exercício em duplas Analise a sub-rotina recursiva abaixo sub-rotina fatorial(n: numérico) início declare aux numérico; se n 1 então aux 1 senão aux n*fatorial(n-1); fatorial aux; fim 13

Regras para o cálculo Sub-rotinas recursivas Se a recursão é um disfarce da repetição (e, portanto, a recursão está mal empregada, em geral), basta analisá-la como tal O exemplo anterior é obviamente O(n) ub-rotina fatorial(n: numérico) nício eclare aux numérico; e n 1 então aux 1 senão aux n*fatorial(n-1); atorial aux; im Eliminando a recursão sub-rotina fatorial(n: numérico) início declare aux numérico; aux 1; enquanto n>1 faça aux aux*n; n n-1; fatorial aux; fim 14

Regras para o cálculo Sub-rotinas recursivas Em muitos casos (incluindo casos em que a recursividade é bem empregada), é difícil transformá-la em repetição Nesses casos, para fazer a análise do algoritmo, pode ser necessário fazer uma análise de recorrência Recorrência: equação ou desigualdade que descreve uma função em termos de seu valor em entradas menores Caso típico: algoritmos de dividir-e-conquistar, ou seja, algoritmos que desmembram o problema em vários subproblemas que são semelhantes ao problema original, mas menores em tamanho, resolvem os subproblemas recursivamente e depois combinam essas soluções com o objetivo de criar uma solução para o problema original Exemplos? 15

Regras para o cálculo Exemplo de uso de recorrência Números de Fibonacci 0,1,1,2,3,5,8,13... f(0)=0, f(1)=1, f(i)=f(i-1)+f(i-2) sub-rotina fib(n: numérico) início declare aux numérico; se n 1 então aux 1 senão aux fib(n-1)+fib(n-2); fib aux; fim 16

Regras para o cálculo Exemplo de uso de recorrência Números de Fibonacci 0,1,1,2,3,5,8,13... f(0)=0, f(1)=1, f(i)=f(i-1)+f(i-2) sub-rotina fib(n: numérico) início declare aux numérico; se n 1 então aux 1 senão aux fib(n-1)+fib(n-2); fib aux; fim Seja T(n) o tempo de execução da função. Caso 1: Se n=0 ou 1, o tempo de execução é constante, que é o tempo de testar o valor de n no comando se, mais atribuir o valor 1 à variável aux, mais atribuir o valor de aux ao nome da função; 17 ou seja, T(0)=T(1)=3.

Regras para o cálculo Exemplo de uso de recorrência Números de Fibonacci 0,1,1,2,3,5,8,13... f(0)=0, f(1)=1, f(i)=f(i-1)+f(i-2) sub-rotina fib(n: numérico) início declare aux numérico; se n 1 então aux 1 senão aux fib(n-1)+fib(n-2); fib aux; fim Caso 2: Se n>2, o tempo consiste em testar o valor de n no comando se, mais o trabalho a ser executado no senão (que é uma soma, uma atribuição e 2 chamadas recursivas), mais a atribuição de aux ao nome da função; ou seja, a recorrência 18 T(n)=T(n-1)+T(n-2)+4, para n>2.

Regras para o cálculo Muitas vezes, a recorrência pode ser resolvida com base na prática e experiência do analista Alguns métodos para resolver recorrências Método da substituição Método mestre Método da árvore de recursão 19

Resolução de recorrências Método da substituição Supõe-se (aleatoriamente ou com base na experiência) um limite superior para a função e verifica-se se ela não extrapola este limite Uso de indução matemática O nome do método vem da substituição da resposta adequada pelo palpite Pode-se apertar o palpite para achar funções mais exatas 20

Resolução de recorrências Método mestre Fornece limites para recorrências da forma T(n)=aT(n/b)+f(n), em que a 1, b>1 e f(n) é uma função dada Envolve a memorização de alguns casos básicos que podem ser aplicados para muitas recorrências simples 21

Resolução de recorrências Método da árvore de recursão Traça-se uma árvore que, nível a nível, representa as recursões sendo chamadas Em seguida, em cada nível/nó da árvore, são acumulados os tempos necessários para o processamento No final, tem-se a estimativa de tempo do problema Este método pode ser utilizado para se fazer uma suposição mais informada no método da substituição 22

Resolução de recorrências Método da árvore de recursão Exemplo: algoritmo de ordenação de arranjos por intercalação Passo 1: divide-se um arranjo não ordenado em dois subarranjos Passo 2: se os subarranjos não são unitários, cada subarranjo é submetido ao passo 1 anterior; caso contrário, eles são ordenados por intercalação dos elementos e isso é propagado para os subarranjos anteriores 23

Ordenação por intercalação Exemplo com arranjo de 4 elementos Arranjo inicial 3 1 4 2 3 1 4 2 Divisão em arranjos menores 3 1 4 2 1 3 2 4 Intercalação em ordem 1 2 3 4 Arranjo final ordenado 24

Resolução de recorrências Método da árvore de recursão Considere o tempo do algoritmo (que envolve recorrência) T(n)=c, se n=1 n operações para a intercalação do passo final T(n)=2T(n/2)+cn, se n>1 T(n)=2(2T(n/4)+cn/2)+cn =4T(n/4)+2(cn/2)+cn = 4(2T(n/8)+4(cn/4))+2(cn/2) + cn = 8T(n/8)+ 3cn... = 2 i T(n/2 i ) + i(cn) Considerando o limite n/2 i = 1, logo i = log 2 n, e T(n) = 2 log2n T(1) + log 2 n(cn) = cn + cn log 2 n = cn log 2 n + cn 25

Resolução de recorrências 26

Resolução de recorrências 27

Resolução de recorrências Tem-se que: Na parte (a), há T(n) ainda não expandido Na parte (b), T(n) foi dividido em árvores equivalentes representando a recorrência com custos divididos (T(n/2) cada uma), sendo cn o custo no nível superior da recursão (fora da recursão e, portanto, associado ao nó raiz)... No fim, nota-se que o tamanho da árvore corresponde a (log n)+1, que é o número de vezes do custo dos níveis (iguais a n) Como resultado, tem-se cn logn + cn, ou seja, O(n log n) 28

Precauções A análise assintótica é uma ferramenta fundamental ao projeto, análise ou escolha de um algoritmo específico para uma dada aplicação No entanto, deve-se ter sempre em mente que essa análise esconde fatores assintoticamente irrelevantes, mas que em alguns casos podem ser relevantes na prática, particularmente se o problema de interesse se limitar a entradas (relativamente) pequenas Por exemplo, um algoritmo com tempo de execução da ordem de 10 100 n é O(n), assintoticamente melhor do que outro com tempo 10 n log n, o que nos faria, em princípio, preferir o primeiro No entanto, 10 100 é o número estimado por alguns astrônomos como um limite superior para a quantidade de átomos existente no universo observável! 29

Análise de algoritmos recursivos Exemplo: pesquisa binária pelo número 3 Arranjo ordenado 1 3 5 6 8 11 15 16 17 É o elemento procurado? 1 3 5 6 8 11 15 16 17 É o elemento procurado? 1 3 5 6 8 11 15 16 17 É o elemento procurado? 30

Análise de algoritmos recursivos Implemente o algoritmo da busca binária em um arranjo ordenado 31

Análise de algoritmos recursivos Teste e analise o algoritmo 32

Análise de algoritmos recursivos Problema da maior soma de subseqüência em um arranjo -2 11-4 13-5 -2 20 33

Análise de algoritmos recursivos Faça um algoritmo para resolver o problema e analise-o 34

Análise de algoritmos recursivos Idem para o Algoritmo de Euclides para calcular o máximo divisor comum para 2 números 35

Análise de algoritmos recursivos Idem para o Algoritmo para calcular x n 36