Ich habe kürzlich einen ersten Vergleich der Laufzeit des Dijkstra-Algorithmus mit zwei Datenstrukturen gemacht, der Java-basierten PriorityQueue (basierend auf einem binären Heap, wenn I ' Ich irre mich nicht) und ein Fibonacci-Haufen. Ich habe Javas currentTimeMillis() verwendet, um meine Berechnungen durchzuführen. Die Ergebnisse, mit denen ich endete, sind ziemlich interessant. Dies ist die Ausgabe für einen meines Testfall:Dijkstra on Java: Interessante Ergebnisse mit einem Fibonacci Heap vs. PriorityQueue
Running Dijkstra's with 8 nodes and 27 links
- Execution time with binary heap: 1 miliseconds
- Execution time with Fibonacci heap: 4 miliseconds
Zugegeben, ich bin kurz auf Datensätze im Moment mit der obigen Grafik meines größten ist (ich plane, bald mehr zu machen). Aber macht das irgendeinen Sinn? Ich habe immer gedacht, Fibonacci Heaps waren schneller als andere Datenstrukturen aufgrund ihrer amortisierten Laufzeit im Vergleich zu den anderen Datenstrukturen. Ich bin mir nicht sicher, woher dieser Unterschied von 3 Millisekunden kommt. (Ich führe es auf einem Intel Core Ivy Bridge i7-3630M Prozessor, wenn das hilft.)
Hinweis: Ich stolperte über this thread, die das Problem erklären könnte, obwohl ich immer noch unklar bin, warum der Fibonacci-Heap Version dauert länger. Diesem Thread zufolge könnte es daran liegen, dass mein Graph nicht dicht genug ist und daher die Anzahl der Verkleinerungs-Key-Operationen nicht groß genug ist, um die Leistung des Fibonacci-Heaps wirklich zu glänzen. Wäre das die einzig plausible Schlussfolgerung, oder fehlt mir noch etwas?
Sie benötigen einen Datensatz mehrere Größenordnungen größer als 8 Knoten und 27 Links, um einen aussagekräftigen Benchmark zu erhalten. – EJP
Yup, ich verstehe das jetzt. Ich muss mich darum kümmern und sehen, was ich tun kann. Vielen Dank. –