Utilizza il metodo sort () dell'array di ruby o aggiungi elementi nella posizione corretta con una ricerca binaria?

2

Se sto caricando un intero carico di elementi (parole non ordinate da un file o qualcosa del genere) sarebbe più efficiente caricarli tutti in un array di Ruby, e quindi usare il metodo built in sort! o fare una ricerca binaria per il posto di ogni elemento nell'elenco mentre lo carico e lo aggiungo in quella posizione.

Codice base:

array = []
lines.each do |line|
    array.push line
end
array.sort!

vs

array = []
lines.each do |line|
    array.insert(find_index(line), line)
end

find_index() cercherebbe l'indice corretto per l'elemento nell'array usando una ricerca binaria.

    
posta Will Richardson 20.09.2013 - 06:24
fonte

1 risposta

5

array.insert è O(n) per gli inserimenti nel mezzo (perché deve copiare una parte dell'array), rendendo la seconda variante O(n^2) , mentre push è O(1) e sort! è O(n log n) , quindi la prima variante è solo O(n log n) . Anche la prima variante sembra più pulita.

    
risposta data 20.09.2013 - 06:48
fonte

Leggi altre domande sui tag