Блог пользователя AlexSkidanov

Автор AlexSkidanov, 15 лет назад, По-русски
Еще одна сравнительно старая, но не очень известная задача.

Есть 100 узников. На 100 листах бумаги написалии их имена - одно имя на одном листе, каждое имя по одному разу. Затем эти листки положили в 100 абсолютно одинаковых коробок по одному листу в коробку, и поставили эти коробки в ряд. На следующий день узников по одному будут впускать в комнату, после чего узник будет иметь право открыть 50 коробок из 100. Если узник найдет свое имя, то все коробки закроют, и впускают следующего узника. Если же узник за 50 попыток не найдет свое имя, всех 100 узников казнят. При этом во время всего этого процесса у узников не будет никакого шанса общаться друг с другом, и сейчас у них последняя ночь, чтобы выработать стратегию.
Можете ли вы придумать стратегию, которая позволит узникам завтра с шансом не меньше 30% уйти живыми и невредимыми?
  • Проголосовать: нравится
  • +12
  • Проголосовать: не нравится

15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Если я правильно понял условия задачи, то первый найдет свое имя с вероятностью 50/100. Если первый нашел свое имя, то второй после этого - какие бы ящики не открывал - найдет своё имя с вероятностью от 49/99 до 50/99. Вероятность обоих событий в лучшем случае будет 50/100 * 50/99, что уже меньше 30%. Следующие заключенные могут эту вероятность только ещё уменьшить. Так что думаю, что стратегию придумать невозможно, если, конечно, не разрешить заключенным менять свои имена. :)
15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Насколько я понял, активный узник никак не может передать информацию оставшимся (либо все умрут, либо никакой информации). Как следствие - либо ответа не существует, либо способ передачи информации все же есть и автор что-то недоговаривает.
15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Подумал еще чуть-чуть и понял, что информация все же есть в том, что узник не умер.

Если узников всего 2. То они договариваются, что первый откроет первую коробку. Тогда если дошел ход до второго, то надо открывать вторую и вероятность выжить 50%.

Если узников 4, то первый открывает коробки 1 и тот номер, который был в первой коробке.
Второй открывает первую коробку и первую из неизвестных (2, если в первой коробке не 2; в противном случае 3).
Третий открывает первую коробку, однозначно понимает что открыли 1 и 2 узники и выбирает первую из оставшихся
Четвертый открывает первую коробку, однозначно понимает что открыли 1, 2 и 3 узники и выбирает оставшуюся.
Вероятность выжить (1/4 * 1+ 3/4 * 1/3) * ( 1/4 * 1/3 + 1/4*1 + 2/4 * 1/2) * ( 1/4 * 1/2 + 1/4 * 1/2 + 2/4 * 1) * 1 = 1/2 * 7/12 * 3/4 = 21.9%

Маловато конечно, но на этом источник мысли иссяк.
15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Коробки открывают именно по очереди, и можно открывать следующую, зная что лежит во всех уже открытых?
15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Может-быть первые 50 узников открывают первые 50 коробок. Если первые 50 выжили, то последние 50 выживут 100%, т.к. им надо будет открывать последние 50 коробок, где 100% их имена.
15 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Надо было в реале первые 100 человек на codeforces заточить и приговорить к такому испытанию. В 3 секунды бы придумали алгоритм :)
15 лет назад, # |
  Проголосовать: нравится +12 Проголосовать: не нравится
Нужно сматчить узников с коробками, а потом доставать листки, начиная со своей коробки, и идти по циклу. Нужно оценить вероятность того, что в перестановек будет цикл длины больше 50. Это будет хвост гармонического ряда, который можно оценить как ln 2, что дает нам 0.69 < 0.7.
  • 15 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Более развёрнуто в википедии
    • 15 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Только они как-то страшно производят оценку вероятности. У меня получилось слегка полегче. А именно:

      \sum_{k = 51}^{100} P(есть цикл длины k) = \sum_{k = 51}^{100} (C_100^k * (k - 1)! * (100 - k)!) / (100!) = \sum_{k = 51}^{100} 1/k ~ ln 2. Все, никакого тебе комплана.