Tu e un amico ci siete persi a vicenda sulla linea per un concerto, e nessuno dei due è sicuro di chi di voi sia più avanti. Formalmente, ognuno ha una coordinata intera e può solo camminare verso una coordinata più alta o rimanere in posizione.
Supponendo che tu e il tuo amico seguiate esattamente lo stesso algoritmo (e no, non potreste dire "se (nome ==" R B ") fate qualcosa :)), e la distanza iniziale tra voi due era (che non è a te noto).
Qual è l'algoritmo che minimizza la distanza percorsa fino a quando tu e il tuo amico vi incontrate?
Puoi presumere che sia il tuo amico che te stesso si stiano muovendo alla stessa velocità costante.
Un semplice algoritmo di esempio sarebbe qualcosa del tipo:
Allo stadio (a partire da ):
- Cammina passi verso destra wp 1 o attendereunità di tempo in caso contrario.
Per vedere questo algoritmo fa incontrare gli amici con probabilità 1, considera cosa succede in fase . Anche se l'amico che era passo avanti camminava sempre e l'altro rimaneva sempre in posizione, la distanza tra i due sarebbe:
Pertanto, al iterazione, l'amico che sceglie di camminare coprirà la distanza di , quindi con probabilità , l'amico che sta dietro raggiungerà e si incontreranno.
Un semplice ottimizzazione (per ridurre piedi) sarebbe, invece di camminare gradini, piedi gradini, dove è dato da:
Quindi la ottimale per questo algoritmo è
Sfortunatamente, mentre questo algoritmo garantisce che gli amici incontreranno la probabilità 1, la distanza percorsa prevista è infinita, cosa che vorrei evitare, se possibile.
Esiste un algoritmo più efficiente?