4º 20/10/2003. ÍNDICE

Documentos relacionados
Análise de Algoritmos. Prof. Sérgio Carlos Portari Júnior

Complexidade de Algoritmos

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

Análise e Projeto de Algoritmos P R O F : L O A N A T. N O G U E I R A

ANÁLISE DE ALGORITMOS: PARTE 3

Aula 1. Teoria da Computação III

Complexidade de algoritmos Notação Big-O

ESTRUTURA DE DADOS CIÊNCIA E TECNOLOGIA DO RIO. Curso de Tecnologia em Sistemas para Internet

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

Projeto e Análise de Algoritmos

Análise e Complexidade de Algoritmos

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

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

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

Análise de algoritmos

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

Análise de Algoritmos

Teoria da Computação. Computabilidade e complexidade computacional

Teoria dos Grafos Aula 7

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

BCC202 - Estrutura de Dados I

Análise de algoritmos. Parte I

Complexidade Assintótica

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

Medida do Tempo de Execução de um Programa

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

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

Técnicas de Projeto de Algoritmos

André Vignatti DINF- UFPR

Universidade Federal de Alfenas

Complexidade de Algoritmos. Edson Prestes

Estruturas de Dados Algoritmos

Complexidade de Algoritmos

Análise de Algoritmos Estrutura de Dados II

PCC104 - Projeto e Análise de Algoritmos

Breve Introdução à Complexidade Assintótica de Algoritmos Letícia Rodrigues Bueno

Complexidade de Tempo e Espaço

Elementos de Análise Assintótica

Análise de Complexidade de Algoritmos. mario alexandre gazziro

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

Pra início de conversa... O que é um algoritmo? Exemplos de algoritmos. Como podemos descrever algoritmos? Como podemos descrever algoritmos?

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

Notação Assintótica Letícia Rodrigues Bueno

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

Lista de Exercícios 6 Funções

Classificação de Dados

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

PROGRAMAÇÃO E ALGORITMOS (LEII) Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2016/2017

Pesquisa: operação elementar

Projeto e Análise de Algoritmos

Otimização Combinatória - Parte 4

Algoritmos Avançados Análise de Complexidade

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

Complexidade de Algoritmos

1 a Lista Professor: Claudio Fabiano Motta Toledo Estagiário PAE: Jesimar da Silva Arantes

Lista de exercícios sobre contagem de operações Prof. João B. Oliveira

André Vignatti DINF- UFPR

BCC202 - Estrutura de Dados I

COMPLEXIDADE DE ALGORITMOS

Comportamento assintótico

Análise de algoritmos. Parte I

Análise de algoritmos

Aula 02 Notação Assintótica p. 4. Usodanotação O. Notação O. Notação O, Ω, ΘeExemplos. Intuitivamente... O(f(n)) funções que não crescem mais

MCTA028 Programação Estruturada Aula 19 Custos de um algoritmo e funções de complexidade

ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS

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

BCC202 - Estrutura de Dados I

Construção de Algoritmos II Aula 06

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

Bacharelado em Ciência da Computação Matemática Discreta

FACULDADE CAMPO LIMPO PAULISTA BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto a Análise de Algoritmos I Lista de Exercícios 1

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

5. Invólucros Convexos no Plano (cont )

Análise de Algoritmos

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

GBC015: INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO. Teoria de Algoritmos: Complexidade

Preliminares. Profa. Sheila Morais de Almeida. agosto

COMPLEXIDADE DE ALGORITMOS COMPLEXIDADE DE ALGORITMOS

Informática I. Aula 14. Aula 14-10/10/2007 1

ANÁLISE DE ALGORITMOS: PARTE 1. Prof. André Backes. Como resolver um problema no computador? Precisamos descrevê-lo de uma forma clara e precisa

Análise e Projeto de Algoritmos

A única diferença entre o difícil e o impossível é que o último demora um pouco mais de tempo para ser alcançado..

Complexidade Assintótica de Programas Letícia Rodrigues Bueno

2. Complexidade de Algoritmos

Aula 10: Decidibilidade

INF 1010 Estruturas de Dados Avançadas

Análise e Projeto de Algoritmos

Introdução à Programação Aula 02. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

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

Complexidade computacional

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

Estruturas de Dados 2

Algoritmos e Estruturas de Dados

Teoria da Computação. Computabilidade

Técnicas de análise de algoritmos

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

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

Teoria da computabilidade Indecidíveis Decidíveis

DECivil Departamento de Engenharia Civil, Arquitectura e Georrecursos. Apresentação. Computação e Programação (CP) 2013/2014.

Aula 10: Decidibilidade

Transcrição:

Universidade Federal de Juiz de Fora UFJF. Departamento de Ciência da Computação DCC. Curso de Ciência da Computação. Análise e Projeto de Algoritmos 4º período. Filippe Jabour. Atualizado em 20/10/2003. ÍNDICE 1. Introdução... 2 1.1 Problemas computacionais e algoritmos... 2 1.2 O conceito de complexidade e suas cotas... 2 1.3 Modelos de computação... 3 1.4 Distinções entre funções de complexidade... 3 Tabela 1.1 Crescimento de funções típicas de complexidade... 3 Tabela 1.2 Instâncias solucionáveis X rapidez do computador... 3 1.5 Constante Multiplicativa... 4 Tabela 1.3 Constantes multiplicativas... 4 1.6 Tamanho de instâncias de problemas... 4 1.7 Ordens de grandeza na complexidade de algoritmos... 5 Figura 1.1 - f(n) = O(g(n))... 5 Figura 1.2 - f(n) = Ω(g(n))... 5 Figura 1.3 - f(n) = Θ(g(n))... 6 2. Bibliografia:... 6 1

1. Introdução 1.1 Problemas computacionais e algoritmos Problema: É uma pergunta de caráter geral a ser respondida. É descrito através de parâmetros de entrada e um enunciado das soluções que deve prover. Instância do problema: Obtém-se ao se fixar valores particulares para todos os parâmetros do problema. Exemplo: Enunciado: Ordenar uma lista de n números inteiros em ordem crescente. Parâmetros: Lista L = (M 1, M 2,..., M n ) de números inteiros. Solução: Uma lista contendo os mesmos números da lista dada como parâmetro, em ordem não decrescente. Instância: Por exemplo L = (3,-5,4,2-1). Algoritmo: Descrição passo a passo de como um problema é solucionável. Descrição finita. Passos bem definidos, sem ambigüidades e executáveis computacionalmente em um tempo finito. O algoritmo resolve o problema P se para qualquer instância I dos parâmetros de entrada é produzida uma solução correta (dados de saída). 1.2 O conceito de complexidade e suas cotas Complexidade de tempo, ou rapidez do algoritmo, relaciona o tamanho de uma instância ao tempo necessário para resolvê-la. A rapidez pessimista é aquela em que os dados de entrada são tais que o algoritmo terá um máximo de trabalho a ser feito. Tamanho da instância é a medida da quantidade de dados de entrada. Para o exemplo do item 1.1, o tamanho da instância corresponde ao número n de números a serem ordenados. Neste mesmo exemplo, o caso pessimista é o da lista de entrada em ordem decrescente. Cota Superior de Complexidade - CS(n): É a menor das complexidades dos diversos algoritmos conhecidos para resolver um problema, sendo n o tamanho da instância. Considere aqui rapidez como o tempo gasto para resolver o algoritmo. Cota Inferior de Complexidade - CI(n): É o limite inferior para as complexidades em tempo de todos os possíveis algoritmos (conhecidos ou não) que resolvem o problema. Aqui estamos interessados na complexidade inerente ou intrínseca do problema. A cota inferior nos diz que nenhum algoritmo pode resolver o problema com rapidez pessimista menor do que CI(n), para entradas arbitrárias do tamanho n. Em outras palavras, nenhum algoritmo pode resolver em menos tempo. A cota é uma propriedade do problema e não de um algoritmo em particular. 2

Em resumo, CI(n) é o mínimo sobre todos os algoritmos possíveis e CS(n) é o mínimo sobre todos os algoritmos conhecidos (ou existentes). CI(n) e CS(n) correspondem à rapidez mínima (tempo de execução mínimo) para o caso pessimista de uma instância de entrada de tamanho n. Aprimorar CS(n) significa descobrir um algoritmo que tenha rapidez máxima menor do que a dos outros. Aprimorar CI(n) significa encontrar um limite mínimo inferior ao anterior, para todos os algoritmos possíveis. Ou seja, aplicar técnicas que permitam aumentar a precisão com a qual o mínimo anterior foi obtido. Por fim, o objetivo é fazer com que as duas cotas coincidam: CS(n) = CI(n). Neste caso teremos o algoritmo ótimo. 1.3 Modelos de computação Ao invés de calcular exatamente os tempos de execução em máquinas específicas, a maioria das análises conta apenas o número de operações elementares. Consideraremos que cada operação elementar (a comparação entre dois valores por exemplo) gasta, para executar, uma unidade de tempo (critério do custo uniforme). A medida de complexidade é o crescimento assintótico dessa contagem de operações. 1.4 Distinções entre funções de complexidade Tabela 1.1 Crescimento de funções típicas de complexidade Função de Valor de n complexidade 20 40 60 N 0,000002 s 0,000004 s 0,000006 s n log n 0,00000864 s 0,00002129 s 0,00003544 s n 2 0,00004 s 0,00016 s 0,00036 s n 3 0,0008 s 0,0064 s 0,0216 s 2 n 0,10486 s 109951 s 1,2 x 10 11 3 n 348,68 s 1,0 x 10 12 4,0 x 10 21 Obs.: Tempo de execução quando uma operação elementar no algoritmo é executável em um décimo de microssegundo (10-7 s). Tabela 1.2 Instâncias solucionáveis X rapidez do computador Função de Tamanho da maior instância solucionável em uma hora complexidade Computador padrão Computador 100 vezes mais rápido Computador 1000 vezes mais rápido n x 100 x 1000 x n log 2 n y 22,5 y 140,2 y n 2 z 10 z 31,6 z n 3 k 4,6 k 10 k 2 n m m + 6 m + 10 3

3 n n n + 4 n + 6 Exemplo: Seja o problema de ordenar uma lista M de n (n 2) números inteiros em ordem crescente. Uma solução é que segue: para j := n-1 até 1 faça para i := 1 até j faça se M i > M i+1 então troque M i e M i+1 fim_se fim_para fim_para Análise: Operação elementar: A comparação do se da terceira linha. Cálculo do tempo de execução: A operação elementar será executada um número de vezes dado por (n-1) + (n-2) +... + 1 = ½ (n 2 n) Adotando a hipótese do custo uniforme (uma unidade de tempo para a execução de cada operação elementar) a ser vista mais adiante, temos que a complexidade do algoritmo é dada por f(n) = ½ (n 2 n) 1.5 Constante Multiplicativa Um algoritmo de complexidade rapidamente crescente com constante multiplicativa relativamente pequena pode ter melhor desempenho do que outro de complexidade lentamente crescente com uma maior constante multiplicativa, isto para pequenas instâncias. Tabela 1.3 Constantes multiplicativas Função de complexidade Valores de n p/ os quais o algoritmo é o mais rápido (tem o melhor desempenho) 20000 n 2000 n log n 200 n 2 10 n 3 10 (2 n ) 3 n n > 1024 59 n 1024 21 n 58 10 n 20 6 n 9 1 n 9 1.6 Tamanho de instâncias de problemas Suponha a entrada de um algoritmo como sendo um único número inteiro k e que ele requer um tempo c k para executar. Seja n(k) o comprimento da codificação do valor inteiro k. Se k for codificado na notação unária, então n(k) = k e o tempo de execução é c k. Critério de custos está associado à forma como o tamanho da entrada é calculado (argumento da função). Existem dois critérios. Definimos então o critério de custo uniforme: tamanho da entrada é medido em número de palavras. O custo de cada instrução é unitário. O custo de armazenamento de cada inteiro é unitário. Se k for codificado na notação binária, então n(k) = log 2 k e o tempo de execução é c 2 k. 4

Definimos então o critério de custo logarítmico: tamanho da entrada é medido em número de bits. O custo de cada instrução é proporcional ao número de bits necessários ao armazenamento do operando. O custo de armazenamento de cada inteiro é igual ao número de bits necessários a sua representação em ponto fixo. 1.7 Ordens de grandeza na complexidade de algoritmos Na determinação da complexidade de um algoritmo, ou seja, da função que relaciona o tamanho da instância do problema ao tempo que o algoritmo gasta para resolvê-lo, será adotada a noção de ordem de grandeza. Na matemática existem notações apropriadas para expressar a ordem de grandeza de uma função. Definição: f(n) = O(g(n)) (Lê-se: f de n é de ordem máxima g de n), se e somente se, existem duas constantes positivas c e n 0 tal que f(n) c g(n), para todo n n 0. Figura 1.1 - f(n) = O(g(n)) f, g c. g(n) f(n) n n 0 Definição: f(n) = Ω(g(n)) (Lê-se: f de n é de ordem mínima g de n), se e somente se, existem duas constantes positivas c e n 0 tal que f(n) c g(n), para todo n n 0. Figura 1.2 - f(n) = Ω(g(n)) f, g f(n) c. g(n) n 5 n 0

Definição: f(n) = θ(g(n)) (Lê-se: f de n é de ordem exata g de n), se e somente se, existem constantes positivas c 1, c 2 e n 0 tal que c 1 g(n) f(n) c 2 g(n), para todo n n 0. Figura 1.3 - f(n) = Θ(g(n)) f, g c 2. g(n) f(n) c 1. g(n) n n 0 Novamente nos reportando ao exemplo do item 1.1 temos: f(n) = ½ (n 2 n) ½ n 2, para n > 1 então, f(n) = O(n 2 ), ou seja, a complexidade do algoritmo é de ordem máxima n 2. 2. Bibliografia: [FORTUNA 2001] FORTUNA, Michel Heluey. UFJF. Notas de Aula. 2001. [RAUL 1998] RAUL. UFJF. Notas de Aula. 1998. [SZWARCFILTER E MARKEZON 1994] SZWARCFILTER, Jayme Luiz e MARKEZON, Lílian. Estrutura de dados e seus algoritmos. LTC Livros Técnicos e Científicos S.A., Rio de Janeiro, 1994. [TERADA 1991] TERADA, Routo. Desenvolvimento de algoritmos e estrutura de dados. Makron Books, 1991. 6