Conteúdo principal
Computer science theory
Curso: Computer science theory > Unidade 1
Lição 3: Notação assintóticaFunções em notação assintótica
Quando usamos a notação assintótica para expressar a taxa de crescimento do tempo de execução de um algoritmo, em termos do tamanho de entrada , é bom ter algumas coisas em mente.
Vamos começar com algo fácil. Suponha que um algoritmo demorou uma quantidade constante de tempo para ser executado, independentemente do tamanho da entrada. Por exemplo, se você recebeu um array que já estava em ordem crescente e você tinha que localizar o menor elemento, a execução levaria um tempo constante, já que o elemento mínimo deve estar no índice 0. Como gostamos de usar funções de em notação assintótica, você poderia dizer que esse algoritmo é executado num tempo . Por quê? Porque , e o tempo de execução do algoritmo está contido em um fator constante de 1. Na prática, não escrevemos , em vez disso, escrevemos .
Agora suponha que um algoritmo levou um tempo de para ser executado. Você também pode dizer que ele levou um tempo de . Sempre que a base do logaritmo for constante, não importa em que base usamos a notação assintótica. Por que não? Porque existe uma fórmula matemática que diz:
para todos os números positivos , e . Portanto, se e são constantes, então e n diferem apenas por um fator de , e isso é um fator constante que podemos ignorar em notação assintótica.
Portanto, podemos dizer que o pior cenário do tempo de execução de uma busca binária é para qualquer constante positiva . Por quê? O número de chutes é, no máximo, , gerar e testar cada chute leva um tempo constante, e configurar e retornar o valor também leva um tempo constante. No entanto, por uma questão de prática, frequentemente escrevemos que a busca binária leva porque cientistas da computação gostam de pensar em potências de 2.
Há uma ordem para as funções que vemos frequentemente quando analisamos algoritmos usando notação assintótica. Se e são constantes e , então o tempo de execução cresce mais lentamente do que um tempo de execução . Por exemplo, o tempo de execução , que é , cresce mais lentamente do que um tempo de execução . Os expoentes também não têm de ser inteiros. Por exemplo, o tempo de execução de cresce mais lentamente do que um tempo de execução , que é .
O gráfico a seguir compara o crescimento de , e :
Logaritmos crescem mais lentamente do que os polinômios. Ou seja, cresce de forma mais lenta que para qualquer constante positiva . Mas uma vez que o valor de cresce quando cresce, possui um crescimento mais rápido que .
O gráfico a seguir compara o crescimento de , e :
Aqui está uma lista de funções em noção assintótica que encontramos muitas vezes quando analisamos algoritmos, listadas do crescimento mais lento para o crescimento mais rápido.
Observe que uma função exponencial , em que , cresce mais rápido do que qualquer função polinomial , em que é qualquer constante.
A lista acima não é exaustiva, existem muitas funções com tempos de execução que não estão listadas aqui. Você vai encontrar com algumas delas em sua jornada na ciência da computação.
Este conteúdo é uma colaboração entre os professores de ciência da computação da Universidade de Dartmouth, Thomas Cormen e Devin Balkcom, juntamente com a equipe do currículo de computação da Khan Academy. O conteúdo é licenciado CC-BY-NC-SA.
Quer participar da conversa?
- Pelo amor de jeová, traduzam esse conteúdo.(16 votos)
- Acho que vou lendo até ver se entendo. Eu sonharia com um video ou algo que mostrasse um exemplo.(10 votos)
- Comparar as funções com coeficiente 1 no GeoGebra torna tudo muito claro!(4 votos)