Il tempo O(n)
è vero anche se sono presenti elementi duplicati. Dovresti familiarizzare con big-oh notation.
Nel peggiore dei casi, considerare questo array: 1, 1, 1, 1, ..., 1, 1, 2
. La ricerca di 2
richiederà esattamente il confronto n
se si parte dal primo elemento, quindi non è possibile avere duplicati. Se doveste cercare 1
, lo troveremmo in un unico confronto, ma ci sono input di elementi distinti per i quali potete anche trovare un elemento in un singolo confronto se siete fortunati, quindi avere i duplicati in realtà non lo fa significa molto, tranne che è più probabile che tu abbia fortuna e trovi il tuo obiettivo in meno passaggi. Rimarrà comunque O(n)
.
Ci sono quasi sempre casi migliori e casi peggiori. Le prestazioni pratiche della maggior parte degli algoritmi dipendono sempre dall'input dato, big-oh notation ti dà solo una vaga idea di come l'algoritmo si esibirà. Questo non vuol dire che la notazione asintotica sia inutile, solo che non è sempre del tutto accurata perché ci sono costanti sottostanti coinvolte che fanno la differenza nella pratica.
In caso di dubbi sulle prestazioni, eseguire i propri punti di riferimento.
Il numero di confronti dipende da ciò che stai cercando. È un elemento particolare? Il primo elemento che è un duplicato? La versione completa dell'array? – Pops
Benvenuti in SO! Consentitemi di darvi il primo upvote per usare l'etichetta dei compiti a casa e scrivere una domanda chiara e comprensibile (otteniamo una sfortunata quantità di _plzsendtehcodez_). – Pops