Ho sempre sentito che la ricerca lineare è un approccio ingenuo e la ricerca binaria è migliore di quella in termini di prestazioni a causa della migliore complessità asintotica. Ma non ho mai capito perché è meglio della ricerca lineare quando è necessario 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 più veloce poiché richiede l'ordinamento.
Sto leggendo CLRS in cui l'autore sottintende che nell'inserire l'ordinamento invece di usare l'approccio di ricerca lineare naive è meglio usare la ricerca binaria per trovare il punto in cui l'elemento deve essere inserito. In questo caso questo sembra essere giustificato in quanto ad ogni iterazione del ciclo esiste una lista ordinata sulla quale può essere applicata la ricerca binaria. Ma nel caso generale in cui non vi è alcuna garanzia sul set di dati in cui dobbiamo cercare, la ricerca binaria non è in realtà peggiore della ricerca lineare a causa dei requisiti di classificazione?
Ci sono delle considerazioni pratiche che trascuro che rendono la ricerca binaria migliore della ricerca lineare? O la ricerca binaria è considerata migliore della ricerca lineare senza considerare il tempo di calcolo richiesto per l'ordinamento?