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

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

Наблюдение:

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


Подход:

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

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

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

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

algorithm

puzzle

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

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