【发布时间】:2018-04-16 07:25:48
【问题描述】:
前言
这个问题的灵感来自上周关于 SO 的一个类似问题,该问题在明确真正的问题是什么之前就被删除了。我认为这种变化是我想分享的一个很好的问题。
两个鸡蛋问题
详细的定义和解决方法可以在here找到,不过我会加个小结:
定义
您将获得两个鸡蛋,并可以使用
k-层建筑物。两个鸡蛋 是相同的。目的是找出最高楼层f*鸡蛋从那层楼的窗户掉下时不会破裂。如果 鸡蛋掉下来不破,完好无损,可以掉下来 再次。然而,一旦一个鸡蛋被打破,那就是那个鸡蛋。找到f*的最快(最少滴)方法是什么?
解决方案
这个想法是从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))。
为了完整起见:有一种方法在最坏的情况下掉线更少(详情可以在here找到),但它的复杂度与O(sqrt(k))相同
问题:无限/未知楼层的两个鸡蛋问题
现在假设您没有关于k 或k 是无限的楼层数的信息。是否有可能找到f* 比仅在O(f*) 中测试每个楼层更有效?
换句话说:有没有一种有效的方法来丢弃运行时复杂度与k无关但只取决于答案f*的两个鸡蛋?
【问题讨论】:
标签: algorithm language-agnostic time-complexity