The shortest Path Problem

Das Problem

Man möchte z.B. den kürzeste Pfad von Person A zu B finden. Dabei will man natürlich die Knoten wissen über die Person A gehen muss um Person B zu ereichen. Infos zu dieser Problematik: WikiPedia – Shortest path problem

Performance & Datenbasis

Welcher Algo ist der schnellste? A* soll auch mit einer miesen Heuristik schneller sein als Dijkstra. Der Dijkstra-Algo dürfte eigendlich so schnell sein wie ein A* Algo ohne Heuristik, weil der Dijkstra- eigendlich ein A*- ohne Heuristik ist.

Dijkstra O(n²) mit Fibonacci-Heaps
Dijkstra O(n * log(n) + m) laut wiki ???
Dijkstra O( (n+m) * log(n) ) mit binären oder binomialen Heap

n= Anzahl Knoten, m= Anzahl Kanten im Graph

Datenstrukturen

– Unsorted arrays or linked lists
– Sorted arrays
– Sorted linked lists
– Sorted skip lists
– Indexed arrays
– Hash tables
– Binary heaps
– Splay trees
– Splay trees
– HOT queues – Heap On Top queues
– Comparison
– Hybrid representations

Datenmenge

Beim Floyd-Warshall- sind Arrays eine gute wahl. Er braucht allerdings sehr viel Speicherplatz für die Grunddatenmenge. Bei einer Feldgröße von 20×20 und einer quadratischen Matrix von Floats benötigt man über 600MB RAM

Weblinks zu Datenmengen

Lösungen mit Codefragmenten

Die verschiedenen Algorithmen

Einige Algorithmen bieten die Lösung. Das sind z.B. die folgenden:

A*-Algorithmus

Dijkstra-Algorithmus

Der Dijkstra-Algorithmus ist ein A*-Algorithmus ohne Heuristik

Lösungen

Datenbank Lösungen

Floyd-Warshall Agorithmus

PHP Lösungen

PDFs und Artikel zum Thema

Folgende Artikel könnten auch interessieren