跪求解决方案
跪求算法解答
某公司大楼有n层,为了测出哪层楼最高,可以用一种仪器从天花板向地板自由落体(当然仪器并不会摔坏)。如果有两个一模一样的仪器,你是否能够设计一个由于线形效率的算法来帮助该公司解决问题。
算法设计与分析基础 chapter 3.2 习题
[解决办法]
从后往前考虑:
1,如果不破,最后一次是尝试N层
2,在尝试N层前是N-1层
在尝试N-1层时,有两种结果:损坏/没损坏
损坏时,尝试N-1层前的没尝试过的最低楼层
没损坏时,尝试N-1层后的没尝试过的低楼层,即N层
让两种情况最坏尝试次数相同,那N-1层前只能有一层未尝试,即前一次是在 N-3的位置
3,考虑N-3层,如果这层未损坏,后面需要尝试2次,那N-3层损坏,也只能是2层位尝试,即上一次尝试的是N-3-2 = N-5层
...
当前尝试的是K层时,先计算K层不损坏时,后面的最大尝试次数M,上一次尝试的楼层应该为K-M
当K-M小于等于1时,尝试楼层为1层,结束。
[解决办法]
第一次到k楼去测,如果摔坏了,只有从1,2,...k-1一个个去测,如果没有坏
第二次到k+(k-1)楼去测,如果摔坏了,只有从k+1,k+2,...k+(k-2)一个个去测,如果没有坏
第三次到k+(k-1)+(k-2)楼去测,如果摔坏了,只有从k+(k-1)+1,k+(k-1)+2,...k+(k-1)+(k-3)一个个去测,如果没有坏
。。。
最后到k+(k-1)+(k-2)+...+1楼去测
有k+(k-1)+(k-2)+...+1>=n,可得到k,即平均测试次数为k次