Hallo,
ich bin gerade dabei einen Dijkstra-Algorithmus zu implentieren. Funktioniert auch schon alles wunderbar, jetzt will ich aber den Code noch etwas optimieren und verschönern.
Momentan habe ich in einer Klasse eine HashMap<String, Node>, die alle Knoten enthält.
Da der Dijkstra ja eine Prioritätswarteschlange benutzt, würde ich auch gerne eine solche implementieren. Wie kann ich also meine Datenstruktur am besten sortieren (die Kosten d sind in der Klasse Node gespeichert und über getD() erreichbar. Nach denen würde ich gerne sortieren)?
Momentan rufe ich halt eine Funktion extractMin auf, die alle Kanten nach dem kürzesten Pfad durchsucht und diesen Knoten dann zurück gibt. Das ist natürlich nicht sehr schön und effizient. Ich hätte am liebsten eine sortierte Liste/Map bei der ich dann einfach pop() machen kann und bekomme das niedrigste Element.
Muss ich über das keySet sortieren, oder sollte ich generell eine andere Datenstrukur als die HashMap benutzen?
ciao, Mike.
ich bin gerade dabei einen Dijkstra-Algorithmus zu implentieren. Funktioniert auch schon alles wunderbar, jetzt will ich aber den Code noch etwas optimieren und verschönern.
Momentan habe ich in einer Klasse eine HashMap<String, Node>, die alle Knoten enthält.
Da der Dijkstra ja eine Prioritätswarteschlange benutzt, würde ich auch gerne eine solche implementieren. Wie kann ich also meine Datenstruktur am besten sortieren (die Kosten d sind in der Klasse Node gespeichert und über getD() erreichbar. Nach denen würde ich gerne sortieren)?
Momentan rufe ich halt eine Funktion extractMin auf, die alle Kanten nach dem kürzesten Pfad durchsucht und diesen Knoten dann zurück gibt. Das ist natürlich nicht sehr schön und effizient. Ich hätte am liebsten eine sortierte Liste/Map bei der ich dann einfach pop() machen kann und bekomme das niedrigste Element.
Muss ich über das keySet sortieren, oder sollte ich generell eine andere Datenstrukur als die HashMap benutzen?
ciao, Mike.