📜  拼图 |第 35 组(2 个鸡蛋和 100 层)

📅  最后修改于: 2022-05-13 01:57:25.117000             🧑  作者: Mango

拼图 |第 35 组(2 个鸡蛋和 100 层)

下面是对这个著名拼图实例的描述,它涉及 2 个鸡蛋和 100 层楼。

假设我们想知道在 100 层的建筑物中,从哪些楼层可以安全地放下鸡蛋,哪些会导致鸡蛋落地时破裂。应该使用什么策略来掉落鸡蛋,以便在最坏情况下的掉落总数最小化,并且我们找到所需的楼层

我们可以做一些假设:

  • 跌倒后幸存的鸡蛋可以再次使用。
  • 必须丢弃破碎的鸡蛋。
  • 坠落对所有鸡蛋的影响都是一样的。
  • 如果鸡蛋在掉落时破裂,那么如果从较高的楼层掉下它就会破裂。
  • 如果鸡蛋在跌落中幸存下来,那么它将在较短的跌落中幸存下来。

我们强烈建议您将浏览器最小化并先尝试一下

如果只有一个鸡蛋,而我们希望确保获得正确的结果,则只能以一种方式进行实验。从一楼的窗户掉下鸡蛋;如果它幸存下来,就把它从二楼的窗户扔掉。继续向上直到它破裂。在最坏的情况下,这种方法可能需要 100 次粪便。
假设有 2 个鸡蛋可用。保证在所有情况下都有效的最少数量的鸡蛋粪便是多少?
问题实际上并不在于找到临界楼层,而只是决定应该从哪个楼层掉落鸡蛋,从而使试验总数最小化。



如果我们使用二分查找法找到楼层,从第 50 层开始,那么在最坏的情况下,我们最终会进行 50 次比较。最坏的情况发生在所需楼层为 49 层时。

优化方法:想法是使用以下等式优化解决方案:

Let us make our first attempt on x'th floor. 

If it doesn't break, we try remaining (x-1) floors one by one. 
So in worst case, we make x trials.

If it breaks, we jump (x-1) floors (Because we have
already made one attempt and we don't want to go beyond 
x attempts.  Therefore (x-1) attempts are available),
    Next floor we try is floor x + (x-1)

Similarly, if this drop does not break, next need to jump 
up to floor x + (x-1) + (x-2), then x + (x-1) + (x-2) + (x-3)
and so on.

Since the last floor to be tried is 100'th floor, sum of
series should be 100 for optimal value of x.

 x + (x-1) + (x-2) + (x-3) + .... + 1  = 100

 x(x+1)/2  = 100
         x = 13.651

Therefore, we start trying from 14'th floor. If Egg doesn't break
we one by one try remaining 13 floors.  If egg doesn't break
we go to 27th floor.
If egg breaks on 27'th floor, we try floors form 15 to 26.
If egg doesn't break on 27'th floor, we go to 39'th floor.

An so on...

最坏的情况下,最佳试验次数是 14

请参阅下面的通用 k 个鸡蛋和 n 个楼层的编程解决方案。
https://www.geeksforgeeks.org/dynamic-programming-set-11-egg-dropping-puzzle/