Todas as respostas atualmente respondendo a essa pergunta informam que o O(1)
tempo médio significa (o que quer que aconteça com a medição; pode ser tempo de execução, número de operações etc.). Isto não é exato.
Dizer que tempo de execução é O(1)
significa que existe uma constante c
tal que o tempo de execução é limitado acima por c
, independentemente da entrada. Por exemplo, retornar o primeiro elemento de uma matriz de n
números inteiros é O(1)
:
int firstElement(int *a, int n) {
return a[0];
}
Mas esta função O(1)
também é :
int identity(int i) {
if(i == 0) {
sleep(60 * 60 * 24 * 365);
}
return i;
}
O tempo de execução aqui é limitado acima de 1 ano, mas na maioria das vezes o tempo de execução é da ordem de nanossegundos.
Dizer que o tempo de execução é O(n)
significa que existe uma constante c
tal que o tempo de execução é limitado acima por c * n
, onde n
mede o tamanho da entrada. Por exemplo, encontrar o número de ocorrências de um número inteiro específico em uma matriz não classificada de n
números inteiros pelo seguinte algoritmo é O(n)
:
int count(int *a, int n, int item) {
int c = 0;
for(int i = 0; i < n; i++) {
if(a[i] == item) c++;
}
return c;
}
Isso ocorre porque temos que percorrer a matriz inspecionando cada elemento, um de cada vez.