Gewichtete Kanten und Dijkstra-Idee

Intermediate Algorithmen und Datenstrukturen Deutsch
Also available: English
Created by Best · 16.08.2026 at 09:13 UTC

Dijkstra findet kürzeste Wege bei nichtnegativen Kantengewichten. Eine PriorityQueue wählt den nächsten Knoten mit bisher kleinster Distanz. Relaxation aktualisiert Nachbardistanzen.

Negative Kanten brauchen andere Verfahren (Bellman-Ford).

Komplexität hängt von der Queue-Implementierung ab (typisch $O((n+m)\log n)$ mit Binärheap).

Diagram

$$d(v)=\min(d(v), d(u)+w(u,v))$$

Wo gebraucht

Routing (Karten, Netzwerke), Latenz-optimierte Pfade, Spiele-KI auf Kacheln. Prioritätswarteschlange ist der Produktionsbaustein; A* erweitert die Idee um Heuristiken.

Vertiefung

Dijkstras Verfahren hält vorläufige Distanzen vom Start. Es wählt jeweils den noch offenen Knoten mit kleinster Distanz und versucht, Wege zu dessen Nachbarn durch Relaxation zu verbessern.

Die Korrektheit der endgültigen Festlegung beruht darauf, dass eine spätere Fortsetzung einen bereits kleinsten offenen Wert nicht durch eine negative Zusatzstrecke unterbieten kann. Sind solche Kanten möglich, wird eine andere Methode benötigt.

Eine Prioritätswarteschlange kann veraltete Einträge enthalten, wenn kein effizientes Decrease-Key verfügbar ist. Beim Entnehmen werden diese anhand der aktuellen Distanz verworfen. Das bewahrt Korrektheit bei einfacher Implementierung.

Schwierigkeitsstufen

  1. Eine Relaxation numerisch ausführen.
  2. Die Wahl des kleinsten offenen Distanzwerts begründen.
  3. Veraltete Prioritätseinträge korrekt behandeln.

Fallstricke

Ein einmal entnommener Eintrag ist nur dann aktuell, wenn sein gespeicherter Wert zur Distanztafel passt. Das Verfahren ist für negative Gewichte nicht durch blosse Anpassung der Priorität zu retten.

University approvals: 0
Tasks
Question 1

Was geht bei Dijkstra kaputt, wenn eine Kante negatives Gewicht hat?

Question 2

Was geschieht bei erfolgreicher Relaxation einer Kante (u, v)?

Question 3

Gib das kleinste Kantengewicht aus Zeilen der Form u, v, w zurück.

Hint

Ein zweidimensionales Array wird als edges[row][column] gelesen. Integer.MAX_VALUE ist ein verfügbarer Startwert für ein Minimum.

Starter code is prefilled; replace TODO blocks with your solution.
1 test case will be used for grading
Run checks runtime behavior only. Final correctness is evaluated when you submit.
Card Info
  • Topic: Algorithmen und Datenstrukturen
  • Difficulty: Intermediate
  • Completed: 0 users
Creator
Best
Best
BestBuddy