2016-03-23 10 views
1

Betrachten Sie eine Liste von Stationen, sagen wir 10 Stationen, 'A' bis 'J', verbunden durch Züge zwischen ihnen.Kürzeste Reisezeit von der Quelle zum Ziel

In Bezug auf die grafische Darstellung, betrachten die Stationen (Vertices) und Züge zwischen ihnen (Kanten) Ausführen eines verbundenen Graphen zu bilden, aber nicht vollständig, dh jede Station von jeder Station erreichbar ist entweder direkt oder über anderer Stationen durch Hopfen. Am wichtigsten ist, dass diese Hops zwischen Ankunft und nächster Abfahrt warten. Verständlicherweise ist die Reisezeit zwischen zwei verbundenen Stationen unabhängig voneinander. Die Wartezeit bis zur nächsten Abfahrt hängt jedoch von Ihrer Ankunftsadresse ab.

HINWEIS: Ich erwähne Grafik nur zum besseren Verständnis. Man könnte darüber hinaus denken.

Problem: alle zwei Stationen gegeben und die Zeit von der Anfangsstation starten, wie kürzeste Zeit zum Ziel zu finden, in den Fällen des Hopfens, die Wartezeit zwischen Ankunft und Abreise zu zählen? Und welcher DS wird für dasselbe verwendet? Nehmen wir an, dass, wenn zwei Bahnhöfe durch einen Zug verbunden sind, nur ein Zug zwischen ihnen verkehrt.

+0

Nur um weiter zu veranschaulichen, nehme man einen Zug zwischen 'C' und 'D' an. Angenommen, Sie können entweder von "A" oder "B" zu "C" gelangen. Die Wartezeit an der Station 'C' für den Zug nach 'D' hängt also davon ab, ob Sie von 'A' oder 'B' an 'C' angekommen sind. Die Fahrzeit von "C" nach "D" ist jedoch gleich, unabhängig davon, wie und wann Sie bei "C" angekommen sind. –

+0

https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm => vorausgesetzt, die Zeit, um eine Station zu einer anderen zu gehen, ist nicht gleich. – Mukit09

+1

@MukitChowdhury - Dijkstra ist nicht genug hier, wegen dieser "Hopfen". – libik

Antwort

0

IMHO Dijkstra sollte schließlich genug sein.

Wenn Sie Dijkstra von Knoten "A" ausführen, findet es den kürzesten Pfad zu allen anderen Knoten.

Auch wenn wir "Hops" haben, ist der schlimmste Fall, dass Sie früher zu einer Station kommen und dann müssen Sie auf denselben Zug warten, als ob Sie später mit einer anderen Route dorthin kommen würden.

Der einzige Unterschied ist, dass Sie Preis als „Zeit des Wartens + Fahrzeit“ statt nur „Zeit-Reise“

Dieses Verhalten zählen wird von Zügen verursacht, die echte „Ankunft/Abfahrt“.

Wenn jede Route für jeden A2-Knoten in jeder Knotenkombination A1 -> A2 -> A3 eine zufällige Strafe für den Übergang von A1 nach A3 über A2 erhält, wäre das unvorhersehbar, denke ich.

+0

Nein! Dijkstra ist nicht die Antwort. Betrachten Sie 'A', 'B' und 'J' mit source = 'A' und dest = 'J'. Betrachten wir "A" ist mit "J" mit einem Zug am Morgen 6 verbunden und es dauert 2 Stunden. Man bedenke, dass "A" um 12 Uhr mittags mit dem Zug mit "B" verbunden ist und es 3 Stunden dauert und "B" um 6 Uhr abends mit "J" verbunden ist und es wieder 3 Stunden dauert. Wenn der Reisende um 5 Uhr morgens anfängt, ist "A" bis "J" am kürzesten. Wenn der Reisende jedoch um 10 Uhr morgens startet, kann er/sie "J" über "B" erreichen und das Ziel in 11 Stunden erreichen. Da wir die Gesamtzeit minimieren möchten, ist diese Route für ihn am kürzesten. –

+0

@SubhajitKundu - das ist, was Modified Dijkstra lösen würde. Der "Preis" ist die Gesamtmenge der Stunden - die Wartezeit UND die Reisezeit. Wenn Sie um 10 Uhr beginnen, ist der kürzeste Weg A -> B, was "2 Stunden Warten + 3 Stunden Reisen = 5 Stunden" bedeutet, also wird der erste Knoten geöffnet. Dann messen Sie wieder "Gesamtbetrag" Stunden für B -> J, die weniger kosten als A -> J. – libik

+0

@SubhajitKundu - der einzige Unterschied ist, dass Sie den Preis zählen müssen, jedes Mal wenn Sie auch irgendwo kommen als Carring genaue Ankunftszeit. Nur etwas schwieriger, aber keine Änderungen in Dijksra überhaupt. – libik

Verwandte Themen