Algorithm 两个鸡蛋掉落拼图变奏:未知/无限楼层

Algorithm 两个鸡蛋掉落拼图变奏:未知/无限楼层,algorithm,language-agnostic,time-complexity,Algorithm,Language Agnostic,Time Complexity,前言 这个问题是受上周一个类似问题的启发,所以在真正的问题是什么之前就被删除了。我认为这种变化是一个很好的问题,我想与大家分享 两个鸡蛋问题 可以找到详细的定义和解决方案,但我将添加一个快速摘要: 定义 你有两个鸡蛋,可以进入一幢k层高的大楼。两个蛋 都是一样的。目的是找出最高层f*,其中 鸡蛋从那层楼的窗户掉下来是不会碎的。如果 鸡蛋掉落并且不会破裂,它完好无损并且可以掉落 再一次。然而,一旦一个鸡蛋破了,这就是它的蛋。找到f*的fastes(最小滴数)方法是什么 解决方案 这个想法是把第一个

前言

这个问题是受上周一个类似问题的启发,所以在真正的问题是什么之前就被删除了。我认为这种变化是一个很好的问题,我想与大家分享

两个鸡蛋问题

可以找到详细的定义和解决方案,但我将添加一个快速摘要:

定义

你有两个鸡蛋,可以进入一幢
k
层高的大楼。两个蛋 都是一样的。目的是找出最高层
f*
,其中 鸡蛋从那层楼的窗户掉下来是不会碎的。如果 鸡蛋掉落并且不会破裂,它完好无损并且可以掉落 再一次。然而,一旦一个鸡蛋破了,这就是它的蛋。找到
f*
的fastes(最小滴数)方法是什么

解决方案

这个想法是把第一个鸡蛋从地板上扔下来
sqrt(k),2*sqrt(k),3*sqrt(k)。。。k
。如果蛋在楼层
i*sqrt(k)
处破裂,使用第二个蛋测试
(i-1)*sqrt(k)
i*sqrt(k)-1之间的剩余楼层。总体而言,这将导致最多
2*sqrt(k)
下降,因此复杂性将
O(sqrt(k))

为了完整性:有一种方法在最坏的情况下下降较少(可以找到详细信息),但其复杂性与
O(sqrt(k))

问题:具有无限/未知楼层的两个鸡蛋问题

现在假设您没有关于楼层数的信息
k
k
是无限的。是否有可能发现
f*
比只在
O(f*)
中测试每个楼层更有效


换句话说:是否有一种有效的方法来丢弃运行时复杂度与
k
无关但仅取决于答案
f*
?有一种简单的方法具有O(sqrt(f*)复杂度。将第n步设置为向上n层,即检查第1层、第3层(1+2层)、第6层(1+2+3层)等。这样,在第n步中,您将位于n*(n+1)/2层,并且您将在n=O(sqrt(f*)步中到达f*

然后,对于第二个鸡蛋,您需要在第1阶段的最后一个步骤上执行n个单步,这将添加另一个O(sqrt(f*))


如果O(sqrt(k))对于已知的k是最优的,那么该方法在复杂性方面也必须是最优的。

对于两个蛋的无限问题,次优解是使用序列
1,2^2,3^3,i^2,…
并从第二条边开始,第一个鸡蛋保留的最后一个值。因此,如果第一条边保持在
n^2
,那么下一条边将最多进行
2*n+1-1
(从第一条边减去1)测试,以得出在
n=sqrt(m)
的最坏情况下
3*n
的总数