Vous et un ami vous êtes perdus sur la ligne à un concert, et vous ne savez pas lequel d'entre vous est plus avancé. Formellement, chacun a une coordonnée entière et ne peut marcher que vers une coordonnée plus élevée ou rester en place.
En supposant que vous et votre ami suivez exactement le même algorithme (et non, vous ne pouvez pas dire "si (nom ==" R B ") faites quelque chose :)), et la distance initiale entre vous deux était (ce qui n'est pas que vous connaissez).
Quel est l'algorithme qui minimise la distance de marche attendue jusqu'à ce que vous et votre ami vous rencontriez?
Vous pouvez supposer que votre ami et vous-même évoluez à la même vitesse constante.
Un exemple d'algorithme simple serait quelque chose comme:
Au stade (à partir de 0 ):
- Marcher pas à droite wp 1 ou attendre3nunités de temps autrement.
Pour voir cet algorithme, les amis rencontrent la probabilité 1 de considérer ce qui se passe au stade . Même si l'ami qui était x en avance marchait toujours et que l'autre restait toujours en place, la distance entre les deux serait: x + 1 + 3 + 9 + … + 3 log 3 x = 2 x + x - 1
Par conséquent, à l' itération , l'ami qui choisit de marcher couvrira une distance de 3 log 3 x + 1 = 3 x , donc avec probabilité 1 , l'ami qui est derrière rattrapera son retard et se rencontrera.
Une optimisation simple (pour réduire la distance de marche) serait, au lieu de marcher pas, marcher c x pas, où est donné par: 2 + 1
D'où le c optimal pour cet algorithme est
Malheureusement, alors que cet algorithme garantit que les amis rencontreront la probabilité 1, la distance de marche attendue est infinie, ce que j'aimerais éviter si possible.
Existe-t-il un algorithme plus efficace?