Medida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Documentos relacionados
Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Análise de Algoritmos

Medida do Tempo de Execução de um Programa

Análise de Algoritmos

BCC202 - Estrutura de Dados I

Aula 1. Teoria da Computação III

Quantidade de memória necessária

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

Algoritmo. Exemplo. Definição. Programação de Computadores Comparando Algoritmos. Alan de Freitas

ESTRUTURAS DE DADOS prof. Alexandre César Muniz de Oliveira

Técnicas de análise de algoritmos

Complexidade de algoritmos Notação Big-O

2. Complexidade de Algoritmos

Área que visa determinar a complexidade (custo) de um algoritmo, com isso é possível:

TRANSFORMADA DE LAPLACE. Revisão de alguns: Conceitos Definições Propriedades Aplicações

ANÁLISE DE ALGORITMOS: PARTE 3

Teoria da Computação Aula 8 Noções de Complexidade

Complexidade de Algoritmos

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

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

Introdução à Análise de Algoritmos

Técnicas de Programação III Análise de Algoritmos (Continuação)

Comportamento Assintótico. Algoritmos e Estruturas de Dados Flavio Figueiredo (

INF 1010 Estruturas de Dados Avançadas

Análise de Complexidade de Algoritmos. mario alexandre gazziro

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

XX OLIMPÍADA REGIONAL DE MATEMÁTICA DE SANTA CATARINA Resolução do treinamento 10 Nível 2

Teoria dos Grafos Aula 7

Um exemplo de TCM (Trellis Coded Modulation) - versão draft

Análise de algoritmos. Parte I

Análise de algoritmos. Parte I

Projeto e Análise de Algoritmos

Introdução à Ciência da Computação II

Introdução. Última alteração: 10 de Outubro de Transparências elaboradas por Charles Ornelas, Leonardo Rocha, Leonardo Mata e Nivio Ziviani

Projeto e Análise de Algoritmos

1 Transformada de Laplace de u c (t)

Complexidade assintótica de programas

Projeto de Algoritmos Introdução

Análise de complexidade

Universidade Salvador UNIFACS Cursos de Engenharia Métodos Matemáticos Aplicados / Cálculo Avançado / Cálculo IV Profa: Ilka Rebouças Freire

Análise de algoritmos

Introdução. Algoritmos, Estruturas de Dados e Programas. Escolha da Representação dos Dados. Estruturas de dados

Intervalo de Confiança para a Diferença entre Duas Médias Amostrais

Projeto de Algoritmos Introdução

Teoria da Computação Aula 9 Noções de Complexidade

Belo Horizonte PROGRAMAÇÃO MODULAR. Volume V. Estruturas de Dados Fundamentais. Roberto S. Bigonha

ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS

Condução de calor numa barra semi-infinita

Resolução do exame de 1 a época

Módulo 7. Complexidade de Algoritmos. Algoritmos e Estruturas de Dados II C++ Rone Ilídio

Análise de algoritmos Parte I

Considere as seguintes expressões que foram mostradas anteriormente:

Medida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Noções de complexidade de algoritmos

Projeto de Algoritmos Introdução

Aula 7 Resposta no domínio do tempo - Sistemas de segunda ordem

Melhores momentos AULA 1. Algoritmos p.38/86

Universidade Federal Fluminense - UFF-RJ

ALGORITMOS AVANÇADOS UNIDADE I Análise de Algoritmo - Notação O. Luiz Leão

Análise de Algoritmos Estrutura de Dados II

Algoritmos Avançados Análise de Complexidade

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

MOVIMENTOS VERTICAIS NO VÁCUO

INF 1010 Estruturas de Dados Avançadas

Transformada de Laplace

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

Algoritmos e Estruturas de Dados I Prof. Tiago Eugenio de Melo

15/03/2018. Professor Ariel da Silva Dias Algoritmo e Contagem de Instruções. Prof. Ariel da Silva Dias -

COMPLEXIDADE DE ALGORITMOS

Estruturas de Dados Algoritmos

Sinais e Sistemas Mecatrónicos

2 Cargas Móveis, Linhas de Influência e Envoltórias de Esforços

A notação utilizada na teoria das filas é variada mas, em geral, as seguintes são comuns:

Análise e Complexidade de Algoritmos

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

1 s. Propriedades da transformada de Laplace A seguir apresentam-se algumas propriedades importantes da transformada de Laplace:

Suponha ser possível determinar um modelo de regressão. Considere um experimento fatorial com fatores testados a l

ALGORITMOS E ESTRUTURAS DE DADOS 2011/2012 ANÁLISE DE ALGORITMOS. Armanda Rodrigues 3 de Outubro 2011

Revisão de Alguns Conceitos Básicos da Física Experimental

XXXI Olimpíada Brasileira de Matemática GABARITO Segunda Fase

BC1424 Algoritmos e Estruturas de Dados I Aula 05 Custos de um algoritmo e funções de complexidade

Análise de Algoritmos

BCC202 - Estrutura de Dados I

8 Equações de Estado

Análise de algoritmos

Divisão e conquista. Eficiência de divisão e conquista

Algoritmos 3/17/ Algoritmos como área de estudo e investigação

1 s(s+0,7). (1.1) O controlador deve ser tal que o sistema em malha fechada apresente as seguintes características para entrada degrau: G p (s) =

Classes, Herança e Interfaces

Introdução à Ciência da Computação II

Universidade Federal de Mato Grosso do Sul Faculdade de Computação Disciplina de Verão: Algoritmos e Programação II

Complexidade de Algoritmos

Lista 4 Prof. Diego Marcon

TRANSPORTES. Sessão Prática 5 Geração de Tráfego e Estacionamento

Análise de Complexidade de Algoritmos

Divisão e conquista. Há divisão quando o algoritmo tem pelo menos 2 chamadas recursivas no corpo

Preliminares. Profa. Sheila Morais de Almeida. agosto

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia

Hidden Markov Models. Renato Assunção DCC - UFMG

Centro Federal de Educação Tecnológica de Minas Gerais Programa de Pós-Graduação em Modelagem Matemática e Computacional

Transcrição:

Medida do Tempo de Execução de um Programa Bruno Hott Algoritmo e Etrutura de Dado I DECSI UFOP

Clae de Comportamento Aintótico Se f é uma função de complexidade para um algoritmo F, então O(f) é coniderada a complexidade aintótica ou o comportamento aintótico do algoritmo F. A relação de dominação aintótica permite comparar funçõe de complexidade. Entretanto, e a funçõe f e g dominam aintoticamente uma a outra, então o algoritmo aociado ão equivalente. Nete cao, o comportamento aintótico não erve para comparar o algoritmo

Clae de Comportamento Aintótico Por exemplo, conidere doi algoritmo F e G aplicado à mema clae de problema, endo que F leva trê veze o tempo de G ao erem executado, ito é, f(n) = 3g(n), endo que O(f(n)) = O(g(n)). Logo, o comportamento aintótico não erve para comparar o algoritmo e F e G, porque ele diferem apena por uma contante. Podemo avaliar programa comparando a funçõe de complexidade, negligenciando a contante de proporcionalidade.

Comparação de Programa Um programa com tempo de execução O(n) é melhor que outro com tempo O(n²) Porém, a contante de proporcionalidade podem alterar eta conideração Exemplo: um programa leva 100n unidade de tempo para er executado e outro leva 2n². Qual do doi programa é melhor? Depende do tamanho do problema. Para n < 50, o programa com tempo 2n² é melhor do que o que poui tempo 100n. Para problema com entrada de dado pequena é preferível uar o programa cujo tempo de execução é O(n²). Entretanto, quando n crece, o programa com tempo de execução O(n²) leva muito mai tempo que o programa O(n).

Principai Clae de Problema f(n) = O(1) Algoritmo de complexidade O(1) ão dito de complexidade contante. Uo do algoritmo independe de n. A intruçõe do algoritmo ão executada um número fixo de veze.

Principai Clae de Problema f(n) = O(log n) Um algoritmo de complexidade O(log n) é dito ter complexidade logarítmica. Típico em algoritmo que tranformam um problema em outro menore. Pode-e coniderar o tempo de execução como menor que uma contante grande. Quando n é mil, log2 n 10, quando n é 1 milhão, log 2 n 20. Para dobrar o valor de log n temo de coniderar o quadrado de n. A bae do logaritmo muda pouco ete valore: quando n é 1 milhão, o log 2 n é 20 e o log 10 n é 6.

Principai Clae de Problema f(n) = O(n) Um algoritmo de complexidade O(n) é dito ter complexidade linear Em geral, um pequeno trabalho é realizado obre cada elemento de entrada É a melhor ituação poível para um algoritmo que tem de procear/produzir n elemento de entrada/aída. Cada vez que n dobra de tamanho, o tempo de execução dobra.

Principai Clae de Problema f(n) = O(n log n) Típico em algoritmo que quebram um problema em outro menore, reolvem cada um dele independentemente e junta a oluçõe depoi. Quando n é 1 milhão, nlog2 n é cerca de 20 milhõe. Quando n é 2 milhõe, nlog2 n é cerca de 42 milhõe, pouco mai do que o dobro.

Principai Clae de Problema f(n) = O(n 2 ) Um algoritmo de complexidade O(n 2) é dito ter complexidade quadrática. Ocorrem quando o iten de dado ão proceado ao pare, muita veze em um anel dentro de outro. Quando n é mil, o número de operaçõe é da ordem de 1 milhão. Sempre que n dobra, o tempo de execução é multiplicado por 4. Útei para reolver problema de tamanho relativamente pequeno.

Principai Clae de Problema f(n) = O(n 3 ) Um algoritmo de complexidade O(n 3) é dito ter complexidade cúbica. Útei apena para reolver pequeno problema. Quando n é 100, o número de operaçõe é da ordem de 1 milhão. Sempre que n dobra, o tempo de execução fica multiplicado por 8.

Principai Clae de Problema f(n) = O(2 n ) Um algoritmo de complexidade O(2 n) é dito ter complexidade exponencial. Geralmente não ão útei ob o ponto de vita prático. Ocorrem na olução de problema quando e ua força bruta para reolvê-lo. Quando n é 20, o tempo de execução é cerca de 1 milhão. Quando n dobra, o tempo fica elevado ao quadrado.

Principai Clae de Problema f(n) = O(n!) Um algoritmo de complexidade O(n!) é dito ter complexidade exponencial, apear de O(n!) ter comportamento muito pior do que O(2 n ). Geralmente ocorrem quando e ua força bruta para na olução do problema. n = 20 20! = 2432902008176640000, um número com 19 dígito. n = 40 um número com 48 dígito.

Comparação de Funçõe de Complexidade f(n) n Tamanho n 10 20 30 40 50 60 0,00001 n 2 0,0001 n 3 0,001 n 5 0,1 2 n 0,001 3 n 0,059 0,00002 0,0004 0,008 3,2 1,0 58 min 0,00003 0,0009 0,027 24,3 17,9 min 6,5 ano 0,00004 0,0016 0,64 1,7 min 12,7 dia 3855 éc 0,00005 0,0025 0,125 5,2 min 35,7 ano 10 8 éc 0,00006 0,0036 0,316 13 min 366 éc 10 13 éc

Comparação de Funçõe de Complexidade Função de cuto de tempo Computador atual (tamanho) Computador 100 veze mai rápido Computador 1000 veze mai rápido n t 1 100 t 1 1000 t 1 n 2 t 2 10 t 2 31,6 t 2 n 3 t 3 4,6 t 3 10 t 3 2 n t 4 t 4 + 6,6 t 4 + 10 *t = tamanho do problema

Algoritmo Polinomial Algoritmo exponencial no tempo de execução tem função de complexidade O(c n ); c > 1. Algoritmo polinomial no tempo de execução tem função de complexidade O(p(n)), onde p(n) é um polinômio. A ditinção entre ete doi tipo de algoritmo torna-e ignificativa quando o tamanho do problema a er reolvido crece. Por io, o algoritmo polinomiai ão muito mai útei na prática do que o exponenciai.

Algoritmo Exponenciai x Polinomiai Algoritmo exponenciai ão geralmente imple variaçõe de pequia exautiva. Algoritmo polinomiai ão geralmente obtido mediante entendimento mai profundo da etrutura do problema. Um problema é coniderado: intratável: e não exite um algoritmo polinomial para reolvê-lo. bem reolvido: quando exite um algoritmo polinomial para reolvê-lo.

Algoritmo Exponenciai x Polinomiai - Exceçõe A ditinção entre algoritmo polinomiai eficiente e algoritmo exponenciai ineficiente poui vária exceçõe. Exemplo: um algoritmo com função de complexidade f(n) = 2 n é mai rápido que um algoritmo g(n) = n 5 para valore de n menore ou iguai a 20. Também exitem algoritmo exponenciai que ão muito útei na prática. Exemplo: o algoritmo Simplex para programação linear poui complexidade de tempo exponencial para o pior cao ma executa muito rápido na prática. Tai exemplo não ocorrem com freqüência na prática, e muito algoritmo exponenciai conhecido não ão muito útei.

Exemplo de Algoritmo Exponencial Um caixeiro viajante deeja viitar n cidade de tal forma que ua viagem inicie e termine em uma mema cidade, e cada cidade deve er viitada uma única vez Supondo que empre há uma etrada entre dua cidade quaiquer, o problema é encontrar a menor rota para a viagem. A figura ilutra o exemplo para quatro cidade c1, c2, c3, c4, em que o número no arco indicam a ditância entre dua cidade. O percuro <c 1, c 3, c 4, c 2, c 1 > é uma olução para o problema, cujo percuro total tem ditância 24.

Exemplo de Algoritmo Exponencial Um algoritmo imple eria verificar toda a rota e ecolher a menor dela. Há (n - 1)! rota poívei e a ditância total percorrida em cada rota envolve n adiçõe, logo o número total de adiçõe é n!. No exemplo anterior teríamo 24 adiçõe. Suponha agora 50 cidade: o número de adiçõe eria 50! 10 64. Em um computador que executa 109 adiçõe por egundo, o tempo total para reolver o problema com 50 cidade eria maior do que 10 45 éculo ó para executar a adiçõe. O problema do caixeiro viajante aparece com frequência em problema relacionado com tranporte, ma também aplicaçõe importante relacionada com otimização de caminho percorrido.

Técnica de Análie de Algoritmo Determinar o tempo de execução de um programa pode er um problema matemático complexo; Determinar a ordem do tempo de execução, em preocupação com o valor da contante envolvida, pode er uma tarefa mai imple. A análie utiliza técnica de matemática dicreta, envolvendo contagem ou enumeração do elemento de um conjunto: manipulação de oma produto, permutaçõe, fatoriai, coeficiente binomiai, olução de equaçõe de recorrência

Análie do Tempo de Execução Comando de atribuição, de leitura ou de ecrita: O(1). Sequência de comando: determinado pelo maior tempo de execução de qualquer comando da equência. Comando de decião: tempo do comando dentro do comando condicional, mai tempo para avaliar a condição, que é O(1). Anel: oma do tempo de execução do corpo do anel mai o tempo de avaliar a condição para terminação (geralmente O(1)), multiplicado pelo número de iteraçõe. Procedimento não recurivo: cada um deve er computado eparadamente um a um, iniciando com o que não chamam outro procedimento. Avalia-e então o que chamam o já avaliado (utilizando o tempo dee). O proceo é repetido até chegar no programa principal.

Exemplo 1 void exemplo1 (int n) { int i, a; a=0; for (i=0; i<n; i++) a+=i; }

Exemplo 2 void exemplo2 (int n){ int i,j,a; a=0; for (i=0; i<n; i++) for (j=n; j>i; j--) a+=i+j; exemplo1(n); }

Procedimento Não Recurivo Algoritmo para ordenar o n elemento de um conjunto A em ordem acendente. void ordena(vetor A, int n){ int i, j, min, aux; 1 for(i=0; i < n-1; i++){ n-1 2 min = i; 3 for(j=i+1; j < n; j++){ 4 if(a[j] < A[min]) min = j; 5 aux = A[min]; 6 A[min] = A[i]; 7 A[i] = aux; } } n-1 + n-2 + + 1 = (1+n-1)n-1/2 = n(n-1)/2 = n²/2 - n/2 O que faz a função? Como? Qual a ua complexidade?

Algoritmo de Ordenação Seleciona o menor elemento do conjunto. Troca ete com o primeiro elemento A[0]. Repita a dua operaçõe acima com o n - 1 elemento retante, depoi com o n - 2, até que rete apena um.

Análie do Procedimento Não Recurivo Anel Interno Contém um comando de decião, com um comando apena de atribuição. Ambo levam tempo contante para erem executado. Quanto ao corpo do comando de decião, devemo coniderar o pior cao, aumindo que erá empre executado. O tempo para incrementar o índice do anel e avaliar ua condição de terminação é O(1). O tempo combinado para executar uma vez o anel é O(max(1, 1, 1)) = O(1), conforme regra da oma para a notação O Como o número de iteraçõe é n-i-1, o tempo gato no anel é O((n-i-1) x 1) = O(n-i-1), conforme regra do produto para a notação O.

Análie do Procedimento Não Recurivo Anel Externo Contém, além do anel interno, quatro comando de atribuição. O(max(1, (n-i-1), 1, 1, 1)) = O(n-i-1). A linha (1) é executada n-1 veze, e o tempo total para executar o programa etá limitado ao produto de uma contante pelo omatório de (n-i-1): n 2 i=0 (n i 1)=n 1+n 2+...+1= n(n 1) = n2 2 2 n 2 =O(n2 ) Se coniderarmo o número de comparaçõe como a medida de cuto relevante, o programa faz n 2 /2 - n/2 comparaçõe para ordenar n elemento. Se coniderarmo o número de troca, o programa realiza exatamente n - 1 troca.

Exercício 1 // Conidere A, B e C vetore globai void p1 (int n){ int i, j, k; } for (i=0; i<n; i++){ for (j=0; j<n; j++){ C[i][j]=0; for (k=n-1; k>=0; k--) C[i][j]=C[i][j]+A[i][k]*B[k][j]; } }

Exercício 2 void p2 (int n){ int i, j, x, y; } x = y = 0; for (i=1; i<=n; i++){ for (j=i; j<=n; j++) x = x + 1; for (j=1; j<i; j++) y = y + 1; }

Exercício 3 void p3 (int n){ int i, j, x, y; } x = y = 0; for (i=1; i<=n; i++) for (j=i; j<=n; j++) x = x + 1;