La definizione di O (f (n)) significa che il tempo di esecuzione dell'algoritmo specificato è minore o uguale a c * f (n), per alcuni c > 0 e per alcuni n > n '(cioè grandi valori di n andando verso l'infinito).
Quindi O (1) implica che il tempo di esecuzione è inferiore a qualche costante, per esempio j.
E O (n) implica che il tempo di esecuzione è inferiore a qualche costante, per esempio k, volte n. Quindi k * n.
Dato che stiamo assumendo che le liste siano piccole, ciò significa che n è un numero molto piccolo. Ora, a seconda dell'implementazione, anche i valori di je k possono variare. È del tutto possibile che il tempo costante di O (1) sia molto lungo, diciamo nell'ordine dei secondi. Ed è anche possibile che il fattore costante O (n) possa essere molto breve, diciamo nell'ordine dei microsecondi. In questo caso, con un piccolo valore di n, è chiaro che l'algoritmo O (n) può sovraperformare l'algoritmo O (1) (n microsecondi contro pochi secondi).
L'affermazione originale è sicuramente corretta - non puoi davvero confrontare facilmente Big-O senza considerare costanti, ma principalmente a piccoli valori di n . Una volta arrivati a valori più grandi, le differenze diventano più chiare.