百度面试题 :玻璃球 临界值

来源:互联网 发布:淘宝平价女装 编辑:程序博客网 时间:2024/06/11 19:53

 题目如下:“有一个100层高的大厦,你手中有两个相同的玻璃围棋子。从这个大厦的某一层扔下围棋子就会碎,用你手中的这两个玻璃围棋子,找出一个最优的策略,来得知那个临界层面。”


解答:

(1)等分段求最小值:这种算法先假设把大楼分成等高的 x 段,这样在最差的情况下,要确定临界段,我们需要投掷 100/x-1 次,确定了临界段之后要确定临界层,我们需要再投掷 x-1 次。这样,问题就成了求函数 f(x)=(100/x-1)+(x-1) 的最小值问题。由于 f(x) 存在最小值且只有一个驻点,所以当 x=10 时 f(x) 取得最小值,最小值为18。

(2)上述解法并不是最优的,随着临界段的提高,我们搜索临界段的次数增加,但是在临界段内搜索临界层的次数却是一个常数,所以临界段越高,总的搜索次数就越多。那么我们能不能这么考虑,随着临界段搜索次数的增加(每次增加1),如果我们能够让在此临界段内搜索临界层的搜索次数减1,那么就可以保证在任何一个临界段,搜索次数都保持不变。设第一次投掷从第x层开始,那么在第一个临界段内搜索临界层的次数总和是 1+(x-1)=x。为了保证第2次总的搜索次数也为x,我们设第二次从第y层开始,要求:1+(y-x)=x,从而y=2x-1  (2x=x+(x-1))。第三次搜索从z开始,为保证总的搜索次数也为x,要求:2+(z-(2x-1))=x,从而z=3x-3  (z=x+(x-1)+(x-2)),以此类推,最终的投掷高度:last=x+(x-1)+(x-2)+..1>=100, x=13.6 即14次





0 0
原创粉丝点击