Análise Amortizada de Complexidade

Documentos relacionados
Análise Amortizada. Exemplo: Tabelas dinâmicas. Resulta da análise de uma sequência de operações numa estrutura de dados.

INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA

Definição 1.1 : Uma árvore é um grafo simples conexo e sem ciclos.

Introdu c ao ` a L ogica Matem atica Ricardo Bianconi

Análise e Projeto de Algoritmos

Análise amortizada CLRS 17. Algoritmos p. 1

Árvores. SCC-214 Projeto de Algoritmos. Thiago A. S. Pardo. Um nó após o outro, adjacentes Sem relações hierárquicas entre os nós, em geral

Técnicas de Desenho de Algoritmos

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

Complexidade de Algoritmos. Edson Prestes

Representação decimal dos números racionais

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

7. Introdução à Complexidade de Algoritmos

MATRIZES - PARTE Mais exemplos Multiplicação de duas matrizes AULA 26

7. Introdução à Complexidade de Algoritmos

Busca competitiva. Inteligência Artificial. Profª. Solange O. Rezende

1 Espaços Vectoriais

Sistemas Baseados em Conhecimento

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

Exercícios de MATEMÁTICA COMPUTACIONAL. 1 0 Semestre de 2009/2010 Resolução Numérica de Equações Não-Lineares

CORRELAÇÃO E REGRESSÃO. Modelos Probabilísticos para a Computação Professora: Andréa Rocha. UNIVERSIDADE FEDERAL DA PARAÍBA Dezembro, 2011

Algoritmos Greedy. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Algoritmos Greedy 2014/ / 40

Refinamentos sucessivos

Representação decimal dos números racionais

ESTRUTURA DE DADOS ORDENANDO LISTAS

Lógica Computacional. Métodos de Inferência. Passos de Inferência. Raciocínio por Casos. Raciocínio por Absurdo. 1 Outubro 2015 Lógica Computacional 1

MATRIZES - PARTE Definição e Manipulação de Matrizes AULA 21

Universidade de São Paulo

Exercícios: Vetores e Matrizes

Nuno Miguel Duarte Sequeira André VARIABLE NEIGHBOURHOOD SEARCH

Aula 08. Estruturas de dados Árvore e Grafo

QuickSort. Algoritmos e Estruturas de Dados Verão Cátia Vaz 1

Projeto e Análise de Algoritmos Análise de Complexidade. Prof. Luiz Chaimowicz

SOLUÇÃO ANALÍTICA E NUMÉRICA DA EQUAÇÃO DE LAPLACE

Grafos. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Teoria da Computação. Complexidade computacional classes de problemas

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

Estruturas de Dados Grafos

Decisão Decidir Análise / Teoria da Decisão

MA21 (2015) - Teste - Gabarito comentado. Problema 1 (OBM 2005) Na sequência de números

Universidade Estadual de Mato Grosso do Sul UEMS Curso de Ciência da Computação Disciplina de Algoritmos Paralelos e Distribuídos

Simplex. Investigação Operacional José António Oliveira Simplex

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

ANTECESSORES RELATIVAMENTE PRIMOS

ESTRUTURA DE DADOS ORDENANDO LISTAS

08/08/2011. Pilha. SCC0202 Algoritmos e Estruturas de Dados I. Prof. Thiago A. S. Pardo. Pilha. O que é? Para que serve?

Buscas Informadas ou Heurísticas - Parte II

Métodos de Apoio à Elaboração de Cronogramas

Aula prática 5. Funções Recursivas

Método Simplex dual. Marina Andretta ICMC-USP. 24 de outubro de 2016

8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

1 ō Trabalho Prático de Programação Imperativa 2001/2002 Propostas de trabalho

MA11 - Unidade 4 Representação Decimal dos Reais Semana 11/04 a 17/04

Reduce: reduz o que está imediatamente à esquerda do foco usando uma produção

1 Despacho económico

Algoritmos de ordenação: Inserção e Shellsort

PROJETO E ANÁLISE DE ALGORITMOS (INF 2926)

INTEIROS. Luciana Santos da Silva Martino. lulismartino.wordpress.com PROFMAT - Colégio Pedro II. 25 de agosto de 2017

Jogos e invariantes. 6 de Janeiro de 2015

Área e Teorema Fundamental do Cálculo

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

INTELIGÊNCIA ARTIFICIAL 2008/09

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

Enumerabilidade. Capítulo 6

Programação Procedimental

Lista de Exercícios sobre Listas Implementadas por Encadeamento

Análise de Algoritmos

Resolução de Problemas através de Busca. Prof. Júlio Cesar Nievola PPGIA - PUC-PR

1 Conjuntos enumeráveis

Estrutura de um Algoritmo, Variáveis, Comandos de Entrada e Saída e Expressões Aritméticas

Resolução de problemas com apenas restrições lineares de igualdade

Árvores e Mapas. Luís Lopes. Estruturas de Dados DCC-FCUP

Fundamentos da Dinâmica da Produção

Transcrição:

Análise Amortizada de Complexidade Algoritmos e Complexidade LEI-LCC 2010-2011 MBB Novembro de 2010

Introdução Pretende analizar-se uma sequência de operações sobre uma estrutura de dados. Este é, geralmente o caso mais interessante do ponto de vista aplicacional. Uma análise que assuma o pior caso para todas as operações será pessimista. Uma análise probabilística depende muito da informação disponível sobre os inputs. O objectivo é calcular o custo médio, por operação, numa sequência de operações. A sequência escolhida será a mais desfavorável, dando origem a uma análise no pior caso. Uma solução com operações individuais menos eficientes pode apresentar um comportamento amortizado mais favorável.

Exemplo: Stack Vamos assumir que Push e Pop executam em tempo constante. Analisemos o tempo de execução de uma sequência de m operações. Cada operação consiste em 0 ou mais Pop e termina com um Push. Partindo de stack vazia, podemos concluir duas coisas aparentemente contraditórias. É possível que uma operação demore m 1 unidades de tempo. Porquê? No total, o número total de operações é, no máximo, 2m. Porquê? Vamos ver várias metodologias equivalentes para tratar este tipo de problema.

Análise Agregada Trata-se de uma aproximação directa. Calcula-se o custo médio de uma operação fazendo: O cálculo do pior caso do custo total da sequência de operações. O quociente desse valor pelo número de operações. No caso da stack, temos que o número total de Pop nunca pode ser superior ao número de Push. O número total de Push é simplesmente m, dando um custo total no pior caso de 2m. O custo amortizado de cada operação é 2.

Visão do banqueiro: Accounting Argument Assumimos que efectuar operações exige crédito. A cada operação atribuímos um determinado crédito. Este crédito poderá ser inferior ao que a operação necessitaria individualmente. Tentaremos demonstrar que a soma do crédito de todas as operações permite executar a sequência completa. Para isso, usaremos créditos não utilizados de operações anteriores. Poderemos também necessitar de pedir créditos emprestados, mas não iremos abordar este caso mais complicado.

Visão do banqueiro: Accounting Argument Se provarmos que nunca precisaremos de pedir emprestado, a análise é simples mesmo para sub-sequências: no pior caso será a soma dos custos individuais amortizados. No caso da stack, alocamos dois créditos por operação e observamos que o número de créditos poupados é sempre igual ao número de elementos armazenados. Um Pop utiliza créditos poupados. Um Push utiliza um crédito poupado, e assinala o fim da operação: mais 2 créditos que podem ser poupados. Nunca precisamos de pedir emprestado: custo total 2m.

Visão do Físico: Potential Argument Define-se uma função potencial Φ, que mapeia uma configuração D da estrutura de dados num número real. Φ representa a potencial carga computacional de processar D. Define-se o tempo amortizado a de uma operação como t + Φ(D ) Φ(D): t é o tempo real que a operação leva a executar. D é a configuração antes de a operação executar. D é a configuração depois de a operação executar. Para qualquer sequência de m operações, teremos m t i = i=1 m m a i Φ i + Φ i 1 = Φ 0 Φ m + i=1 i=1 a i

Visão do Físico: Potential Argument O tempo total é a soma dos custos amortizados, afectada da alteração no potencial da configuração da estrutura de dados. Espera-se que uma operação muito pesada faça decrescer o potencial, permitindo operações seguintes mais eficientes. Podemos escolher qualquer função potencial. Nos casos mais interessantes Φ 0 será nulo, e o potencial será sempre positivo. Voltando ao exemplo da stack, podemos tomar Φ como o número de elementos armazenados. Neste caso, partindo de um potencial de i, sendo k o número de Pop realizados, temos o custo amortizado de cada operação: (k + 1) + (i k + 1) i = 2 Se partirmos e chegarmos a uma stack vazia, temos custo total 2m.

Gestão de Listas Análise da heurística Move-to-Front : Consideramos tabela de n elementos e a operação de aceder a um desses elementos. A implementação é ligada, e o tempo de acesso ao elemento na posição i é igual a i. A lista não está ordenada, mas pode ser re-arranjada entre operações de acesso. O re-arranjo pode ser feito trocando um elemento com outro adjacente, o que pode ser feito em tempo constante. O problema: vale a pena fazer swaps entre operações de acesso? Esta pergunta só faz sentido se alguns elementos forem acedidos mais vezes que outros. A heurística Move-to-Front coloca o elemento acedido na cabeça da lista.

Gestão de Listas Esta técnica tão simples é surpreendentemente eficiente: Fica a um factor constante de qualquer outra estratégia que implique conhecimento de estatísticas de acesso. O mesmo se aplica relativamente a algoritmos que assumem ser possível fazer swaps arbitrários em tempo constante. É uma estratégia óptima num sentido muito abrangente! Adoptamos a visão do físico: Assumimos um algoritmo arbitrário A a executar em paralelo com esta estratégia. O potencial é definido como Φ(D) = 2 x D Φ x, com Φ x = #{z z antes de x em D, z depois de x em A} As configurações são inicialmente iguais. Considera-se uma sequência arbitrária de acessos.

Gestão de Listas Vamos demonstrar o resultado conhecido de que o custo amortizado de uma operação de acesso é, no máximo, 4 vezes superior ao de A. O custo amortizado, partindo de potencial P, de um acesso à posição i em D é 2i + (2(i 1 2x i ) + P) P = 4i 2 4x i em que x i é o número de antecessores do elemento i em D, que aparecem depois dele em A. Um algoritmo optimizado para aquela sequência de acessos nunca precisará de fazer swaps: tempo de acesso j. Como i x i j, temos um custo amortizado máximizado por 4j. O potencial final é superior ou igual a zero, pelo que o custo total é O(4*m*N) e está a um factor de 4 do método óptimo! A razão entre custos é inferior a 4: análise competitiva.