Sono confuso sulla analisi delle prestazioni del binarySearch
dal CollectionsChiarimento della dichiarazione sui risultati della ricerca binaria di raccolta da javadoc
Dice:
Se l'elenco specificato non implementa l'interfaccia RandomAccess ed è grande, questo metodo farà una ricerca binaria basata su iteratore che esegue O (n) link traversali e O (log n) confronti di elementi.
Non so come interpretare questo O(n)
+ O(log n)
.
voglio dire non è peggio che semplicemente attraversando la-lista collegata e confrontare? Abbiamo ancora solo O(n)
.
Che cosa significa questa affermazione sulle prestazioni? Come detto, non riesco a capire la differenza da una semplice ricerca lineare nell'elenco collegato.
Che cosa sono la mia incomprensione qui?
La chiave qui è che il totale di run-time non è realmente 'O (n) + O (log n)' in quanto i due Big-O s sono denota diverse operazioni.E 'davvero 'O (n) * (tempo di attraversare un link) + O (log n) * (tempo di confrontare due elementi)'. Quindi è importante fare questa distinzione. – tskuzzy
@tskuzzy: giusto, ma tecnicamente il tempo è 'O (n)' per sufficientemente grande 'n', non importa quanto grande sia il tempo per confrontare due elementi' è paragonato a' tempo di attraversare un link'. Il vantaggio rispetto alla ricerca lineare è visibile per confronti lenti. –
@TomaszNurkiewicz: Non importa che per attraversare aggiorniamo solo un puntatore? 'operazione costante'? – Cratylus