Você está na página 1de 44

Análise amortizada

Aula 11

Fábio Henrique Viduani Martinez

Faculdade de Computação
Universidade Federal de Mato Grosso do Sul

Análise de Algoritmos

Viduani Martinez (FACOM) Análise amortizada AA 1 / 44


Conteúdo da aula

1 Motivação

2 Análise agregada

3 Método da contagem

4 Método potencial

5 Exercícios

Viduani Martinez (FACOM) Análise amortizada AA 2 / 44


Motivação

Introdução

I em uma análise amortizada, computamos a média do tempo


necessário para executar uma sequência de operações sobre
uma estrutura de dados, sobre todas as operações executadas
I com a análise amortizada podemos mostrar que o custo médio de
uma operação é pequeno, se calculamos a média sobre uma
sequência de operações, mesmo que uma das operações nessa
sequência possa ser cara
I análise amortizada difere da análise de caso médio pelo (não)
uso de probabilidades
I análise amortizada garante o desempenho médio de cada
operação no pior caso

Viduani Martinez (FACOM) Análise amortizada AA 3 / 44


Análise agregada

Introdução

I na análise agregada, mostramos que para todo n, uma sequência


de n operações tem tempo de pior caso T(n), no total
I no pior caso, o custo médio, ou custo amortizado, por operação é
então T(n)/n
I observe que esse custo amortizado se aplica a cada operação,
mesmo quando existem vários tipos de operação nessa
sequência
I os outros dois métodos que veremos podem atribuir diferentes
custos amortizados para diferentes tipos de operação

Viduani Martinez (FACOM) Análise amortizada AA 4 / 44


Análise agregada

Operações em uma pilha

I vamos analisar pilhas que são modificadas após novas operações


I há duas operações básicas sobre pilhas, cada uma com tempo
de execução O(1):
I Push(S, x), empilha o objeto x na pilha S; e
I Pop(S), que desempilha o objeto do topo de S e o devolve (a
chamada de Pop a uma pilha vazia gera uma mensagem de erro)
I como cada uma dessas operações tem tempo O(1), vamos
considerar o custo de cada uma como sendo 1
I o custo total de uma sequência de n operações Push e Pop é n e
o tempo de execução para as n operações é portanto Θ(n)

Viduani Martinez (FACOM) Análise amortizada AA 5 / 44


Análise agregada

Operações em uma pilha

I adicionamos a operação MultiPop(S, k) sobre a pilha, que remove


os k objetos do topo da pilha S, desempilhando a pilha inteira se
ela contém menos que k objetos (k > 0)

MultiPop(S, k)
01. enquanto não StackEmpty(S) e k > 0
02. Pop(S)
03. k = k−1

Viduani Martinez (FACOM) Análise amortizada AA 6 / 44


Análise agregada

Operações em uma pilha

MultiPop(S, 4) MultiPop(S, 7)

Viduani Martinez (FACOM) Análise amortizada AA 7 / 44


Análise agregada

Operações em uma pilha

I o tempo de execução de MultiPop(S, k) sobre uma pilha de s


objetos é linear no número de operações Pop executadas
I podemos assim analisar MultiPop em termos do custo 1 para
cada operação Push e Pop
I o número de iterações da estrutura de repetição enquanto é o
número min(s, k) de objetos desempilhados
I cada iteração faz uma chamada a Pop na linha 2
I assim, o custo total de MultiPop é min(s, k) e o tempo de
execução é uma função linear desse custo

Viduani Martinez (FACOM) Análise amortizada AA 8 / 44


Análise agregada

Operações em uma pilha

I vamos analisar uma sequência de n operações Push, Pop e


MultiPop sobre uma pilha inicialmente vazia
I o custo de pior caso de uma operação MultiPop nessa
sequência é O(n), já que o tamanho da pilha é no máximo n
I portanto, o tempo de pior caso de qualquer operação na pilha é
O(n) e assim uma sequência de n operações tem custo O(n2 ), já
que podemos ter O(n) operações MultiPop com custo O(n) cada
I apesar dessa análise estar correta, o resultado O(n2 ) que é obtido
considerando o custo de pior caso de cada operação
individualmente não é justo

Viduani Martinez (FACOM) Análise amortizada AA 9 / 44


Análise agregada

Operações em uma pilha

I usando análise agregada, podemos obter um limitante superior


melhor, que considera a sequência inteira de n operações
I apesar de uma única operação MultiPop ser possivelmente cara,
qualquer sequência de n operações Push, Pop e MultiPop sobre
uma pilha inicialmente vazia pode custar no máximo O(n)
I isso porque podemos desempilhar cada objeto da pilha no
máximo uma vez para cada vez que o empilhamos
I portanto, o número de vezes que Pop pode ser chamado sobre
uma pilha não vazia, incluindo chamadas dentro de MultiPop, é
no máximo o número de operações Push, que é no máximo n
I para qualquer valor de n, qualquer sequência de n operações
Push, Pop e MultiPop tem tempo total O(n)

Viduani Martinez (FACOM) Análise amortizada AA 10 / 44


Análise agregada

Operações em uma pilha

I o custo médio de uma operação é O(n)/n = O(1)


I na análise agregada, atribuímos o custo amortizado para cada
operação como sendo o custo médio
I nesse exemplo, temos então que todas as três operações sobre
uma pilha têm custo amortizado O(1)
I note que, apesar de termos mostrado que o custo médio, e
portanto o tempo de execução, de uma operação sobre uma pilha
é O(1), não usamos raciocínio probabilístico
I mostramos, na verdade, um limitante de pior caso de O(n) sobre
uma sequência de n operações
I dividindo esse custo total por n, obtemos o custo médio ou
amortizado por operação

Viduani Martinez (FACOM) Análise amortizada AA 11 / 44


Análise agregada

Incremento de um contador binário


I considere o problema de implementar um contador binário de k
bits que conta a partir de 0
I usamos como contador um vetor A[0..k − 1] de bits, onde
A.length = k
I um número binário x que é armazenado no contador tem seu bit
menos significativo em A[0] e seu bit mais significativo em A[k − 1]
de tal forma que sua representação na base decimal é
k−1
X
x= A[i] · 2i
i=0

I inicialmente, x = 0 e assim A[i] = 0 para i = 0, 1, . . . , k − 1


I para adicionar 1 (mod 2k ) ao valor no contador, usamos o
algoritmo Increment
Viduani Martinez (FACOM) Análise amortizada AA 12 / 44
Análise agregada

Incremento de um contador binário

Increment(A)
01. i=0
02. enquanto i < A.length e A[i] == 1
03. A[i] = 0
04. i = i+1
05. se i < A.length
06. A[i] = 1

Viduani Martinez (FACOM) Análise amortizada AA 13 / 44


Análise agregada

Incremento de um contador binário

Viduani Martinez (FACOM) Análise amortizada AA 14 / 44


Análise agregada

Incremento de um contador binário

I como no exemplo da pilha, uma análise superficial fornece um


limitante correto mas não justo
I uma única execução de Increment tem tempo Θ(k) no pior caso,
quando o vetor A é todo preenchido com bits 1
I assim, uma sequência de n operações Increment sobre um
contador inicializado com 0 tem tempo O(nk) no pior caso

Viduani Martinez (FACOM) Análise amortizada AA 15 / 44


Análise agregada

Incremento de um contador binário

I por outro lado, observe que nem todos os bits são trocados cada
vez que Increment é chamado
I A[0] é trocado cada vez que Increment é chamado
I A[1] é trocado a cada duas chamadas de Increment numa
sequência de n operações, totalizando bn/2c trocas
I similarmente, A[2] é modificado bn/4c vezes numa sequência de n
operações Increment

Viduani Martinez (FACOM) Análise amortizada AA 16 / 44


Análise agregada

Incremento de um contador binário

I em geral, para i = 0, 1, . . . , k − 1, o bit A[i] é trocado bn/2i c vezes em


uma sequência de n operações Increment sobre um contador
inicializado com 0
I o número total de trocas é então
k−1   ∞
X n X 1
<n = 2n
i=0
2i i=0
2i

I o tempo de pior caso para uma sequência de n operações


Increment sobre um contador inicializado com 0 é O(n)
I o custo médio de cada operação, e portanto o custo amortizado
por operação, é O(n)/n = O(1)

Viduani Martinez (FACOM) Análise amortizada AA 17 / 44


Método da contagem

Introdução

I no método da contagem de análise amortizada, atribuímos


valores diferentes para operações diferentes, com algumas
operações com valor maior ou menor que seu custo real
I chamamos o valor de uma operação de seu custo amortizado
I quando o custo amortizado de uma operação excede seu custo
real, atribuímos a diferença para um objeto específico na
estrutura de dados chamado crédito
I crédito pode ajudar a pagar por operações posteriores cujo custo
amortizado é menor que seu custo real
I assim, podemos ver o custo amortizado de uma operação como a
composição de dois valores: seu custo real e seu crédito, que
pode ser depositado ou gasto

Viduani Martinez (FACOM) Análise amortizada AA 18 / 44


Método da contagem

Introdução

I operações diferentes podem ter diferentes custos amortizados


I devemos escolher os custos amortizados das operações
cuidadosamente
I se queremos mostrar que no pior caso o custo médio por
operação é pequeno, devemos garantir que o custo amortizado
total de uma sequência de operações fornece um limitante
superior para o custo total real da sequência
I além disso, essa relação deve valer para todas sequências de
operações

Viduani Martinez (FACOM) Análise amortizada AA 19 / 44


Método da contagem

Introdução
I denotamos por ci e ĉi o custo real e o custo amortizado,
respectivamente, da i-ésima operação
I então, para todas sequências de n operações, vale que
n
X n
X
ĉi > ci (1)
i=1 i=1

I o crédito total armazenado na estrutura de dados é a diferença


entre o custo total amortizado e o custo total real
n
X n
X
ĉi − ci
i=1 i=1

I pela desigualdade (1), o crédito total associado com a estrutura


de dados deve ser sempre não negativo
Viduani Martinez (FACOM) Análise amortizada AA 20 / 44
Método da contagem

Operações em uma pilha

I os custos reais das operações em uma pilha são


Push 1
Pop 1
MultiPop min(k, s)
onde k é o argumento fornecido a MultiPop e s é o tamanho da
pilha quando da chamada do algoritmo
I vamos atribuir os seguintes custos amortizados às operações
Push 2
Pop 0
MultiPop 0

Viduani Martinez (FACOM) Análise amortizada AA 21 / 44


Método da contagem

Operações em uma pilha

I note que o custo amortizado de MultiPop é constante enquanto


que o custo real é variável
I na verdade, os três custos amortizados são constantes
I em geral, os custos amortizados das operações sob
consideração podem diferir entre si até mesmo assintoticamente

Viduani Martinez (FACOM) Análise amortizada AA 22 / 44


Método da contagem

Operações em uma pilha

I podemos pagar por qualquer sequência de operações em uma


pilha usando os valores amortizados
I cada vez que um item é empilhado, usamos 1 unidade do valor
amortizado para pagar o custo real da operação e deixamos mais
1 unidade de crédito
I em qualquer momento, todo item empilhado tem 1 unidade de
crédito que pode ser usado futuramente

Viduani Martinez (FACOM) Análise amortizada AA 23 / 44


Método da contagem

Operações em uma pilha

I o crédito de um item é visto como um pré-pagamento para o


custo de desempilhá-lo da pilha
I na execução uma operação Pop, não há crédito envolvido e
pagamos seu custo real com o crédito anteriormente armazenado
I para desempilhar um item, tomamos 1 unidade de crédito e a
usamos para pagar o custo real da operação
I assim, cobrando um pouco a mais pela operação Push, não é
necessário armazenar créditos para a operação Pop

Viduani Martinez (FACOM) Análise amortizada AA 24 / 44


Método da contagem

Operações em uma pilha

I também não há necessidade de armazenar créditos em uma


operação MultiPop
I para desempilhar o primeiro elemento da pilha, há 1 unidade de
crédito disponível e a usamos para pagar pelo custo real de uma
operação Pop
I para desempilhar um segundo item, novamente temos 1 unidade
de crédito disponível associada a esse item para pagar pela
operação Pop
I e assim por diante
I assim, sempre temos crédito suficiente em qualquer momento
para pagar por operações MultiPop

Viduani Martinez (FACOM) Análise amortizada AA 25 / 44


Método da contagem

Operações em uma pilha

I em outras palavras, como cada item na pilha tem associado um


crédito de 1 unidade e a pilha tem um número não negativo de
itens, garantimos que o total de créditos associado à pilha é
sempre não negativo
I portanto, para qualquer sequência de n operações Push, Pop e
MultiPop, o custo amortizado total é um limitante superior para o
custo real total
I como o custo amortizado total é O(n), o custo real total também é
O(n)

Viduani Martinez (FACOM) Análise amortizada AA 26 / 44


Método da contagem

Incremento de um contador binário

I o tempo de execução da operação de incremento de um contador


binário que inicia com 0 é proporcional ao número de bits
modificados
I atribuímos custo amortizado 2 para quando “ligamos” um bit, isto
é, trocamos seu valor de 0 para 1
I quando um bit é ligado, usamos 1 unidade para pagar pelo custo
real dessa operação e deixamos 1 unidade de crédito a ser usado
posteriormente quando o bit é “desligado”
I em qualquer momento, todo bit 1 armazenado no contador tem 1
unidade de crédito disponível e assim podemos não cobrar para
desligar um bit

Viduani Martinez (FACOM) Análise amortizada AA 27 / 44


Método da contagem

Incremento de um contador binário

I no algoritmo Increment, o custo de desligar bits na estrutura de


repetição da linha 2 é pago pelos créditos nesses bits
I Increment liga no máximo um bit na linha 6 e portanto o custo
amortizado de uma operação Increment é no máximo 2
I o número de bits 1 no contador nunca se torna negativo e assim a
quantidade de crédito permanece não negativa durante toda a
execução do algoritmo
I assim, para n operações Increment, o custo amortizado total é
O(n), que é um limitante para o custo real total

Viduani Martinez (FACOM) Análise amortizada AA 28 / 44


Método potencial

Introdução

I o método potencial representa o trabalho pré-pago como “energia


potencial” ou “potencial”, que pode ser liberado para pagar por
operações futuras
I o potencial é associado à estrutura de dados como um todo e não
a objetos especifícos na estrutura

Viduani Martinez (FACOM) Análise amortizada AA 29 / 44


Método potencial

Introdução

I executamos n operações iniciando com uma estrutura de dados


D0
I para cada i = 1, 2, . . . n, chamamos ci o custo real da i-ésima
operação e de Di a estrutura de dados que resulta da aplicação
da i-ésima operação na estrutura de dados Di−1
I a função potencial Φ mapeia cada estrutura de dados Di para um
número real Φ(Di ) que é o potencial associado com a estrutura de
dados Di
I o custo amortizado cˆi da i-ésima operação com respeito à função
potencial Φ é definido por

cˆi = ci + Φ(Di ) − Φ(Di−1 )

Viduani Martinez (FACOM) Análise amortizada AA 30 / 44


Método potencial

Introdução

I assim, o custo amortizado total das n operações é


n
X n 
X 
cˆi = ci + Φ(Di ) − Φ(Di−1 )
i=1 i=1
n
X
= ci + Φ(Dn ) − Φ(D0 )
i=1

I se conseguimos definir a função potencial Φ talPque


Φ(Dn ) > Φ(D0 ), então o custo amortizadoPtotal ni=1 cˆi fornece um
limitante superior para o custo real total ni=1 ci

Viduani Martinez (FACOM) Análise amortizada AA 31 / 44


Método potencial

Introdução

I na prática, nem sempre sabemos quantas operações podem ser


executadas
I assim, se exigimos que Φ(Di ) > Φ(D0 ) para todo i, então
garantimos que “pagamos” antecipadamente
I usualmente, definimos Φ(D0 ) = 0 e então mostramos que
Φ(Di ) > 0 para todo i

Viduani Martinez (FACOM) Análise amortizada AA 32 / 44


Método potencial

Introdução

I intuitivamente, se a diferença de potencial da i-ésima operação


Φ(Di ) − Φ(Di−1 ) é positiva, então o custo amortizado cˆi representa
uma “sobretaxa” da i-ésima operação
I se a diferença de potencial é negativa, então o custo amortizado
representa um “pagamento insuficiente” da i-ésima operação e o
decréscimo no potencial paga pelo custo real da operação
I os custos amortizados assim definidos dependem da escolha da
função potencial Φ
I funções potenciais diferentes podem fornecer custos amortizados
diferentes, mas ainda assim serem limitantes superiores nos
custos reais

Viduani Martinez (FACOM) Análise amortizada AA 33 / 44


Método potencial

Operações em uma pilha

I definimos a função potencial Φ sobre uma pilha como sendo o


número de objetos na pilha
I para uma pilha vazia D0 , que é a estrutura inicial, temos que
Φ(D0 ) = 0
I como o número de elementos na pilha nunca é negativo, a pilha
Di que resulta depois da i-ésima operação tem potencial não
negativo e assim
Φ(Di ) > 0 = Φ(D0 )
I o custo amortizado total de n operações com respeito a Φ
representa um limitante superior para o custo real total

Viduani Martinez (FACOM) Análise amortizada AA 34 / 44


Método potencial

Operações em uma pilha

I se a i-ésima operação sobre uma pilha contendo s objetos é uma


operação Push, então a diferença de potencial é

Φ(Di ) − Φ(Di−1 ) = (s + 1) − s = 1

I assim, o custo amortizado da operação Push é

cˆi = ci + Φ(Di ) − Φ(Di−1 ) = 1 + 1 = 2

Viduani Martinez (FACOM) Análise amortizada AA 35 / 44


Método potencial

Operações em uma pilha

I suponha agora que a i-ésima operação na pilha é MultiPop(S, k),


que faz com que k0 = min(k, s) objetos sejam desempilhados
I o custo real dessa operação é k0 e a diferença de potencial é

Φ(Di ) − Φ(Di−1 ) = −k0

I assim, o custo amortizado da operação MultiPop é

cˆi = ci + Φ(Di ) − Φ(Di−1 ) = k0 − k0 = 0

I similarmente, o custo amortizado de uma operação Pop é 0

Viduani Martinez (FACOM) Análise amortizada AA 36 / 44


Método potencial

Operações em uma pilha

I o custo amortizado de cada uma das três operações é O(1) e


assim o custo total amortizado de uma sequência de n operações
é O(n)
I como sabemos que Φ(Di ) > Φ(D0 ), o custo amortizado total das n
operações é um limitante superior sobre o custo real total
I portanto, o custo de pior caso das n operações é O(n)

Viduani Martinez (FACOM) Análise amortizada AA 37 / 44


Método potencial

Incremento de um contador binário

I o potencial do contador após a i-ésima operação Increment é


definido como o número bi de bits 1 no contador
I suponha que a i-ésima operação Increment desliga ti bits
I o custo real dessa operação é ti + 1

Viduani Martinez (FACOM) Análise amortizada AA 38 / 44


Método potencial

Incremento de um contador binário

I se bi = 0, então a i-ésima operação desliga todos os k bits e assim


bi−1 = k = ti
I se bi > 0 então bi = bi−1 − ti + 1
I assim, bi 6 bi−1 − ti + 1 e a diferença de potencial é

Φ(Di ) − Φ(Di−1 ) 6 (bi−1 − ti + 1) − bi−1 = 1 − ti

I o custo amortizado é portanto

cˆi = ci + Φ(Di ) − Φ(Di−1 ) 6 (ti + 1) + (1 − ti ) = 2

Viduani Martinez (FACOM) Análise amortizada AA 39 / 44


Método potencial

Incremento de um contador binário

I como o contador começa com 0, então Φ(D0 ) = 0


I como Φ(Di ) > 0 para todo i, o custo amortizado total de uma
sequência de n operações Increment é um limitante superior
para o custo real total
I assim, o custo de pior caso de uma sequência de n operações
Increment é O(n)

Viduani Martinez (FACOM) Análise amortizada AA 40 / 44


Exercícios

Exercícios

17.1-1 Se o conjunto de operações sobre uma pilha inclui a operação


MultiPush, que empilha k itens na pilha, o limitante O(1) sobre o custo
amortizado de cada operação na pilha continuaria valendo?
17.1-2 Mostre que se uma operação Decrement fosse incluída no conjunto de
operações sobre um contador de k bits, uma sequência de n operações
poderia custar tempo Θ(nk).
17.1-3 Suponha que executamos uma sequência de n operações sobre uma
estrutura de dados na qual a i-ésima operação custa i se i é uma
potência de 2, e 1 caso contrário. Use análise agregada para determinar
o custo amortizado por operação.

Viduani Martinez (FACOM) Análise amortizada AA 41 / 44


Exercícios

Exercícios

17.2-1 Suponha que executamos uma sequência de operações sobre uma


pilha cujo tamanho nunca ultrapassa k, Após k operações, fazemos uma
cópia da pilha inteira com propósito de backup. Mostre que o custo das
n operações Push, Pop e Copy sobre a pilha é O(n), atribuindo custos
amortizados adequados para essas operações.
17.2-2 Refaça o exercício 17.1-3 usando o método da contagem.
17.2-3 Suponha que desejamos não apenas incrementar um contador mas
também reinicializá-lo (com zeros). Supondo que o tempo para
examinar ou modificar um bit é Θ(1), mostre como implementar um
contador como um vetor de bits tal que qualquer sequência de n
operações Increment e Reset tem tempo O(n) sobre um contador
inicializado com 0. Sugestão: mantenha um apontador para o bit 1 mais
significativo.

Viduani Martinez (FACOM) Análise amortizada AA 42 / 44


Exercícios

Exercícios

17.3-1 Suponha que temos uma função potencial Φ tal que Φ(Di ) > Φ(D0 ) para
todo i, mas Φ(D0 ) , 0. Mostre que exisite uma função potencial Φ0 tal
que Φ0 (D0 ) = 0, Φ0 (Di ) > 0 para todo i > 1 e os custos amortizados
usando Φ0 saão os mesmos que os custos amortizados usando Φ.
17.3-2 Refaça o exercício 17.1-3 usando o método potencial.
17.3-4 Qual é o custo total de executar n das operações sobre uma pilha Push,
Pop e MultiPop, considerando que a pilha começa com s0 objetos e
termina com sn objetos?

Viduani Martinez (FACOM) Análise amortizada AA 43 / 44


Exercícios

Exercícios

17.3-7 Projete uma estrutura de dados que suporte as seguintes duas


operações para um multiconjunto dinâmico S de números inteiros:
I Insert(S, x) insere x em S
I Delete-Larger-Half(S) remove os d|S|/2e maiores elementos de S
Explique como implementar essa estrutura de dados de tal forma que
qualquer sequência de m operações Insert e Delete-Larger-Half é
executada em tempo O(m). Sua implementação deve incluir também
uma forma de imprimir os elementos de S em tempo O(|S|).

Viduani Martinez (FACOM) Análise amortizada AA 44 / 44

Você também pode gostar