Ho esaminato le precedenti interviste tecniche che ho avuto (ne ho ricevuto un altro in arrivo).
Il problema
Ad ogni modo, una domanda che ho avuto è stata ...
Given 2 unsorted arrays how would you find all of the common objects between them?
Dire che ho array A e B. Il peggiore dei casi A e B sono entrambi di dimensione n.
Pensiero iniziale
Inizialmente il mio pensiero era quello di iterare A e fare una ricerca lineare attraverso B.
La complessità per questo è O(n) * O(n) = O(n^2)
.
Ordinamento prima
Tuttavia, mi stavo chiedendo se sarebbe stato meglio prima ordinare B.
L'uso di un ordinamento rapido (o di un tipo di unione) su B è O(n log(n))
. Questo è fatto una volta.
Ora puoi ripetere A O(n)
e fare una ricerca binaria su B O(log(n))
per ogni A.
Quindi la complessità è (sort) O(n log(n)) + (iterate A) O(n) * (search B) O(log(n))
che semplifica fino a O(n log(n))
.
La mia domanda è. Ho ragione con questo? Sono molto nuovo all'analisi della complessità, quindi volevo controllare che non stia facendo niente di stupido.
Soluzione migliore
La soluzione migliore è quindi ordinare un array prima di iterare l'altro? Puoi ordinare entrambi gli array e poi iterare ma non stai migliorando O (n log (n).
C'è un altro modo migliore per avvicinarti a questo?