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

Documentos relacionados
Análise Amortizada. Fernando Lobo. Algoritmos e Estrutura de Dados II. Resulta da análise de uma sequência de operações numa estrutura de dados.

Análise amortizada CLRS 17. Algoritmos p. 1

AULA 20. Algoritmos p.725/759

Análise de Algoritmos

Análise Amortizada de Complexidade

Hashing. ACH Introdução à Ciência da Computação II. Delano M. Beder

Divisão e Conquista. Fernando Lobo. Algoritmos e Estrutura de Dados II. É uma técnica para resolver problemas (veremos outras técnicas mais adiante).

Estruturas de dados para listas arrays e listas ligadas

INF70 Gerenciamento de Banco de Dados 2 Índices baseados em Hash

GBC053 Gerenciamento de Banco de Dados Índices baseados em Hash

Tabelas Hash Endereçamento Direto

10 a Aula - Operadores de Molde ( Casting ). Atribuição de Memória. Ponteiros. Enumerados. Mestrado em Engenharia Física Tecnológica

Lista Ordenada. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

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

Comparação com Divisão e Conquista

O termo Programação Dinâmica é um bocado infeliz.

MC102 Aula 26. Instituto de Computação Unicamp. 17 de Novembro de 2016

Introdução às Finanças

Análise de Algoritmos

Programação Estruturada

Universidade Estadual do Oeste do Parana - UNIOESTE Jhonata R.de Peder Marcelo Schuck

Sequências e Séries Infinitas. Copyright Cengage Learning. Todos os direitos reservados.

André Vignatti DINF- UFPR

Heaps binomiais. Gabriel Pedro de Castro. 20 de setembro de 2007

ACH2024. Aula 22 Hashing Externo - Hashing estático e dinâmico (extensível) Prof Helton Hideraldo Bíscaro

Análise e Complexidade de Algoritmos

Capítulo 2. Representação de dados em sistemas computacionais

HASHING HASHING 6/10/2008

Algoritmos e Estrutura de Dados. Algoritmos Prof. Tiago A. E. Ferreira

4. Corpos finitos. Aula 22 - Álgebra II. [Conclusão da aula anterior: exemplos de polinómios resolúveis e polinómios não resolúveis]

ESTRUTURAS DE DADOS E ALGORITMOS HEAP BINÁRIA

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

Grafos. Notas. Notas. Notas. Notas. Caminhos mais curtos de única origem. Subestrutura ótima. Propriedades de caminhos mais curtos

Ordenação: Heapsort. Algoritmos e Estruturas de Dados II

CIC 111 Análise e Projeto de Algoritmos II

AV3 - MA p k = C 40,k 3 UMA SOLUÇÃO 40! 40! 3 3 > k 2

Aula 16. Ficheiros de texto

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

Hashing. Cormen Capítulo 11

Ponteiro e lista dinâmica

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

Análise de Complexidade. Algoritmos e Estruturas de Dados Flavio Figueiredo (

5 Séries de Pagamentos

Filas de Prioridade. Uma fila de prioridade pode ser vista como uma generalização das filas com as seguintes duas operações:

Algoritmos e Estrutura de Dados. Aula 04 Recorrência Prof. Tiago A. E. Ferreira

SME0801- Probabilidade II Distribuições conjuntas. Primeiras definições e propriedades

HASHING Hashing Motivação - Acesso Direto:

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Ponteiros e Tabelas. K&R: Capitulo 5 IAED, 2012/2013

Filas de prioridade. Marcelo K. Albertini. 27 de Novembro de 2014

MC-102 Aula 20 Ponteiros III

PROJETO E ANÁLISE DE ALGORITMOS (INF 2926)

Filas de prioridade. Marcelo K. Albertini. 3 de Dezembro de 2013

TAD dicionário. Métodos do TAD dicionário:

Complexidade de Tempo e Espaço

Tabela Hash. Disciplina: Estruturas de Dados Professora: Camila Taumaturgo M.Sc.

Árvores Binárias. Algoritmos e Estruturas de Dados Flavio Figueiredo (

Análise e Projeto de Algoritmos

Algoritmos de Caminho Mínimo Parte 1

Vamos estudar o que se entende por «programação», que é uma linguagem de programação e ver algumas terminologias própria de programação e como

Árvores B. Árvores B. Estrutura de Dados II Jairo Francisco de Souza

Derivadas de funções reais de variável real

Fernando Lobo. Algoritmos e Estrutura de Dados. Outra técnica de concepção de algoritmos, tal como Divisão e Conquista.

Estruturas de dados para conjuntos disjuntos. Estruturas de Dados para Conjuntos Disjuntos. Estruturas de dados para conjuntos disjuntos

Diagrama de Fluxo de Caixa Fluxo de caixa é uma sucessão temporal de entradas e de saídas de dinheiro no caixa de uma entidade.

Algoritmos e Estrutura de Dados. Aula 11 Estrutura de Dados: Tabelas Hash Parte II Prof. Tiago A. E. Ferreira

Hashing Endereçamento Direto Tabelas Hash

Luís Fernando Schultz Xavier da Silveira. 12 de maio de 2010

Sequências e Séries Infinitas. Copyright Cengage Learning. Todos os direitos reservados.

Elementos de Matemática Finita

Estruturas de Dados II

Enumerabilidade. Capítulo 6

Divisão e Conquista: Par de Pontos mais Próximo

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

Árvores B. Árvores B. Estrutura de Dados II Jairo Francisco de Souza

Curso Satélite de. Matemática. Sessão n.º 1. Universidade Portucalense

3. ANÁLISE DE COMPLEXIDADE PESSIMISTA

AULA 24. Algoritmos p.856/905

Matemática Financeira

i a[i]

Quanto custa investir: comparativo entre bancos, corretoras (e uma fintech!)

Ordenação e Busca em Arquivos

Linguagem Universal. assim como a entrada ser processada por a. (b) A segunda fita de representa a fita de

Lista de Exercícios 6: Soluções Funções

Tabelas Hash. Prof. Túlio Toffolo BCC202 Aulas 23 e 24 Algoritmos e Estruturas de Dados I

C com introdução a OO

Árvores Binárias de Busca

Vamos aos Gritos. Quem são os números quânticos? Os números quânticos são as soluções da equação de Schrondinger que

Fundamentos de Programação

Campo Escalar Complexo

ESTRUTURA DE DADOS E ALGORITMOS ÁRVORES BALANCEADAS. Cristina Boeres

ALGORITMO DE EUCLIDES

este termo já se tornou obsoleto, pois depois das derivadas em φ, qualquer termo que sobrar com J multiplicado vai ser nulo (quando J=0)

Tabela Hash. Disciplina de Algoritmos e Estrutura de Dados III. Prof. Marcos Antonio Schreiner 15/05/2015

Análise de Algoritmos

Sistemas de Amortização

Estruturas de Dados para Conjuntos Disjuntos. Estruturas de dados para conjuntos disjuntos

Sequencias e Series. Exemplo 1: Seja tal que. Veja que os dez primeiros termos estão dados por: ,,,,...,, ou seja que temos a

Introdução aos Algoritmos e Estruturas de Dados 2011/2012

Transcrição:

Análise Amortizada Análise Amortizada Fernando Lobo Algoritmos e Estrutura de Dados II Resulta da análise de uma sequência de operações numa estrutura de dados. Apesar de uma operação individual poder ser dispendiosa, o objectivo é mostrar que em média o custo por operação é pequeno. Porque há poucas operações dispendiosas e muitas operações baratas. Análise Amortizada permite obter a complexidade no pior caso para uma qualquer sequência de operações. 1 / 35 2 / 35 Vários métodos Exemplo: Tabelas dinâmicas Existem vários métodos para fazer este tipo de análise. Vamos estudar três: 1. Método de análise agregada (aggregate analysis) 2. Método contabiĺıstico (accounting method) 3. Método do potencial (potencial method) Problema: Queremos ter uma tabela (por exemplo uma tabela de hash) mas não sabemos à partida quantos elementos é que a tabela poderá ter. A tabela deve ser o mais pequena possível (para não desperdiçar memória), mas também suficientemente grande para não haver overflow (ou sobrecarga no caso de uma tabela de hash). Como resolver o problema? 3 / 35 4 / 35

Exemplo: Tabelas dinâmicas Exemplo Uma solução possível: Começamos com uma tabela pequena. Se encher, criamos uma tabela nova (com malloc ou new) e copiam-se os elementos da tabela pequena para a tabela grande. Depois elimina-se a tabela pequena (com free ou delete). Começamos com uma tabela com apenas uma posição. Vamos inserindo elementos. Se a tabela encher, duplicamos o tamanho. 5 / 35 6 / 35 INSERT(1) INSERT(2) Deu overflow. A tabela está cheia. O próximo INSERT não vai caber. Cria-se uma tabela com o dobro do tamanho, copia-se os elementos da tabela antiga, insere-se o novo elemento, e apaga-se a tabela antiga. A nova tabela passa a ter dimensão 2 e contém 2 elementos: 1 e 2. Está cheia novamente. 7 / 35 8 / 35

INSERT(3) INSERT(4) Deu overflow. Cria-se uma tabela com o dobro do tamanho, copia-se os elementos da tabela antiga, insere-se o novo elemento, e apaga-se a tabela antiga. A nova tabela passa a ter dimensão 4 e contém 3 elementos: 1, 2, 3. 9 / 35 Não há problema. Insere-se 4. A tabela passa a ter 4 elementos e está novamente cheia. 10 / 35 INSERT(5) INSERT(6) Overflow. Cria-se uma tabela com o dobro do tamanho,... A nova tabela passa a ter dimensão 8 e contém 5 elementos. 11 / 35 Não há problema. Insere-se 6. A tabela passa a ter 6 elementos. 12 / 35

INSERT(7), INSERT(8),... Análise do pior caso Consideremos uma sequência de n INSERTs. Estão a ver a ideia. Não é necessário dizer mais nada... No pior caso, um INSERT é Θ(n). Logo, no pior caso n INSERTs é n Θ(n) = Θ(n 2 ) Certo? ERRADO! No pior caso, n INSERTs é apenas Θ(n). 13 / 35 14 / 35 Análise detalhada Mais fácil de ver um padrão se reescrevermos c i Seja c i = custo do i-ésimo INSERT. c i = { i, se i 1 = 2 k, k N 1, caso contrário i 1 2 3 4 5 6 7 8 9 10... size i 1 2 4 4 8 8 8 8 16 16... c i 1 2 3 1 5 1 1 1 9 1... c i 1 1+1 1+2 1 1+4 1 1 1 1+8 1... i 1 2 3 4 5 6 7 8 9 10... size i 1 2 4 4 8 8 8 8 16 16... c i 1 2 3 1 5 1 1 1 9 1... Custo de n INSERTs = c i size i é o tamanho da tabela imediatamente após o i-ésimo INSERT. =? 15 / 35 16 / 35

Custo de n INSERTs Análise Amortizada Custo de n INSERTs = c i lg(n 1) = n + = 3n n + 2n = Θ(n). j=0 2 j Qualquer estratégia que permita analisar uma sequência de operações e mostre que o custo médio de uma operação é pequeno (apesar de poder haver operações individuais que são caras) denomina-se de análise amortizada. Logo, o custo médio de cada operação é Θ(n) n = Θ(1). Ao custo médio chamamos custo amortizado. 17 / 35 18 / 35 Análise Amortizada Análise agregada Apesar de estarmos a fazer médias, isto não tem nada que ver com a análise de complexidade no caso médio. A análise não envolve probabilidades/distribuição de inputs. Análise amortizada dá a performance no pior caso para uma sequência de operações, o que é igual à performance média de cada operação no pior caso. O método que usamos há pouco é o método de análise agregada. Vejamos a análise do mesmo problema com os outros métodos: método contabiĺıstico. método potencial. 19 / 35 20 / 35

Método contabiĺıstico Método contabiĺıstico É a visão do banqueiro. O banco não dá juros. E também não dá empréstimos. A ideia é cobrar um custo fictício ĉ i (custo amortizado) pela operação. 1 Euro corresponde a uma unidade de trabalho (tempo). Isto é, o saldo do banco não pode ser negativo. Ou seja: Esse montante pode ser consumido ao efectuar-se a operação. O que sobrar guarda-se no banco para poder ser usado mais tarde. c i }{{} custo real ĉ i }{{} custo amortizado, n. 21 / 35 22 / 35 Cobrar um custo fictício de 3 Euros para cada INSERT. 1 Euro é para o INSERT propriamente dito. 2 Euros é para guardar no banco e usar mais tarde quando for necessário duplicar o tamanho da tabela. 1 Euro para mover um item recente. 1 Euro para mover um item antigo. Ver exemplo: 23 / 35 24 / 35

Invariante: O saldo do banco 0. Logo, a soma dos custos amortizados é um limite superior para a soma dos custos reais. Ao inserir o 9 o elemento temos de duplicar o tamanho da tabela. Os 8 Euros que estão no banco dão para mover os 8 elementos na tabela antiga para a tabela nova. i 1 2 3 4 5 6 7 8 9 10... size i 1 2 4 4 8 8 8 8 16 16... c i 1 2 3 1 5 1 1 1 9 1... ĉ i 2 3 3 3 3 3 3 3 3 3... bank i 1 2 2 4 2 4 6 8 2 4... Depois o banco fica com zero Euros. etc... 25 / 35 26 / 35 Método potencial i 1 2 3 4 5 6 7 8 9 10... size i 1 2 4 4 8 8 8 8 16 16... c i 1 2 3 1 5 1 1 1 9 1... ĉ i 2 3 3 3 3 3 3 3 3 3... bank i 1 2 2 4 2 4 6 8 2 4... A primeira operação só necessita de 2 Euros. Mas se dermos 3 Euros também não faz mal. Fazemos o banco ficar com 1 Euro a mais. É uma esmola. Coitados dos bancos É a visão do físico. A ideia é olhar para o montante que está na conta bancária como se fosse energia. A energia fica associada à estrutura de dados no seu todo. 27 / 35 28 / 35

Método potencial Método potencial Começamos com uma estrutura de dados D 0. Operação i transforma D i 1 em D i. Custo real da operação i é c i. Definimos uma função potencial, Φ : {D i } R, de tal forma que: Φ(D 0 ) = 0 Φ(D i ) 0, i O custo amortizado ĉ i é definido por, ĉ i = c i + Φ(D i ) Φ(D i 1 ) }{{} dif. de potencial Φ i Se Φ i > 0, então ĉ i > c i. operação i guarda energia na E.D. para poder usar mais tarde. Se Φ i < 0, então ĉ i < c i. a E.D. gasta energia armazenada para ajudar a pagar o custo real da operação i. 29 / 35 30 / 35 Método potencial O custo amortizado total das n operações é: Definimos o potencial da tabela imediatamente após o i-ésimo INSERT por: Φ(D i ) = 2i 2 lg i (assumir que 2 lg 0 = 0) ĉ i = = (c i + Φ(D i ) Φ(D i 1 )) ( ) c i + Φ(D n ) Φ(D 0 ) c i, porque Φ(D n ) 0 e Φ(D 0 ) = 0 Nota: Φ(D 0 ) = 0 e Φ(D i ) 0, i 31 / 35 32 / 35

Custo amortizado da i-ésima operação é: Análise por casos ĉ i = c i + Φ(D i ) Φ(D i 1 ) { i, se i 1 for uma potência exacta de 2 = 1, caso contrário ( + 2i 2 lg i ) (2(i 1) 2 lg(i 1) ) = {...} + 2 2 lg i + 2 lg(i 1). } Caso 1: i 1 é uma potência exacta de 2. ĉ i = i + 2 2 lg i + 2 lg(i 1) = i + 2 2(i 1) + (i 1) = i + 2 2i + 2 + i + 1 = 3. Caso 2: i 1 não é uma potência exacta de 2. ĉ i = 1 + 2 2 lg i + 2 lg(i 1) = 3. (porque neste caso 2 lg i = 2 lg(i 1) ) Logo, n INSERTs custam 3n = Θ(n), no pior caso. 33 / 35 34 / 35 Qual o método a utilizar na prática? Pode-se usar qualquer método (agregado, contabiĺıstico, potencial). Há situações em que um método pode ser mais apropriado (i.e., mais fácil de aplicar) que outro. 35 / 35