Sie und ein Freund haben sich während eines Konzerts gegenseitig verloren, und keiner ist sich sicher, welcher von Ihnen weiter vorne ist. Formal ist jede auf einer ganzzahligen Koordinate und kann nur auf eine höhere Koordinate zugehen oder an Ort und Stelle bleiben.
Angenommen, Sie und Ihr Freund folgen genau demselben Algorithmus (und nein, Sie dürfen nicht sagen, dass "if (name ==" R B ") etwas tut :)), und der ursprüngliche Abstand zwischen Ihnen beiden war (was nicht der Fall ist) Ihnen bekannt).
Was ist der Algorithmus, der die erwartete Gehstrecke minimiert, bis Sie und Ihr Freund sich treffen?
Sie können davon ausgehen, dass sowohl Ihr Freund als auch Sie sich mit der gleichen konstanten Geschwindigkeit bewegen.
Ein einfacher Algorithmus wäre zum Beispiel:
In Stufe (ab ):0
- Gehen Sie Schritte nach rechts, wp oder warten Sie ansonsten Zeiteinheiten.1 3n
Um diesen Algorithmus zu sehen, treffen sich die Freunde mit der Wahrscheinlichkeit, dass 1 überlegt, was auf der Bühne passiert . Selbst wenn der Freund, der Schritt voraus war, immer ging und der andere immer an Ort und Stelle blieb, wäre der Abstand zwischen den beiden: x x + 1 + 3 + 9 + … + 3 log 3 x = 2 x + x - 1
Daher der Freund, der gehen , bei der Iteration Strecke von , also mit der Wahrscheinlichkeit den Freund, der sich dahinter befindet wird aufholen und sie werden sich treffen.3 log 3 x + 1 = 3 x 1
Eine einfache Optimierung (um die Gehstrecke zu verringern) wäre, anstatt Schritte zu gehen, Schritte zu gehen, wobei gegeben ist durch: c x c 2 + 1
Daraus ergibt sich die optimale für diesen Algorithmus istc = 3 + √
Obwohl dieser Algorithmus garantiert, dass die Freunde mit der Wahrscheinlichkeit 1 aufeinandertreffen, ist die erwartete Gehstrecke leider unendlich, was ich nach Möglichkeit vermeiden möchte.
Gibt es einen effizienteren Algorithmus?