Aiuto con complessità algoritmica nell'implementazione di un merge personalizzato

-1

Ho un'implementazione dell'ordinamento di fusione in C ++ utilizzando una lista personalizzata doppiamente collegata. Mi viene in mente una grande complessità O di n ^ 2, basata su merge_sort() > slice operazione. Tuttavia, da cosa ho letto , questo algoritmo dovrebbe essere n*log(n) , dove il registro ha una base di due.

Qualcuno può aiutarmi a determinare se sto solo determinando la complessità in modo errato o se l'implementazione può / deve essere migliorata per raggiungere la n*log(n) complessità?

Se desideri un po 'di conoscenze sui miei obiettivi per questo progetto, vedi il mio blog . Ho aggiunto commenti nel codice che descrivono ciò che capisco della complessità di ciascun metodo.

Chiarimento - Mi sto concentrando sull'implementazione del C ++ con questa domanda. Ho un'altra implementazione scritta in Python, ma è stata aggiunta in aggiunta ai miei obiettivi originali.

    
posta bitcycle 24.11.2012 - 21:53
fonte

1 risposta

2

Stai determinando la complessità in modo errato. La ricorrenza standard di mergesort è

T(n) = 2 T(n/2) + O(n)

Poiché il tuo slice è effettivamente O(n) , stai bene.

Come ottimizzazione minore, tuttavia, potresti prendere in considerazione l'idea di utilizzare un unico metodo per suddividere l'elenco in due, il che non implica il ripetersi due volte della prima metà dell'elenco.

    
risposta data 24.11.2012 - 22:40
fonte

Leggi altre domande sui tag