其中一个经典的编程面试问题......
给你两个大理石,并告诉他们从某个高度下降时会破裂(如果从那个高度以下掉落,可能不会受到伤害).然后你被带到一座100层高的建筑物(大概高于一定的高度),并要求找到最高的楼层,你可以尽可能高效地将大理石从大地上掉下来.
额外信息
这个问题(为了确定这样一只猫能活下来的最大楼层,你需要抛出多少只猫才能生存下来.实际上相当残忍),O(n ^ 3)复杂度已经得到了答案.这个问题等同于这个Google Code Jam,它应该可以解决N = 2000000000.
似乎O(n ^ 3)解决方案不足以解决它.从查看解决方案页面,jdmetz的解决方案(#2)似乎是O(n log n).我不太了解算法.有人可以解释一下吗?
编辑
这是问题描述:
假设我们想知道N层建筑中的哪些故事可以安全地从中掉落鸡蛋,哪些会导致鸡蛋在着陆时破裂.我们做了一些假设:可以再次使用在摔倒后存活的鸡蛋.
给定一个N层建筑和一个鸡蛋供应,找到最小化(在最坏的情况下)确定断裂所需的实验滴数的策略.
我已经看到并解决了2个鸡蛋的问题,其中答案是14 = N = 100.我尝试使用DP了解wiki的通用解决方案,但无法理解他们想要做什么.请告诉他们他们是如何到达DP以及它是如何工作的?
编辑:
本条中给出的最高流量可用d滴和e蛋测试的复发如下:
f[d,e] = f[d-1,e] + f[d-1,e-1] + 1
Run Code Online (Sandbox Code Playgroud)
复发很好,但我无法理解它是如何衍生出来的?
这个解释对我来说并不清楚....我只是希望有人用更清晰的话语向我解释这种情况.
我正在阅读Robert Sedgewick的算法第4版,他有以下任务:
假设你有一个N层建筑和2个鸡蛋.假设如果鸡蛋被扔掉F楼或更高楼层,鸡蛋就会被打破,否则就会破裂.您的成本模型是投掷次数.设计一个策略来确定F,使某些常数c的投掷数量为~c√F.
任务的第一部分是在2√N步骤中找到F,这是一个解决方案:
第1部分的解决方案:
他还提供了~c√F部分的提示(第2部分):
第2部分的提示:1 + 2 + 3 + ... k~1/2 k ^ 2.
那么~c√F步骤的算法是什么?
algorithm search dynamic-programming binary-search divide-and-conquer