Análise assintótica
Este termo se refere à análise do desempenho do algoritmo sob a suposição de que os dados nos quais o algoritmo opera (a entrada ) são, em termos leigos, "grandes o suficiente para que aumentá-los não altere a conclusão". Embora o tamanho exato da entrada não precise ser especificado (precisamos apenas de um limite superior), o conjunto de dados em si deve ser especificado.
Observe que até agora falamos apenas sobre o método de análise; não especificamos exatamente qual quantidade estamos analisando (complexidade do tempo? complexidade do espaço?), e nem especificamos em qual métrica estamos interessados (pior caso? melhor caso? média?).
Na prática, o termo análise assintótica comumente se refere ao limite superior da complexidade de um algoritmo, ou seja, o pior caso de desempenho medido pelo tempo total de execução, que é representado pela notação big-Oh (por exemplo, um algoritmo de classificação pode ser O(nlogn)
).
Análise amortizada
Este termo se refere à análise do desempenho do algoritmo com base em uma sequência específica de operações que visa o pior cenário - ou seja, a análise amortizada implica que a métrica é o pior caso de desempenho (embora ainda não diga qual quantidade está sendo medida ) Para realizar essa análise, precisamos especificar o tamanho da entrada, mas não precisamos fazer nenhuma suposição sobre sua forma.
Em termos leigos, a análise amortizada é escolher um tamanho arbitrário para a entrada e, em seguida, "reproduzir" o algoritmo. Sempre que uma decisão que depende da entrada deve ser tomada, o pior caminho é escolhido¹. Depois que o algoritmo foi executado até a conclusão, dividimos a complexidade calculada pelo tamanho da entrada para produzir o resultado final.
¹note: Para ser preciso, o pior caminho que é teoricamente possível . Se você tem um vetor que dobra de tamanho dinamicamente cada vez que sua capacidade se esgota, "pior caso" não significa supor que ele precisará dobrar a cada inserção, porque as inserções são processadas como uma sequência. Temos permissão para (e de fato devemos) usar o estado conhecido para eliminar matematicamente o máximo de casos "ainda piores" que pudermos, mesmo enquanto a entrada permanecer desconhecida.
A diferença mais importante
A diferença crítica entre a análise assintótica e amortizada é que a primeira depende da própria entrada, enquanto a última depende da sequência de operações que o algoritmo executará.
Portanto:
- a análise assintótica permite-nos afirmar que a complexidade do algoritmo quando é dada uma entrada de melhor / pior / caso médio de tamanho que se aproxima de N é limitada por alguma função F (N) - onde N é uma variável
- a análise amortizada nos permite afirmar que a complexidade do algoritmo quando recebe uma entrada de características desconhecidas, mas tamanho N conhecido não é pior do que o valor de uma função F (N) - onde N é um valor conhecido