Я читаю книгу Роберта Седжвика по алгоритмам 4-го издания, и перед ним стоит следующая задача:
Предположим, у вас есть N-этажное здание и 2 яйца. Предположим также, что яйцо разбито, если оно брошено с этажа F или выше, и не разбито в противном случае. Ваша модель затрат - это количество бросков. Разработайте стратегию определения F так, чтобы количество бросков ~ c √ F для некоторой константы c.
Первая часть задачи - найти F за 2 √ N шагов, и вот решение для этого:
Решение части 1:
- Чтобы получить 2 * sqrt (N), бросьте яйца на этажи sqrt (N), 2 * sqrt (N), 3 * sqrt (N), ..., sqrt (N) * sqrt (N). (Для простоты мы предполагаем, что sqrt (N) является целым числом.)
- Предположим, что яйцо разбилось на уровне k * sqrt (N).
- Затем со вторым яйцом вы должны выполнить линейный поиск в интервале от (k-1) * sqrt (N) до k * sqrt (N).
- Всего вы сможете найти этаж F не более чем за 2 * sqrt (N) испытаний.
Он также дает подсказку для части ~ c √ F (часть 2):
Подсказка для Части 2: 1 + 2 + 3 + ... k ~ 1/2 k ^ 2.
Итак, каков алгоритм, чтобы сделать это за ~ c √ F шагов?
k*(k+1)/2
этажей. - person Klas Lindbäck   schedule 03.05.2015