Algoritmi: in che modo lordinamento di fusione ha complessità spaziale O (n) nel caso peggiore?


Migliore risposta

Mergesort, se implementato per creare array nelle chiamate ricorsive, creerà molti di loro, ma non coesisteranno allo stesso tempo. In ogni chiamata ricorsiva crei un array (o 2 a seconda di unimplementazione) per lunione e non occupano più di O (n) spazio, quindi quando lunione è fatto, questi array vengono cancellati e alcuni nuovi verranno creati dopo un momento in qualche altra chiamata ricorsiva. Se hai contato quanto spazio hanno occupato tutti gli array che sono stati creati, “d essere O (n log n), ma non hai bisogno di preoccuparti di queste informazioni – non ti serve più dello spazio O (n), perché quando hai bisogno di creare un array, tutti gli altri non esistono più e non occupano memoria . Nota che puoi semplicemente dichiarare 2 – o 3 – array allinizio, ciascuno della lunghezza di n, e quindi memorizzare la sequenza in uno di essi, mentre usi laltro per lunione, migliorerà le prestazioni e ti mostrerà oltre dubbio non cè bisogno di più di O (n) di memoria.

Risposta

Nellordinamento di tipo merge quando uniamo 2 array ordinati creiamo 2 array temporanei. L [ ] = Arr [left, mid] (array sinistro) per memorizzare temporaneamente il vecchio array da sinistra a metà (metà sinistra ordinata) e R [] = Arr [mid + 1, right] (array destro) per memorizzare temporaneamente il vecchio array da metà + 1 a destra (ordinata metà destra), quindi uniamo i due array temporanei a quello originale. Il fatto che creiamo 2 array temporanei per memorizzare i numeri dellarray originale, poiché larray originale ha n elementi il ​​temporaneo gli array sono rispettivamente di dimensione n e quindi lo spazio extra di ne una complessità spaziale O (n). Lo spazio originale dellarray non viene considerato durante il calcolo della complessità spaziale di un ordinamento algoritmo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *