Вы и друг потеряли друг друга в очереди на концерт, и никто не уверен, кто из вас еще впереди. Формально каждый из них имеет некоторую целочисленную координату и может идти только к более высокой координате или оставаться на месте.
Предполагая, что вы и ваш друг придерживаетесь одного и того же алгоритма (и нет, вы не можете сказать «если (name ==« R B ») что-то делаете :)), и начальное расстояние между вами было (что не известно вам).
Каков алгоритм, который минимизирует ожидаемое расстояние ходьбы, пока вы и ваш друг не встретитесь?
Вы можете предположить, что и ваш друг, и вы движетесь с одинаковой постоянной скоростью.
Пример простого алгоритма будет выглядеть примерно так:
На этапе (начиная с 0 ):
- Прогулка шагов к правильному сор 1 или подождите3nединиц времени в противном случае.
Чтобы увидеть, что этот алгоритм заставляет друзей встретиться с вероятностью 1, подумайте, что происходит на этапе . Даже если друг, который был на x шаг впереди, всегда шел, а другой всегда оставался на месте, расстояние между ними было бы: x + 1 + 3 + 9 + … + 3 log 3 x = 2 x + x - 1
Следовательно, на итерации друг, который выбирает прогулку, преодолеет расстояние 3 log 3 x + 1 = 3 x , следовательно, с вероятностью 1 , друг, который позади, догонит, и они встретятся.
Простая оптимизация (для уменьшения пройденного расстояния) состояла бы в том, чтобы вместо шаговых шагов пройти х х шагов, где с определяется как: 2 + 1
Таким образом, оптимальная для этого алгоритма является C = 3 + √
К сожалению, хотя этот алгоритм гарантирует, что друзья встретятся с вероятностью 1, ожидаемое расстояние ходьбы бесконечно, чего я бы хотел избежать, если это возможно.
Есть ли более эффективный алгоритм?