Ho sempre sentito che la ricerca lineare è un approccio ingenuo e la ricerca binaria è migliore di quella nelle prestazioni a causa della migliore complessità asintotica. Ma non ho mai capito perché è meglio della ricerca lineare quando è richiesto l'ordinamento prima della ricerca binaria?
La ricerca lineare è O(n)
e la ricerca binaria è O(log n)
. Questa sembra essere la base per dire che la ricerca binaria è migliore. Ma la ricerca binaria richiede l'ordinamento che è O(n log n)
per i migliori algoritmi. Quindi la ricerca binaria non dovrebbe essere effettivamente più veloce in quanto richiede l'ordinamento.
Sto leggendo CLRS in cui l'autore implica che nell'ordinamento per inserzione invece di utilizzare l'approccio di ricerca lineare ingenuo è meglio usare la ricerca binaria per trovare il luogo in cui l'elemento deve essere inserito. In questo caso questo sembra essere giustificato poiché ad ogni iterazione di loop esiste un elenco ordinato su cui è possibile applicare la ricerca binaria. Ma nel caso generale in cui non esiste alcuna garanzia in merito al set di dati in cui è necessario effettuare la ricerca, la ricerca binaria non è effettivamente peggiore della ricerca lineare a causa dei requisiti di ordinamento?
Ci sono considerazioni pratiche che sto trascurando che rendono la ricerca binaria migliore della ricerca lineare? Oppure la ricerca binaria è considerata migliore della ricerca lineare senza considerare il tempo di calcolo richiesto per l'ordinamento?