Представьте, что вы находитесь в высоком здании с кошкой. Кошка может выдержать падение из окна с низкой историей, но умрет, если ее выбросят с высокого этажа. Как вы можете найти самое длинное падение, которое может выдержать кошка, используя наименьшее количество попыток?
Очевидно, если у вас есть только одна кошка, вы можете искать только линейно. Сначала бросьте кошку с первого этажа. Если он выживет, выбросьте его со второго. В конце концов, после того, как он будет выброшен с пола f, кошка умрет. Затем вы знаете, что пол f-1 был максимальным безопасным полом.
Но что, если у вас есть более чем одна кошка? Теперь вы можете попробовать какой-то логарифмический поиск. Скажем, что сборка имеет 100 этажей, и у вас есть две одинаковые кошки. Если вы выбросите первого кота из 50-го этажа, и он умрет, вам придется искать только 50 этажей. Вы можете сделать еще лучше, если вы выберете нижний этаж для первой попытки. Скажите, что вы решили решить проблему по 20 этажей за раз и что первый роковой этаж №50. В этом случае ваш первый кот выдержит полеты с этажей 20 и 40, прежде чем умереть с 60-го уровня. Вам просто нужно проверять полы с 41 по 49 индивидуально. Это всего 12 попыток, которые намного лучше, чем 50, которые вам понадобятся, если бы вы попытались использовать бинарное устранение.
В целом, какая лучшая стратегия и наихудшая сложность для n-этажного здания с двумя кошками? Как насчет n этажей и м кошек?
Предположим, что все кошки эквивалентны: все они выживут или умрут от падения из данного окна. Кроме того, каждая попытка является независимой: если кошка переживает падение, она полностью невредима.
Это не домашнее задание, хотя я, возможно, решил его для школьного задания один раз. Это просто капризная проблема, которая появилась сегодня в моей голове, и я не помню решение. Бонусные баллы, если кто-либо знает название этой проблемы или алгоритм решения.