Два шарика и 100-этажное здание

Эта проблема рассмотрена algorithm в задаче 6.5 из книги "Cracking the Coding Interview (5th)", решения algorithm-design которой резюмированы следующим puzzle образом:

Наблюдение:

Независимо от того, как puzzle мы отбрасываем Marble1, Marble2 algorithm должен выполнять линейный puzzle поиск. Например, если Marble1 перерывы puzzle между 10 и 15 этажами, мы algorithms должны проверить каждый этаж puzzle с помощью Marble2


Подход:

Первая попытка. Предположим, мы puzzle уронили мрамор с 10-го этажа, затем puzzle с 20-го…

  • Если мрамор разбивается при первом падении (этаж 10), то всего у нас получается не более 10 капель.
  • Если первый мрамор разбивается на последней капле (этаж 100), то всего у нас будет не более 19 капель. (этажи с 1 по 100, затем с 91 по 99).
  • Это неплохо, но все, о чем мы думаем, - это наихудший случай. Мы должны сделайте некоторую «балансировку нагрузки», чтобы уравновесить эти два случая.

Цель: создать систему algorithm сброса Marble1, чтобы максимальное algorithm количество требуемых падений algorithms было постоянным, независимо algorithms от того, ломается ли Marble1 algorithm-design при первом или последнем puzzle падении.

  1. Идеально сбалансированная система - это система, в которой капли мрамора1 + капли Marble2 всегда одинаков, независимо от того, где Marble1 сломался.
  2. Для этого, поскольку каждая капля Marble1 требует еще одного шага, Marble2 допускается. на один шаг меньше.
  3. Следовательно, мы должны сократить количество шагов, которые потенциально могут потребоваться для Marble2, на один. падение каждый раз. Например, если Marble1 падает на этаж 20, а затем на этаж 30, Marble2 будет потенциально требуется сделать 9 шагов. Когда мы снова бросаем Marble1, мы должны уменьшить количество возможных шагов Marble2 до 8, например, мы должны сбросить Marble1 на 39 этаже.
  4. Таким образом, мы знаем, что Marble1 должен начинаться с этажа X, затем подниматься на этажи X-1, затем X-2,…, пока не дойдет до 100.
  5. Решите относительно X + (X-1) + (X-2) +… + 1 = 100. X (X + 1) / 2 = 100 -> X = 14

Мы переходим на 14-й этаж, затем на 27, затем на 39… Это занимает максимум 14 шагов.


Код и расширение:

  • Для реализации кода algorithm-design вы можете проверить here.

  • Чтобы puzzle узнать о расширении N мрамора, M этажей, посетите algorithm Chapter 12: The puzzle of eggs and floors.

algorithm

puzzle

2022-08-29T18:07:16+00:00
Вопросы с похожей тематикой, как у вопроса:

Два шарика и 100-этажное здание