Ogni risposta che attualmente risponde a questa domanda ti dice che il file O(1)
tempo è costante (qualunque cosa accada alla misurazione; potrebbe essere il tempo di esecuzione, il numero di operazioni, ecc.). Questo non è accurato.
Dire che il tempo di esecuzione è O(1)
significa che esiste una costante c
tale per cui il tempo di esecuzione è delimitato sopra da c
, indipendentemente dall'input. Ad esempio, restituire il primo elemento di un array di n
numeri interi è O(1)
:
int firstElement(int *a, int n) {
return a[0];
}
Ma anche questa funzione è O(1)
:
int identity(int i) {
if(i == 0) {
sleep(60 * 60 * 24 * 365);
}
return i;
}
Il tempo di esecuzione qui è limitato sopra di 1 anno, ma il più delle volte il tempo di esecuzione è dell'ordine dei nanosecondi.
Dire che il tempo di esecuzione è O(n)
significa che esiste una costante c
tale che il tempo di esecuzione è limitato sopra da c * n
, dove n
misura la dimensione dell'input. Ad esempio, trovare il numero di occorrenze di un particolare numero intero in una matrice non ordinata di n
numeri interi mediante il seguente 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;
}
Questo perché dobbiamo iterare attraverso l'array ispezionando ogni elemento uno alla volta.