问题:
有一栋100层高的大楼,给你两个完全相同的玻璃球。假设从某一层开始,丢下玻璃球会摔碎。
那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层?
解决:每次m层尝试都是由低的楼层往高的楼层尝试,知道f(k),第一个小球已经破掉,记录上次尝试的楼层为f(k-1),在此楼层玻璃球不会碎,所以接下来要尝试 f(k-1)+1,f(k-1)+2,f(k-1)+3, ....直到有一层玻璃球破碎,就有解了。
转化成数学问题:假设第一次投掷的层数是f,转化成数学模型,f+(f-1)+...+2+1就表示从f开始猜,每次的增量都比前一次的曾量减1的情况下,最后猜的那个数(即 f+(f-1)+...+2+1 ),按照提议要求f+(f-1)+...+2+1>=99,即f(f+1)/2>=99(第一次测试点选择100层是无意义的,必然会碎,所以无任何测试价值,所以第一次测试点k是1-99中的一个数),解出结果等于14。丢下第一颗鸡蛋的楼层就分别是 14 , 27 , 39 , 50 , 60 , 69 , 77 ,84 , 90 , 95 , 99 。
验证:比如到27层,玻璃碎了,则要从15开始一层一层的尝试,比如26是解的话,那么猜的序列就是 14,27,15,16,17,18,19,20,21,22,23,24,25,26,一共14次。