PriorityQueue selbst implementieren

Hallo zusammen,

ich möchte Dijkstra implementieren.
Da mein Graph wegen Komplexität als AdjazenzArray implementiert ist möchte ich nicht die Knoten die als int vorliegen in Integer wandeln um die Standard PriorityQueue zu verwenden.
(int[] statt ArrayList brachte bei Bellmann Ford 30% verbesserung)

Darum wollte ich fragen ob jemand eine Implementierung kenne (z.B. binaryHeap,FibonacciHeap...)
die den Umweg über Objekte weglassen und alles über pointer arrays machen.

Danke!
 
M

Marcinek

Gast
Integer ist ein wrapper für int und afaik genauso Speicherintensiv wie int.

Woher kommen die 30 % verbesserung? - Welche Belege gibt es dafür?
 
Zuletzt bearbeitet von einem Moderator:
Ich meine in erster Linie die Zeit

wenn ich nur mit primitiven Datentypen arbeite verlier ich sehr viel Performanz wenn ich die mit Integer wrappen muss.

Ich habe jetzt selbst einen BinaryHeap auf int mit pointerMagic :) optimiert.

Dijkstra braucht auf meinem Testgraphen mit der Standard Java PriorityQueue Implementierung
3805 ms und mit meiner eigenen 220 ms bei einem pos. Graph mit 490 000 Knoten und 1 470 000 Kanten.
 

ice-breaker

Top Contributor
Da ein int nur 4 byte kostet und ein Objekt eine Ecke mehr (ich erinnere mich irgendwas an eine Größenordnung von 8 Byte) ist das schon ein Unterschied.
Zudem natürlich noch unnötige Rechenzeit für jedes (un)wrappen hinzukommt.
 
Zuletzt bearbeitet:
M

Marcinek

Gast
Ich habe vin Objektoverheads gelesen, aber noch keine Zahl dafür gefunden.

Da intern das int schon vorhanden ist, sollte es mit intValue() keine Probleme mit umwrappen geben.

Ohne für den Test verwendeten Code kann man jetzt nicht viel mehr sagen.
 
Ich habe BellmannFord vergleichweise als FIFO queue implementiert und getestest

Im Vergleich zu einer arraybasierten(int[] mit 2 pointern für anfang/ende) FIFO
hat FIFO als LinkedList<Integer> (getFirst(),removeFirst(),addLast()) 50% länger gedauert
hat FIFO als ArrayList<Integer> (get(0),remove(0),add()) um den Faktor 50!! länger gedauert.

Der Code ist etwas umfangreicher da ich über Wochenende(ca. 35Std / 1000 LOC) einen ganzen Framework für ShortestPathProblem programmiert habe.

Wenn jemand Lust hätte wäre ich sehr über unabhängige Ergebnisse freuen.
Als Graph habe ich den Grid-SSquare aus http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.54.8746&rep=rep1&type=pdf mit ca. 4 Mio Knoten und 12 Mio Kanten genommen.
 
M

maki

Gast
Im Vergleich zu einer arraybasierten(int[] mit 2 pointern für anfang/ende) FIFO
hat FIFO als LinkedList<Integer> (getFirst(),removeFirst(),addLast()) 50% länger gedauert
hat FIFO als ArrayList<Integer> (get(0),remove(0),add()) um den Faktor 50!! länger gedauert.
Klingt plausibel, musst bedenken dass das Collections Framework eben sehr allgemein gehalten ist und ich behaupte mal bei über 90% der Anwendungen die 50% Ersparniss deiner FIFO Implementierung zur Standard LinkedList nicht relevant sind.
Dass die ArrayList nicht wirklich als FIFO geeignet ist sollte auch einleuchten, ein remove(0) kopiert mal das ganze Array bis auf das erste Element.
Habe selber auch schon eigene Datenstrukturen in Java for obskure Anforderungen geschrieben, man muss halt wirklich durch Messungen beweisen dass der Aufwand gerechtfertigt ist.

Vielleicht hilft dir ja das bei deiner Suche: What is the most efficient Java Collections library? - Stack Overflow
 

kay73

Bekanntes Mitglied
Hi Mathematiker, habe mir das Paper gezogen und das splib.tar besorgt. grid_ssquare killt meinen Rechner. Was kommt da nachher raus, wenn das durchgelaufen ist?
 
Wie meinst du, was rauskommt? Es kommt halt ein Graph raus auf dem man die verschiedenen kürzeste Wege Algorithmen testen kann. Ich habe alles in java implementiert

Hier sind paar beispiele.
<Name>: <Zeit in ms>
<durchschnittlicherExpansionsgrad (scans)> <minExpansion> <maxExpansion> bzgl. einem Knoten

PapeStrategy: 193 distance: 1629725.0
1.2616872341642984 7 1
PallottinoStrategy: 156 distance: 1629725.0
1.2616948635297258 7 1
FifoLinkedListStrategy: 3530 distance: 1629725.0
45.00893780159835 114 1
FifoArrayStrategy: 2754 distance: 1629725.0
45.00893780159835 114 1
FifoArrayPCStrategy: 2408 distance: 1629725.0
38.457559747468004 113 1
DijkstraPriorityQueueStrategy: 1288 distance: 1629725.0
1.0 1 1
DijkstraBinaryHeapStrategy: 181 distance: 1629725.0
1.0 1 1
 

kay73

Bekanntes Mitglied
Wie meinst du, was rauskommt?
Sorry, ich habe das mißverständlich ausgedrückt. Ich meinte Infos wie Dateigröße, Format und wie lange diese Shellscripte laufen. Bei mir ist das RAM dermaßen explodiert, dass ich den Rechner hart ausschalten musste. Ist es möglich und vertretbar, die files zu TAR-BZ2en und irgendwo hochzuladen?

Grüße,

Kay
 
Ich hab den Graphen und Algorithmen in Java neu implementiert.
Alles so effizient wie möglich mit arrays gemacht.

Alle ist gerade work in progress ... ich werds aber mal schicken wenn es eine stabile Version gibt
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Wertepaar in LinkedList/PriorityQueue speichern Allgemeine Java-Themen 3
K PriorityQueue mit Gewicht Allgemeine Java-Themen 3
_dp Datentypen PriorityQueue sortiert falsch? Allgemeine Java-Themen 6
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
P JavaFX Anwendung beendet sich selbst nur als Jar Allgemeine Java-Themen 40
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
G Beendet sich der Thread selbst?! Allgemeine Java-Themen 3
W IDEA IntelliJ Build-Management-Tool selbst programmieren Allgemeine Java-Themen 2
Tausendsassa Threads Einen Thread sich selbst schließen lassen Allgemeine Java-Themen 17
S Mit Generics Klasse erstellen die selbst T erweitert..? Allgemeine Java-Themen 4
S Shape selbst rendern..? Allgemeine Java-Themen 5
N Automatisches einfügen einer selbst generierten ID in Klasse mit Annotation Allgemeine Java-Themen 8
M Programm startet sich selbst neu, alte Logfiles bleiben gesperrt Allgemeine Java-Themen 2
Z Klassen ArrayList selbst machen Allgemeine Java-Themen 5
R JRE Ablaufdatum seit 7u10 - Probleme bei selbst ausgelieferter JRE bekannt? Allgemeine Java-Themen 3
J kann eine .jar sich selbst verschieben? Allgemeine Java-Themen 6
C Eclipse Probleme bei selbst erstelltem Algorithmus Allgemeine Java-Themen 2
Q Zeit in GUI selbst aktualisieren Allgemeine Java-Themen 5
K Serialisierung komplett selbst machen Allgemeine Java-Themen 13
W Annotations selbst erstellen und auswerten Allgemeine Java-Themen 4
M Selbst geschriebener InputStreamReader über einen beliebigen InputStream Allgemeine Java-Themen 4
J Können Programme sich selbst erweitern? Allgemeine Java-Themen 6
J Objekt selbst ertellen möglich? Allgemeine Java-Themen 6
J Crawler selbst geschreiben: OutOfMemoryError Allgemeine Java-Themen 14
N JFrame Icon selbst erzeugen Allgemeine Java-Themen 2
PAX Applikation sich selbst neu starten lassen Allgemeine Java-Themen 27
P Eigene Klasse kopieren die auf sich selbst refferenziert Allgemeine Java-Themen 8
R synchronized "gegen sich selbst" Allgemeine Java-Themen 5
J BufferedWriter schreibt von selbst ein "" Allgemeine Java-Themen 12
H JButtons selbst gestallten Allgemeine Java-Themen 6
V Sich selbst kopieren (Jar- Datei) Allgemeine Java-Themen 3
ARadauer programm soll sich selbst ändern können Allgemeine Java-Themen 20
F Klasse soll sich selbst returnieren mit entsprechendem Typ. Allgemeine Java-Themen 15
V Avatar selbst programmieren Allgemeine Java-Themen 4
E externe Anwendung aufrufen und sich selbst beenden Allgemeine Java-Themen 8
F Kann Applet installierte JVM selbst auswählen? Allgemeine Java-Themen 4
R DropTarget auch für Applet selbst Allgemeine Java-Themen 2
M vererbung einer "selbst-instanzierungs-klasse" Allgemeine Java-Themen 16
J ID selbst vergeben Allgemeine Java-Themen 2
E Einer Methode sich selbst übergeben . ? Allgemeine Java-Themen 5
J Fenster mit paint Methode selbst zeichnen Allgemeine Java-Themen 3
C Vectoren befuellen sich von selbst Allgemeine Java-Themen 2
P Programm selbst starten lassen Allgemeine Java-Themen 2
B Installshield selbst gemacht Allgemeine Java-Themen 3
E Objekt serialisiert sich selbst Allgemeine Java-Themen 2
L Buchungssystem implementieren Allgemeine Java-Themen 2
M Kann man Annotationen auf Klassen einschränken die ein Interface implementieren? Allgemeine Java-Themen 1
MiMa Was sollte man ins JavaDoc implementieren?? Allgemeine Java-Themen 17
L Generator für einen Parser implementieren Allgemeine Java-Themen 13
L Template Engine entwerfen und implementieren Allgemeine Java-Themen 4
D OOP Gemeinsamen ID-Raum für zwei Klassen implementieren Allgemeine Java-Themen 7
P BruteForce Ansatz implementieren Allgemeine Java-Themen 32
A Breitensuche mit Hop-Distanzen in Java - Wie implementieren? Allgemeine Java-Themen 4
M Maven Deutsche Post API implementieren Allgemeine Java-Themen 2
S Eclipse Probleme beim Implementieren / Ausführen von jUnit 5-Test Suites Allgemeine Java-Themen 14
N Best Practice Allgemeines Verhalten für ein Interface implementieren? Allgemeine Java-Themen 7
K Geschätze Zeit implementieren Allgemeine Java-Themen 14
B Live Search implementieren Allgemeine Java-Themen 4
S Threads Kann mir jemand helfen eine parallele Hilfsklasse zu implementieren..? Allgemeine Java-Themen 3
T Generisch implementieren Allgemeine Java-Themen 31
J Wie implementieren, Frge an die Erfahrenen... Allgemeine Java-Themen 7
M Interface einer Library implementieren Allgemeine Java-Themen 3
F Schlüsselworte RSA Verschlüsselung implementieren Allgemeine Java-Themen 5
H Copy Paste implementieren ausserhalb des Programms? Allgemeine Java-Themen 2
D Aufgabe: Schnittstelle und Proxy implementieren Allgemeine Java-Themen 2
B Best Practice HTML Output Optimal implementieren Allgemeine Java-Themen 3
I Mehrfaches Implementieren eines generischen Interface Allgemeine Java-Themen 9
DStrohma In abstrakter Klasse Konstruktor von Instanz implementieren Allgemeine Java-Themen 11
X Modalität von JDialog nachträglich in JFrame implementieren? Allgemeine Java-Themen 8
O Plugin perfomrant implementieren Allgemeine Java-Themen 12
P InterfaceMethoden nicht implementieren Allgemeine Java-Themen 5
C Hilfe bei Adressbuch-Programmierung, wie am Besten mit JList implementieren Allgemeine Java-Themen 2
A RandomAccessFile - "insert" implementieren? Allgemeine Java-Themen 4
nrg Wie würdet ihr eine "Dauerschnittstelle" implementieren? Allgemeine Java-Themen 5
T Von JComponent erben und Set implementieren Allgemeine Java-Themen 2
D Wozu runnable implementieren? Allgemeine Java-Themen 3
E Wie Assoziationen implementieren in Java Allgemeine Java-Themen 22
B mathematische Formeln, umformungen nicht einzeln implementieren Allgemeine Java-Themen 6
J Undo auf eine ArrayList implementieren Allgemeine Java-Themen 3
deetee ListIterator implementieren Allgemeine Java-Themen 3
A feststellen, welche Klassen ein Interface implementieren Allgemeine Java-Themen 3
B Generisches Singleton implementieren Allgemeine Java-Themen 12
T Interface "on-the-fly" implementieren? Allgemeine Java-Themen 3
G Interface - Klassen implementieren das - Reflection ok? Allgemeine Java-Themen 4
G Interface mehrfach implementieren Allgemeine Java-Themen 5
@ zur Laufzeit Interface aus jar implementieren? Allgemeine Java-Themen 5
MQue Vector implementieren Allgemeine Java-Themen 2
MQue Interface implementieren Allgemeine Java-Themen 7
P Liste von Klassen die ein Interface implementieren speichern Allgemeine Java-Themen 12
MQue Methode aus run() aufrufen bzw. implementieren Allgemeine Java-Themen 5
G Collections als Array implementieren Allgemeine Java-Themen 2
P Page Rank Algorithmus implementieren Allgemeine Java-Themen 7
R Interface mittels Reflection implementieren Allgemeine Java-Themen 8
N 2 Interfaces mit Methoden selber Signatur implementieren Allgemeine Java-Themen 5
C Implementieren einer Schnittstelle (Interface), Ausnahmen Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben