Algorithm Analysis
O Modelo de Computação RAM
Computador hipotético.
Projeta algoritmos independentes de máquina.
Características:
Operações simples levam um passo de tempo.
Acessos à memória levam um passo de tempo.
Loops e sub-rotinas envolvem várias operações.
Memória é ilimitada.
Utilidades:
Entender como um algoritmo funcionará em um computador real.
Análise de algoritmos independente da máquina.
Melhor, Pior e Complexidade de Caso Médio
Melhor Caso:
Número mínimo de passos.
Pior Caso:
Número máximo de passos.
Caso Médio:
Número médio de passos.
na prática a complexidade
do Pior Caso é a mais útil.
A notação "Big Oh"
simplifica a complexidades de tempo.
Notação "Big Oh"
Simplifica complexidades de tempo.
Ignora detalhes intricados.
Foca nas tendências gerais.
Importante para comparar a eficiência de algoritmos.
Análise simplificada.
Definições
f(n) = O(g(n))
f(n) = Ω(g(n))
f(n) = Θ(g(n))
Taxas de Crescimento e Relações de Dominância
Ignora as diferenças entre constantes multiplicativas.
As diferenças não afetam o crescimento.
Relações de Dominância
Agrupa funções em classes.
Funções da mesma classe têm a mesma ordem de crescimento.
Funções de classes diferentes são diferentes em relação à notação.
Classes de dominância:
* Constante
* Logarítmica
* Linear
* Super linear
* Quadrática
* Cúbica
* Exponencial
* Fatorial
Funções de Multiplicação
A multiplicação por uma constante não afeta o comportamento assintótico de uma função.
Multiplicação por constante
* O(c · f(n)) → O(f(n))
* Ω(c · f(n)) → Ω(f(n))
* Θ(c · f(n)) → Θ(f(n))
Multiplicação de Funções: ambas as funções são importantes, a menos que uma delas seja dominante.
Multiplicação por funções
* O(f(n))*O(g(n)) → O(f(n)*g(n))
* Ω(f(n))*Ω(g(n)) → Ω(f(n)*g(n))
* Θ(f(n))* Θ(g(n)) → Θ(f(n)*g(n))
Os relacionamentos Big Oh são transitivos.
Transitividade
* Se f(n)=O(g(n)) e g(n)=O(h(n)), então f(n)=O(h(n))