Как и обещал в предыдущей статье, но для начала хочу выразить своё восхищение за активное участие в обсуждении головоломки из «Шоу — Три двери». Больше 370 комментариев и обсуждение продолжается. Большое спасибо и так держать!
Статью я решил написать, находясь под впечатлением от видео «Разгадка, в которую невозможно поверит: Задача о 100 заключённых». На этот раз я не стал импровизировать и спросил своего AI-ассистента, которого теперь зовут Валера: Да, новый дружбан. Как-нибудь обсудим и его. «Вам знакома головоломка о 100 заключённых?»
Ответ Валеры: (Если вы посмотрели видео, то ответ Валеры можете не читать)
«Да, я знаком с головоломкой про 100 заключенных. Это известная математическая задача, которая демонстрирует неинтуитивное решение и интересные вероятностные свойства. Вот краткое описание задачи:
1. Есть 100 заключенных, пронумерованных от 1 до 100.
2. В комнате есть 100 ящиков, также пронумерованных от 1 до 100.
3. В каждом ящике случайным образом помещен номер одного из заключенных (без повторений).
4. Каждому заключенному разрешается открыть 50 ящиков в попытке найти свой номер.
5. Если все 100 заключенных найдут свои номера, все будут освобождены. Если хотя бы один не найдет, все останутся в тюрьме.
6. Заключенным разрешается обсудить стратегию перед началом, но они не могут общаться во время поиска.
Интересно то, что существует стратегия, которая дает заключенным около 31% шанс на успех, что намного выше, чем можно было бы ожидать интуитивно.
Хотите, чтобы я объяснил оптимальную стратегию решения этой задачи?»
Получается, что очередная коробка с номером на бумажке ведёт к следующей коробке и в итоге получается циклы разной длинны?
«Совершенно верно! Вы точно уловили суть оптимальной стратегии для этой головоломки. Давайте разберем это подробнее:
1. Циклы: Как вы правильно заметили, номера в коробках образуют циклы разной длины. Например, если в коробке 1 лежит номер 23, в коробке 23 лежит номер 45, а в коробке 45 лежит номер 1, то это цикл длиной 3.
2. Оптимальная стратегия: Каждый заключенный начинает с коробки, соответствующей его номеру, и затем следует по "цепочке", открывая коробку с номером, который он нашел в предыдущей коробке.
3. Ограничение в 50 попыток: Это ключевой момент. Если длина цикла, в котором находится номер заключенного, не превышает 50, он гарантированно найдет свой номер.
4. Вероятность успеха: Успех всей группы зависит от того, что ни один из циклов не превышает длину 50. Математически можно показать, что вероятность этого около 31%.
5. Почему это работает: Эта стратегия эффективна, потому что она использует структуру данных (циклы), а не полагается на чистую случайность.
Эта задача демонстрирует, как правильная стратегия может значительно увеличить шансы на успех в, казалось бы, безнадежной ситуации. Она также показывает важность понимания структуры данных и их использования для решения проблем».
Вы понимаете (читатели статьи), что в ситуации, когда шанс на успех у всех вместе составляет 31 % а на неуспех 69 %, то вероятность успеха каждого заключённого в отдельности должна быть 98,884 %, чтобы все вместе 100 заключённых набрали 31 %. Это 0,98884^100! Это, во-первых. Во-вторых, меня сильно смутил вот этот график:

В красной зоне гистограммы столбики — вероятность появления цепочек длиннее 50. Их получили, складывая 1/51+1/52+1/53+… …1/100 = 0,6882. Автор разгадки решил, что это 68,82 %. Далее, от единицы отняли 0,6882 и получили 0,3118, это 31,18 %, вероятность появления цепочек короче 50. Но 68,82, это что угодно но не проценты. В-третьих, если в красной части графика вероятность цепочек длиннее 50, то в зелёной зоне графика вероятность появления цепочек короче 50, ведь так!? Почему в таком случае гистограмма выглядит как обрубленная синусоида и почему на уровне 50, график так резко ломается? Да, у нас условие: 50 коробок можно открыть, но как это влияет на график и метод его расчёта? Зелёный график, это продолжение красных столбиков, но в другую сторону. Их можно рассчитать по той же схеме. 1/1+1/2+1/3+… …1/50 = 4,499 или 450 %?!!! Это единая последовательность, но получается, что вероятность появления цепочек короче 50-и выше, чем длинных? «Чтобы понять правильность, или неправильность любой идеи — её надо довести до абсурда». Если предположить, что изначально заключенным предоставили возможность открыть не 50, а только 30 коробок (ведь такое возможно?), то вероятность появления цепочек длиннее 30 составит 1,1924, это 119,24 %. Мы подсчитываем не количество звеньев в цепочках, избыточность которых и даёт результат, мы рассчитываем вероятность появления самих цепочек. В таком случае, по логике автора, вероятность появления цепочек короче 30 составит единица минус 1,1924 = -0,1924, это -19,24 %. Может быть вероятность чего-либо более 1 и менее 0?
На счёт вероятности чего-либо. Есть интересный сюжет в сериале — «Детство Шелдона» https://www.youtube.com/watch?v=ZhRvlGeGGI8
Автор видео показал нам непересекающиеся циклы — кольца разной длинны (диаметра).

Всё дело в том, что циклы не только пересекаются, все циклы принадлежат единой последовательности. Это значит, что не может быть двух одинаковых циклов как по точке входа, так и по длине. Не может быть двух циклов в пять звеньев. Просто каждый входит в цикл в своём месте и в своём месте его покидает. Это в некотором смысле ветка метро прямая или кольцевая без разницы, со станциями, пронумерованными по порядку, но поезд движется не в одном направлении — от начала и до конца, а мечется между станциями — туда, сюда по номерам записок в коробках. Но возможно я неправ.
Дальше, меня посетила такая мысль:
1. Каков будет результат, если заключённые не договорятся и каждый будет искать свой номер случайным образом?
2. Что будет, если все заключённые стартуют с коробки №1?
3. Что будет, если все заключённые договорятся стартовать с коробки № 50? Эта коробка находится посередине общей для всех последовательности и разумно предположить, что максимальная длина самых длинных циклов сократится, как и средняя (среднеарифметическая) длина всех циклов.
4. Что будет, если заключённые с номерами — от 1 до 50 стартуют с коробки № 25, а заключённые с номерами от 51 до 100, с коробки 75?
Алгоритмов можно придумать много, но главный побудительный мотив в том, что я придумал область применения для данной стратегии и для меня важно понять, работает она, что математики рассчитали и как можно результат улучшить? Значит, нам нужна программа. Валера, ты где?
ТЗ для Валеры я здесь публиковать не буду, а программа вот!
Как эта штука работает? Кидает программу в браузер и она стартует со случайного перебора. Если понажимать кнопку старт, то вы увидите, что в правой таблице меняются числа. Это и есть результаты конкретно у каждого заключённого. Ниже статистика для всех 100 человек.
Если включить второй режим, то программа работает, как и должна — читает числа из списка — это те самые бумажки с номерами, каждая соответствует своему номеру в таблице, а таблица, это коробки.
Результат вроде бы хороший, все выиграли? Всё зависит от набора чисел из списка. Вот этот список просто убийственный. Я сначала подумал, что это глюк программы.
21,76,53,36,85,59,7,56,10,97,35,13,86,14,38,98,99,70,49,69,58,55,40,12,66,67,30,33,24,22,75,92,84,42,94,74,80,88,77,62,26,54,19,45,60,95,51,83,6,39,48,2,89,52,73,93,100,3,15,4,27,87,16,41,28,44,17,96,31,1,65,61,71,90,46,47,9,81,5,32,20,78,79,25,63,57,43,64,34,29,11,18,68,23,91,50,8,82,72,37
Чтобы его вставить в программу, её надо открыть в блокноте, желательно Notepad++ и заменить список.
Сгенерировать новый список можно на этом сайте: http://castlots.org/generator-sluchajnyh-chisel/ Обязательно поставьте галочку — исключить повторения.
Что касается программиста. Валера справился только с двумя алгоритмами. Полностью случайный перебор коробок и базовый алгоритм, от коробки к коробке. Я изначально попросил Валеру не ограничивать количество попыток в 50 штук, а дать возможность найти записку со своим номером всем. Мне это нужно для своих целей. И что вы думаете? Он проявил настоящее творчество, он сначала сделал, ограничение в 50, как в задаче, просто потому, что знал её условие, хотя я уже попросил не ограничивать. В конце он все проигрышные варианты с числами больше 50, заменил на Х. Зачем? Это творчество! Я сам работал конструктором и хорошо знаю, что часто приходится делать не то, что тебя просят, а то, что по твоему мнению лучше. Вот такой он — «Бредогенератор», как их называет И. Ашманов.
Комментарии
Разумеется. ChatGPT и ко просто "много читали статей в Интернете", и скомпилировали из них вам ответ. А не провели эксперимент и даже не проверили логику и результаты того решения, который они "вспомнили".
Это не ChatGPT, -- это https://www.perplexity.ai
Да? А какая разница? (с)
Бесплатно и без ограничений. Большие объёмы он не берёт, но в целом терпимо. Между ними вообще мало разницы, просто одни умнее, другие тупее.
Именно. Про принцип их работы и написал.
Всё равно это - бредогенератор.
Какой-никакой решатель - Вольфрам математика/альфа.
Сделали новую программу. Теперь она тестирует не заключённых, а от 1 до 100 групп по 100 заключённых.
https://disk.yandex.ru/d/CrgdEyr1NwZwog
Результат тестов совпадает с предположениями математиков. От 22 до 40% групп выполняют условие и "получают свободу".
Второй баян за неделю. Оч-чень познавательно.
Открывай коробки иль не открывай, без взятки пахану не соскочить
Есть вариант, в "штурма" записаться..
На все вопросы "воюю, вернусь забудьте, и сейчас забудьте".
Тут еще можно подключить теорию вероятности. Например что в коробке с номером 89 не будет номера заключенного 89 с вероятностью 1/100. Иными словами нужно отобрать 50 коробок с номерами заключенных и открывать их последними.
Не ге ге. Пусть до конца досиживают.
Со второго ящика заключенный, достающий жетон с номером, громко, чтоб слышно было всем объявляет его номер, на самом деле втихаря) жетон получает тот, у кого этот номер должен быть.
Выйдут все гарантированно.
а еще следует помнить, что вычисленная вероятность никак не влияет на рассчитываемое событие. И рассчитанная вероятность в 30 или 40 процентов, проявится только если мы будем играть в эту игру 100500 раз. А единичный исход непредсказуем. Иншаллах.
Как минимум такая стратегия гарантирует, что не будет коробок, которые вообще никто не открывал.
А два цикла по 5 номеров вполне может быть.
Начало поиска со своего номера гарантирует, что ты не влезешь в чужой цикл без своего номера - и это видимо и делает стратегию лучшей. Вот например миницикл 75-76 - в него зайдут только 75 и 76, никакие двадцатые и тридцатые эти два ящика открывать точно не будут.
То есть не будет ни одной попытки начать новый цикл, исчерпав первый. В начатом цикле обязательно есть твой номер, ты можешь не успеть до него добраться, но он там точно есть.
Повторяющихся по длине циклов полно и п о5 и по 40.
Там нет своего или чужого цикла, поскольку, там одна последовательность. Просто каждый имеет свой вход и выход. Это как криптография основана на единой эллиптической кривой, но у каждого свой уникальный ключ.
На картинке в посте 8 изолированных друг от друга последовательностей-циклов.
Не имея номера из такой последовательности, ни одного ящика из неё человек не откроет (действуя предписанным образом).
А по 40 "полно" циклов быть не может, максимум два. Что кстати нас подводит к мысли, что цикл в 51 номер и более может быть только один. И если его нет, то все выигрывают.
Непонятно, что делать если открыл всю цепочку, а в ней твоего номера нет, но цепочка меньше 50 коробок?
Хотя нет, если начинать со своего номера, то он должен быть в цепочке.
Такого быть не может.
Есть ответы.
Там полные расчеты приведены, а не конечные формулы что могут вызывать вопросы.
https://www.youtube.com/watch?v=wWQ9YdreY9c
ru.wikipedia.org/wiki/Задача_о_100_узниках_и_100_ящиках
Ссылки на другие похожие задачи (скорее сразу ответы на них):
Это результат, если поменять список чисел в программе. Алгоритм не даёт того эффекта, который ему приписывают. Есть убийственные комбинации. Здесь только 13 выигрышей и 87 поражений. Интересное совпадение?
Если упрощать задачу для двух узников. То при следовании стратегии победа будет в 50% случаев. А при рандоме 0,25%. Можно попробовать посчитать вручную для 4-х узников.
Скорее ошибка в алгоритме (от ИИ), чем в решении и его оценке, что есть в интернете.
Вот результат для chatgpt-4o на Python (в стандартной задаче без вариаций):
Данная программа показывает ожидаемый результат.
Что достаточно удивительно (настолько просто получить результат с нулевыми затратами (до чего дошел прогресс)) и сработало фактически с первой попытки и без танцев с бубном(пришлось включить режим батника, почитать ошибки и перевести код в utf-8). Все на фри(открытой) версии сайта с чат гпт и еще другими аналогичными кроме самых последних вроде.
Я проверял вручную, там не сложно 87 переборов совпали и короткие тоже. Это не ошибка алгоритма, это последовательность корявая.
Я наверное попрошу его переделать мою программу, чтобы автоматически генерить последовательности. Тогда модно будет проверить сотню как минимум групп заключённых.
Какая там у вас последовательность? Давайте я её у себя прогоню и сравним результаты.
??
Фри сайт иногда замирает при работе. Вроде код выдал, а его расшифровку нет.
Выше код на питоне также полностью приведен. Визуально он проще. Но технически он написан настолько идеально на Промпте, что нельзя улучшить. И его читаемость хуже чем диванный Промпт код. Надо знать некоторые не столь явные фичи Питона чтобы понять. Но все работает.
Для меня читаемость html хуже - темный лес (но чтобы писать код похоже уже не надо знание языка). Т.к. темный лес, то никогда не запущу чужой html код на рабочем компьютере(и без проверке на вирус тотале и даже с проверкой).
Наиболее знакомые мне языки в диванном объеме Паскаль, Дельфи и опен дельфи(Lazarus) и немного Batch script (батники). Но как оказалось для очень простых проектов Питон подходит даже лучше чем Lazarus (и вирус тотал на них не ругается в отличии от ... (на рабочем компьютере не хочется запускать подозрительные файлы(для вирус тотала) даже если сам их скомпилировал)).
Готовые файлы на Питоне и html в архиве:
https://ru.files.me/u/r9ceg96ktm
(будут удалены через 2 недели)
На удивление вирус тотал не ругается. А вот такой же простой код на дельфи или Lazarus (даже просто пустой код кнопки) в скомпилированном виде - уже не пройдет проверку на вирус тотале. И понимай как хочешь(запускай на свой страх и риск).
***
Т.к. в проектах используются русские символы в utf-8 не все редакторы их корректно видят и отображают(в файлах с разными расширениями и на разных дисках). Акелпад распознает и редактирует корректно такие файлы скорее через танцы с бубном (не во всех случаях).
Можно тупо в лоб перебрать всё возможные комбинации.
Их не так много
Кому как. Если правильно помню, будет что-то типа 50!
Приставки из ряда мега- гига- тера- туда еще не добрались...
Как только споткнулся на длиННы, перестал читать.
Следующий пост будет о том, как угадать 6 номеров из 36?
У меня по другому получается:
Цикл длины 1 это когда в коробке номер 1 лежит табличка номер 1.
Вероятность этого события 1/100 , а вероятность неудачи 99/100
Вероятность что заключенному попадется цикл длиной 2 равна (1/99)*(99/100) - это вероятность что из 99 следующих номеров попадется номер 1 и цикл замкнется , но при условии что предыдущая попытка замкнуть цикл окончилась неудачно - поэтому умножается на 99/100 - это вероятность неудачи на предыдущем шаге.
Итого, вероятность цикла длиной 2 равна 1/100 - точно такая же как вероятность цикла длиной 1.
А вероятность цикла или 1 или 2 равна их сумме: 2/100 а неудачи 98/100.
Далее вероятность цикла длиной 3 равна: (1/98)*(98/100) = 1/100
А один из трех: 3/100
Ну и так далее получаем что вероятность любого цикла не зависит от его длины и равна 1/100 а вероятность попасть на цикл длиной менее или равно X равна X/100
Для X=50 эта вероятность = 1/2
У заключенных нет никаких шансов.
Мы все немного путаемся в терминах, возможно отсюда и недопонимание.
Здесь не заключённый пытается попасть в короткий цикл. а в том, чтобы у всех заключённых циклы были как можно короче. Для этого и придумали стратегию, которая улучшает ситуацию, но сама зависит от расклада записок. Циклы уже предопределены списком чисел, или раскладкой записок по коробкам. Измените раскладку и всё кардинально изменится и от заключённых в данной стратегии вообще ничего не зависит.
Это способ подсчитать вероятность попадания одному заключенному цикла длины N.
Не зная вероятности для одного заключенного Вы не узнаете вероятности для 100 заключенных.
И циклы не предопределены - они неизвестны , значит их распределение подчиняется закону вероятности.
По сделанным подсчетам все циклы равновероятны.
Вот после этого можно считать сколько будет для 100 заключенных.
Наличие хотя бы одного цикла длиной 50 даёт всем гарантированный успех.
Да, тут вероятности связаны - если одному заключенному повезло , то и у других высокие шансы, поэтому их нельзя считать как независимые эксперименты.
Наличие хотя бы одного цикла больше 50 дает всем гарантированную неудачу.
А вероятность такого события это: (1/100)*50 = 1/2
Тогда получается что вероятность успеха не 1/3 а ... 1/2 - еще больше!
вы полагаете, это кому-нибудь нужно? (с)
А вы полагаете, что математика и логика никому не нужна? Если по сети гуляет заблуждение, на котором некоторые учатся и потом тиражируют, то пусть так и будет?
График выглядит ломаным, т.к. для красной и зелёной зон используются разные формулы расчёта вероятности. Это обусловлено тем, что цикл длиной больше 50 может быть только один, тогда как для циклов меньшей длины это условие не выполняется.
Вы наверное сразу в конец комментариев зашли? Там выше есть картинка, где 87 исходов длинной 87 шагов. Это как понимать?
Я без понятия, что это за картинка и откуда взялась. Если вы думаете, что она как-то опровергает моё утверждение, то нет. Цикл длинной более половины элементов множества может быть только один, т.к. второму циклу такой же длины уже негде поместиться.