DAA - Metodologia de Análise
Para medir o consumo de recursos de um algoritmo, diferentes estratégias são usadas conforme discutido neste capítulo.
Análise Assintótica
O comportamento assintótico de uma função f(n) refere-se ao crescimento de f(n) Como n fica grande.
Normalmente ignoramos pequenos valores de n, uma vez que geralmente estamos interessados em estimar o quão lento o programa será com grandes entradas.
Uma boa regra prática é que quanto mais lenta a taxa de crescimento assintótico, melhor será o algoritmo. Embora nem sempre seja verdade.
Por exemplo, um algoritmo linear $ f (n) = d * n + k $ é sempre assintoticamente melhor do que um quadrático, $ f (n) = cn ^ 2 + q $.
Resolvendo Equações de Recorrência
Uma recorrência é uma equação ou desigualdade que descreve uma função em termos de seu valor em entradas menores. As recorrências são geralmente usadas no paradigma de dividir e conquistar.
Vamos considerar T(n) ser o tempo de execução em um problema de tamanho n.
Se o tamanho do problema for pequeno o suficiente, diga n < c Onde c é uma constante, a solução simples leva um tempo constante, que é escrito como θ(1). Se a divisão do problema resultar em uma série de subproblemas de tamanho $ \ frac {n} {b} $.
Para resolver o problema, o tempo necessário é a.T(n/b). Se considerarmos que o tempo necessário para a divisão éD(n) e o tempo necessário para combinar os resultados dos subproblemas é C(n), a relação de recorrência pode ser representada como -
$$ T (n) = \ begin {cases} \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \: \ theta (1) & if \: n \ leqslant c \\ a T (\ frac {n} {b}) + D (n) + C (n) & caso contrário \ end { casos} $$
Uma relação de recorrência pode ser resolvida usando os seguintes métodos -
Substitution Method - Neste método, adivinhamos um limite e, usando a indução matemática, provamos que nossa suposição estava correta.
Recursion Tree Method - Neste método, uma árvore de recorrência é formada onde cada nó representa o custo.
Master’s Theorem - Esta é outra técnica importante para encontrar a complexidade de uma relação de recorrência.
Análise Amortizada
A análise amortizada é geralmente usada para certos algoritmos em que uma sequência de operações semelhantes é executada.
A análise amortizada fornece um limite sobre o custo real de toda a sequência, em vez de limitar o custo da sequência de operações separadamente.
A análise amortizada difere da análise de caso médio; probabilidade não está envolvida na análise amortizada. A análise amortizada garante o desempenho médio de cada operação no pior caso.
Não é apenas uma ferramenta de análise, é uma forma de pensar o design, uma vez que design e análise estão intimamente relacionados.
Método Agregado
O método agregado fornece uma visão global de um problema. Neste método, sen as operações levam o tempo do pior caso T(n)no total. Então, o custo amortizado de cada operação éT(n)/n. Embora operações diferentes possam levar um tempo diferente, neste método os custos variáveis são negligenciados.
Método de Contabilidade
Neste método, diferentes encargos são atribuídos a diferentes operações de acordo com seu custo real. Se o custo amortizado de uma operação exceder seu custo real, a diferença é atribuída ao objeto como crédito. Este crédito ajuda a pagar por operações posteriores cujo custo amortizado seja inferior ao custo real.
Se o custo real e o custo amortizado de ith operação são $ c_ {i} $ e $ \ hat {c_ {l}} $, então
$$ \ displaystyle \ sum \ limits_ {i = 1} ^ n \ hat {c_ {l}} \ geqslant \ displaystyle \ sum \ limits_ {i = 1} ^ n c_ {i} $$
Método Potencial
Este método representa o trabalho pré-pago como energia potencial, ao invés de considerar o trabalho pré-pago como crédito. Essa energia pode ser liberada para pagar por operações futuras.
Se realizarmos n operações começando com uma estrutura de dados inicial D0. Vamos considerar,ci como o custo real e Di como estrutura de dados de ithOperação. A função potencial Ф mapeia para um número real Ф (Di), o potencial associado de Di. O custo amortizado $ \ hat {c_ {l}} $ pode ser definido por
$$ \ hat {c_ {l}} = c_ {i} + \ Phi (D_ {i}) - \ Phi (D_ {i-1}) $$
Portanto, o custo amortizado total é
$$ \ displaystyle \ sum \ limits_ {i = 1} ^ n \ hat {c_ {l}} = \ displaystyle \ sum \ limits_ {i = 1} ^ n (c_ {i} + \ Phi (D_ {i} ) - \ Phi (D_ {i-1})) = \ displaystyle \ sum \ limits_ {i = 1} ^ n c_ {i} + \ Phi (D_ {n}) - \ Phi (D_ {0}) $ $
Mesa Dinâmica
Se o espaço alocado para a mesa não for suficiente, devemos copiar a mesa para uma mesa maior. Da mesma forma, se um grande número de membros for apagado da tabela, é uma boa ideia realocar a tabela com um tamanho menor.
Usando a análise amortizada, podemos mostrar que o custo amortizado de inserção e exclusão é constante e o espaço não utilizado em uma tabela dinâmica nunca excede uma fração constante do espaço total.
No próximo capítulo deste tutorial, discutiremos brevemente as Notações Assintóticas.