Условие:
У вас есть два хрустальных шара. Необходимо выяснить, падение с какого из 100 этажей здания шар еще выдерживает не разбиваясь. Более того, нужно найти стратегию требующую минимальное количество попыток полагая результаты попыток максимально не благосклонными выбранной методике и оценить это количество. Можно разбить оба шара в плодотворных поисках.
Решение:
Решим вариант данной задачи в общем виде – за какое минимальное число попыток возможно определить нужный этаж в k - этажном здании, имея n шаров. Для этого инвертируем условие задачи, будем определять этаж, до которого (включительно) мы сможем гарантированно найти нужный, имея на руках n шаров и m попыток их бросить. Обозначим это число .
Исследуем это число для простейших случаев:
Если n = 0 или m = 0, то, очевидно, что и
, нет шаров или попыток.
При n = 1, нам нужно бросать с самого нижнего этажа (бросив с пропуском этажа, шар разобьётся и этаж узнать не получится) поэтому .
Каждая использованная попытка дает нам дополнительную информацию о нужном этаже, поэтому оптимальным будет алгоритм для заданных n и m, который задействует все шары и все попытки. При этом, чтобы каждая попытка давала максимум информации, бросок нужно осуществлять с максимально возможного этажа для данной попытки, но так, чтобы оставшихся попыток и шаров хватило на нахождения решения в протестированном интервале этажей броском данной попытки. При n=2 таким максимальным этажом для первого шара будет этаж m остальными (m-1) попытками и вторым шаром мы проверим нижние этажи, если шар разбился. Если же он не разбился, то у нас все еще два шара и (m-1) попытка, следовательно вернулись к исходным условиям задачи, но с использованной попыткой. Значит, теперь можем бросить на (m-1) этаж вперед, остальными (m-2) попытками в любом случае найдем нужный этаж. Если же шар разобьется, то бросим снова на (m-3) этаже и так далее, пока попытки не закончатся. Итого, получаем, что этаж будет представлять из себя сумму членов арифметической прогрессии от 1 до m:
На этом шаге можно получить решение исходной задачи для и
, подбирая
так, чтобы
оказалось больше или равно 100. При
получаем 91, а при
получаем 105, поэтому ответ 14.
Теперь рассмотрим условие задачи для и
попыток. Если при броске первого шара он разобьется, то оставшимися 2 шарами мы можем проверить максимум
этажей снизу, следовательно первую попытку можно делать максимум с
этажа. Если шар не разбился, то у нас все еще 3 шара и
попытка, а, следовательно, имеет место следующее рекуррентное соотношение, которое, очевидно, можно записать для произвольного числа шаров:
Найдем выражение для используя метод производящих функций, производящую функцию будем искать в виде:
Умножая левую и правую часть рекуррентного соотношения на и используя то, что
и
получим:
Вынося за скобку в первом слагаемом,
во втором слагаемом и сдвигая индекс суммирования получим, что:
Выражая , получаем:
используя то, что функция является двумерной производящей функцией для биномиальных коэффициентов, получаем:
Раскрывая произведение сумм и объединяя члены с одинаковыми степенями и используя то, что при k > i, получаем:
И, следовательно:
Для нашего случая, n = 2, m = 14 получаем:
Задача про шары и этажи свелась к сложениям биномиальных коэффициентов.
А как вы считаете, уместна ли подобная задача на собеседованиях?