Ho recentemente effettuato un confronto iniziale del tempo di esecuzione dell'algoritmo di Dijkstra utilizzando due strutture dati, il PriorityQueue basato su Java (basato su un heap binario, se I ' non mi sbaglio), e un ammasso di Fibonacci. Ho usato Java currentTimeMillis() per fare i miei calcoli. I risultati alla fine sono piuttosto interessanti. Questa è l'uscita per uno dei miei casi di test:Dijkstra su Java: ottenere risultati interessanti utilizzando un heap di Fibonacci rispetto a PriorityQueue
Running Dijkstra's with 8 nodes and 27 links
- Execution time with binary heap: 1 miliseconds
- Execution time with Fibonacci heap: 4 miliseconds
Certo, io sono a corto di insiemi di dati al momento, con il grafico qui sopra è il mio più grande (ho intenzione di fare più presto). Ma ha senso? Ho sempre pensato che gli heap di Fibonacci fossero più veloci di altre strutture dati a causa del loro tempo di esecuzione ammortizzato rispetto alle altre strutture di dati. Non sono davvero sicuro di dove questa differenza di 3 millisecondi provenga. (Lo sto eseguendo su un processore Intel Core Ivy Bridge i7-3630M, se questo aiuta.)
Nota: sono incappato su this thread che potrebbe spiegare il problema, anche se non sono ancora chiaro il motivo per cui l'heap di Fibonacci la versione sta impiegando più tempo. Secondo quel thread, potrebbe essere dovuto al fatto che il mio grafico non è abbastanza denso e quindi il numero di operazioni con il tasto di diminuzione non è abbastanza grande da far brillare davvero le prestazioni dell'heap di Fibonacci. Questa sarebbe l'unica conclusione plausibile, o c'è qualcos'altro che mi manca?
Per ottenere un benchmark significativo, è necessario un set di dati di diversi ordini di grandezza maggiore di 8 nodi e 27 collegamenti. – EJP
Sì, lo capisco adesso. Dovrò esaminarlo e vedere cosa posso fare. Grazie. –