ANÁLISE DE COMPLEXIDADE DE ALGORITMOS

Documentos relacionados
5. Análise de Complexidade de Algoritmos. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006)

Estudando complexidade de algoritmos

Análise de Complexidade de Algoritmos

Análise de Algoritmos. Análise de Algoritmos. Análise de Algoritmos. Análise de Algoritmos. Análise de Algoritmos. Análise de Algoritmos

ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS

Quicksort. Algoritmos e Estruturas de Dados II

Análise de complexidade

Ordenação. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Introdução a Complexidade de Algoritmos

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.

Busca binária. Busca em arquivos. Busca binária. Busca binária. Ordenação e busca em arquivos

Ordenação por Troca. Bubblesort Quicksort

Análise Infinitesimal II LIMITES DE SUCESSÕES

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

Sucessão de números reais. Representação gráfica. Sucessões definidas por recorrência. Introdução 8. Avaliação 18 Atividades de síntese 20

1 Amintas engenharia

Critérios de correção e orientações de resposta p-fólio

Séquências e Séries Infinitas de Termos Constantes

5. O algoritmo dos mínimos quadrados

INF 1010 Estruturas de Dados Avançadas

DISTRIBUIÇÃO AMOSTRAL E ESTIMAÇÃO PONTUAL INTRODUÇÃO ROTEIRO POPULAÇÃO E AMOSTRA. Estatística Aplicada à Engenharia

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

1.1. Ordem e Precedência dos Cálculos 1) = Capítulo 1

étodos uméricos MÉTODO DOS MOMENTOS - MOM Prof. Erivelton Geraldo Nepomuceno PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA ELÉTRICA

) E X. ) = 0 2 ( 1 p ) p = p. ) E 2 ( X ) = p p 2 = p ( 1 p ) ( ) = i 1 n. ( ) 2 n E( X) = ( ) = 1 p ( ) = p V ( X ) = E ( X 2 E X

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

Provas de Matemática Elementar - EAD. Período

Virgílio A. F. Almeida DCC-UFMG 1/2005

Mas o que deixou de ser abordado na grande generalidade desses cursos foi o estudo dos produtos infinitos, mesmo que só no caso numérico real.

Revisando... Distribuição Amostral da Média

Capítulo VII: Soluções Numéricas de Equações Diferenciais Ordinárias

Representação de Números em Ponto Flutuante

Projeto e Análise de Algoritmos Aula 2: Função de Complexidade Notação Assintótica (GPV 0.3)

3ª Lista de Exercícios de Programação I

DESIGUALDADES, LEIS LIMITE E TEOREMA DO LIMITE CENTRAL. todas as repetições). Então, para todo o número positivo ξ, teremos:

2.2. Séries de potências

MAE Introdução à Probabilidade e Estatística II Resolução Lista 1

Fundamentos de Análise Matemática Profª Ana Paula. Sequência Infinitas

F- MÉTODO DE NEWTON-RAPHSON

10 - Medidas de Variabilidade ou de Dispersão

3. Seja C o conjunto dos números complexos. Defina a soma em C por

Cap. 4 - Estimação por Intervalo

Vectores: Algoritmos de Ordenação. Algoritmos e Estruturas de Dados 2008/2009

. Dessa forma, quanto menor o MSE, mais a imagem

Amostras Aleatórias e Distribuições Amostrais. Probabilidade e Estatística: afinal, qual é a diferença?

Economia Florestal. A floresta como um capital

Um estudo das permutações caóticas

PROJETO E ANÁLISES DE EXPERIMENTOS (PAE) PROJETO FATORIAL 2 k COMPLETO E REPLICADO. Dr. Sivaldo Leite Correia

Teoria dos Grafos Aula 7

MATEMÁTICA II. Profa. Dra. Amanda Liz Pacífico Manfrim Perticarrari

Quick Sort. Considerações Sobre Algoritmos de Ordenação. Estagiário PAE: Jesimar da S. Arantes Professor: Claudio Quick F. M.

Introdução. Exemplos. Comparar três lojas quanto ao volume médio de vendas. ...

MATEMÁTICA CADERNO 1 CURSO E FRENTE 1 ÁLGEBRA. Módulo 1 Equações do 1 ọ Grau e

Transcrição:

1 FEUP/LEEC Algoritmos e Estruturas de Dados 2001/2002 ANÁLISE DE COMPLEXIDADE DE ALGORITMOS João Pascoal Faria http://www.fe.up.pt/~jpf 2 Itrodução Algoritmo: cojuto claramete especificado de istruções a seguir para resolver um problema Aálise de algoritmos: provar que um algoritmo está correcto determiar recursos exigidos por um algoritmo (tempo, espaço, etc.) comparar os recursos exigidos por diferetes algoritmos que resolvem o mesmo problema (um algoritmo mais eficiete exige meos recursos para resolver o mesmo problema) prever o crescimeto dos recursos exigidos por um algoritmo à medida que o tamaho dos dados de etrada cresce 1

3 Complexidade espacial e temporal Complexidade espacial de um programa ou algoritmo: espaço de memória que ecessita para executar até ao fim S() - espaço de memória exigido em fução do tamaho () da etrada Complexidade temporal de um programa ou algoritmo: tempo que demora a executar (tempo de execução) T() - tempo de execução em fução do tamaho () da etrada Complexidade versus Eficiêcia Por vezes estima-se a complexidade para o "melhor caso" (pouco útil), o "pior caso" (mais útil) e o "caso médio" (igualmete útil) 4 Notação de O grade Na prática, é difícil (seão impossível) prever com rigor o tempo de execução de um algoritmo ou programa Para obter o tempo a meos de: costates multiplicativas (ormalmete estas costates são tempos de execução de operações atómicas) parcelas meos sigificativas para valores grades de Idetificam-se as operações domiates (mais frequetes ou muito mais demoradas) e determia-se o úmero de vezes que são executadas (e ão o tempo de cada execução, que seria uma costate multiplicativa) Exprime-se o resultado com a otação de O grade 2

5 Notação de O grade Defiição: T() = O(f()) (ler: T() é de ordem f()) se e só se existem costates positivas c e 0 tal que T() cf() para todo o > 0 Exemplos: c k k +c k-1 k-1 +...+c 0 = O( k ) (c i - costates) log 2 = O(log ) (ão se idica a base porque mudar de base é multiplicar por costate) 4 = O(1) (usa-se 1 para ordem costate) 6 f Ordes mais comus (expoecial) 2 2 (quadrática) log (liear) log (logarítmica) 1 (costate) Fote: Sahi, "Data Structures, Algorithms ad Applicatios i C++" 3

7 Eficiêcia da Pesquisa Sequecial Eficiêcia temporal de SequetialSearch A operação realizada mais vezes é o teste da codição de cotiuação do ciclo for, o máximo +1 vezes (o caso de ão ecotrar x). Se x existir o array, o teste é realizado aproximadamete /2 vezes em média (1 vez o melhor caso) T() = O() (liear) o pior caso e o caso médio Eficiêcia espacial de SequetialSearch Gasta o espaço das variáveis locais (icluido argumetos) Como os arrays são passados "por referêcia" (de facto o que é passado é o edereço do array), o espaço gasto pelas variáveis locais é costate e idepedete do tamaho do array S() = O(1) (costate) em qualquer caso 8 Eficiêcia Temporal da Pesquisa Biária Em cada iteração, o tamaho do sub-array a aalisar é dividido por um factor de aproximadamete 2 Ao fim de k iterações, o tamaho do sub-array a aalisar é aproximadamete / 2 k Se ão existir o array o valor procurado, o ciclo só termia quado / 2 k 1 log 2 - k 0 k log 2 Assim, o pior caso, o º de iterações é aproximadamete log 2 T() = O(log ) (logarítmico) É muito mais eficiete que a pesquisa sequecial, mas só é aplicável a arrays ordeados! 4

9 Eficiêcia da Ordeação por Iserção IsertSorted(v,,x): o º de iterações do ciclo for é: 1, o melhor caso, o pior caso /2, em média IsertioSort(v,): faz IsertSorted(,1,), IsertSorted(,2,),..., IsertSorted(,-1,) o º total de iterações do ciclo for de IsertSorted é: o melhor caso, 1 + 1 +... + 1 (-1 vezes) = -1 o pior caso, 1 + 2 +... + -1 = (-1)(1 + -1)/2 = (-1)/2 2 /2 em média, metade do aterior, isto é, aproximadamete 2 /4 T() = O( 2 ) (quadrático) (pior caso e média) 10 Eficiêcia da Ordeação por Partição As operações realizadas mais vezes o passo de partição são as comparações efectuadas os passos 2.3.1 e 2.3.2. No cojuto dos dois passos, o úmero de comparações efectuadas é: o míimo (porque todas as posições do array são aalisadas) o máximo +2 (correspodete à situação em que i=j+1 o fim do passo 2.3.2) Por coseguite, o tempo de execução do passo de partição é O() Para obter o tempo de execução do algoritmo completo, é ecessário somar os tempos de execução do passo de partição, para o array iicial e para todos os sub-arrays aos quais o algoritmo é aplicado recursivamete 5

11 Eficiêcia da Ordeação por Partição (cot.) Pior caso: cada rectâgulo refere-se a uma chamada recursiva Melhor caso: -1 1 /2 /2-2 -3 1... 1 1+log 2 /4 /4 /4 /4... 1 1 1 1 1 1 1 1 1 1 profudidade de recursão: tempo de execução total (somado totais de lihas): T() = O[++(-1) +... +2] = O[+(-1)( + 2)/2] = O( 2 ) profudidade de recursão: 1+log 2 (sem cotar com a possibilidade de um elemeto ser excluído dos sub-arrays esquerdo e direito) tempo de execução total (uma vez que a soma de cada liha é ): T() = O[(1+log 2 ) ] = O( log ) 12 Eficiêcia da Ordeação por Partição (cot.) Prova-se que o caso médio (a hipótese de os valores estarem aleatoriamete distribuídos pelo array), o tempo de execução é da mesma ordem que o melhor caso, isto é, T() = O( log ) O critério seguido para a escolha do pivot destia-se a tratar eficietemete os casos em que o array está iicialmete ordeado 6

13 Comparação de tempos médios de execução (observados) de diversos algoritmos de ordeação Isertio sort Heap sort Merge sort Quick sort Cada poto correspode à ordeação de 100 arrays de iteiros gerados aleatoriamete Fote: Sahi, "Data Structures, Algorithms ad Applicatios i C++" Método de ordeação por partição (quick sort) é a prática o mais eficiete, excepto para arrays pequeos (até cerca 20 elemetos), em que o método de ordeação por iserção (isertio sort) é melhor! 14 Complexidade Espacial de QuickSort O espaço de memória exigido por cada chamada de QuickSort, sem cotar com chamadas recursivas, é idepedete do tamaho () do array O espaço de memória total exigido pela chamada de QuickSort, icluido as chamadas recursivas, é pois proporcioal à profudidade de recursão Assim, a complexidade espacial de QuickSort é: O(log ) o melhor caso (e o caso médio) O() o pior caso Em cotrapartida, a complexidade espacial de IsertioSort é O(1) 7