Ülesanne täielikult lahendatud
-
Sõlm 1 allikast ühe serva kaugusel hinnaga 4 5 sammu
Tipp 1 on lähtetipust ühe serva kaugusel kaaluga 4 — ja algoritm teatab selle kauguseks 3. Käi läbi tippude fikseerimise järjekord ja leia, kust see 3 pärineb.
-
Dijkstra algoritm fikseerib tippe kauguse järjekorras ega külasta neid kunagi uuesti. See järjekord ongi kogu algoritm ja kogu tõestus: kui tipp on fikseeritud, ei saa selleni eksisteerida odavamat teekonda, sest iga selline teekond peaks läbima mõnda fikseerimata tippu, mis on juba kaugemal.
-
Lähtetipust annavad kaks otsest serva ajutisteks kaugusteks 4 ja 2. Kumbki pole veel lõplik — need on ülempiirid.
-
Kõige lähemal on tipp 3 kaugusega 2, seega fikseeritakse see esimesena. Selle servade lõdvendamine leiab teekonna tipuni 1 maksumusega 2 + 1 = 3, mis on parem kui otsene serv kaaluga 4. See on samm, mis vastab küsimusele: odavaim tee naabertipuni ei pruugi olla vahetult selleni viiv serv.
-
Tipp 1 fikseeritakse kaugusega 3 ning sealt servade lõdvendamine jõuab tipuni 2 kaugusega 8.
-
Tipp 4 on kättesaadav kaugusega 8 läbi tipu 3 ning alternatiiv läbi tipu 2 maksab 8 + 3 = 11, seega jääb kehtima lühem teekond.
Vastus
Tööriist kuvab kaugusteks 3, 8, 2, 8 ja lühimaks teekonnaks 0 → 3 → 4. Õppetund peitub tipus 1: otsene serv ei ole lühim tee ja just ahne fikseerimine teeb selle teadasaamise odavaks, mitte eksponentsiaalseks. Tagatisel on siiski üks tingimus — mittenegatiivsed kaalud. Negatiivse serva korral saab varem fikseeritud tippu hiljem parandada ning sammu 1 tõestus kukub kokku. Klõpsa negatiivse serva eelseadistusel ja vaata, kuidas see ebaõnnestub korraga mõlemas suunas: tipp 3 tagastatakse kaugusega −1, mis pole kaugus, mida ükski teekond annaks, ja teekonna taastamine loobub täielikult teatega „tee puudub — eelkäijad moodustavad tsükli“. Valed arvud ja teekonna puudumine algoritmilt, mis on tõestatavalt korrektne kohe, kui iga kaal on mittenegatiivne.
-
Allikad (2)
- The three-page paper, in which the shortest-path algorithm is the SECOND of the two problems: E. W. Dijkstra, "A note on two problems in connexion with graphs." Numerische Mathematik 1, 269–271, 1959.
- The algorithm the negative-edge preset points you to, which tolerates negative weights and detects a negative cycle instead of answering as though there were none: R. Bellman, "On a routing problem." Quarterly of Applied Mathematics 16(1), 87–90, 1958.