Qual è il modo più efficiente / veloce per tenere in ordine una lista?

3

Ho implementato l'algoritmo di ricerca dei percorsi di Dijkstra in JavaScript e gran parte di esso comporta l'archiviazione delle distanze dai nodi e il recupero del più piccolo. Le distanze cambiano spesso e il più piccolo viene recuperato molto.

Attualmente sto utilizzando un elenco collegato ordinato , con articoli messi in ordine quando aggiunto.

C'è un modo più veloce?

Modifiche:

  • Elenco collegato ordinato = prima il valore più basso.
  • Ecco il codice: link

Aggiornamento:

Implementata la proposta di Arnaud di un Mucchio di Fibonacci. È stato da 32 a 85 volte più veloce con rendimenti decrescenti più grande è il set di dati.

Ho deviato dal vero heap di Fibonacci non eseguendo il consolidamento ogni volta che veniva rimosso un valore. Ho trovato in esecuzione una volta ogni 50 turni eseguiti meglio.

Il codice sorgente è qui: link

    
posta James Jackson 17.02.2015 - 15:54
fonte

1 risposta

6

Se è veramente una lista collegata ordinata , questa dovrebbe essere una scelta abbastanza sbagliata perché devi percorrere l'elenco uno alla volta finché non trovi il posto giusto per inserirlo. In altre parole O (N). Questo è ok se la lista è piccola ma può sfuggire di mano per i grandi grafici.

Di solito, ciò di cui hai bisogno per quel tipo di cose è un mucchio:

link

... dove puoi inserire e inserire O (log (n)) ... di solito è disponibile già nella maggior parte dei linguaggi di programmazione.

    
risposta data 17.02.2015 - 16:30
fonte

Leggi altre domande sui tag