一幢大楼共计100层,某种类型的鸡蛋从某一楼层及其以上楼层摔下来时会被打破,从该层楼(即临界楼层)以下楼层摔下该鸡蛋,鸡蛋不会出现破损。现给你2个完全一样的该种类型的鸡蛋,问:如何通过这2个鸡蛋找到该临界楼层?
答:不能用二分法:如果一个鸡蛋在50层碎了,另一个就要从最下面一层一层往上试。
我们大胆地估计一下,如果把100分成10段,那么要找到临界楼层,我们大致最多需要20次测试,我们通过2,12,22,32,...,不断地试探,确定了某个区间,就进入该区间逐个测试。试看:如果临界楼层在10层一下,我测试2楼的时候鸡蛋正常,测试12楼的时候鸡蛋破了1个鸡蛋,我们就回头从3楼,4楼测试到11楼,直到第2个鸡蛋被摔破,就测试出来了(如果鸡蛋不摔破,那么临界楼层就是第12楼),总共试探了11次。同理,如果临界楼层在90几楼,那么,我们从2,12,22,32,...,不断测试应该不超过20次就可以测试出来。到目前为止我们已经取得比较好的结果了。
我们可以不以平均一下,不管临界楼层是在2~12之间还是90~100之间都能在一个比较平均的测试次数下面来把它测试出来呢?试想,我们在90几的临界楼层时,区间大小如果都是固定的,那么对于临界楼层比较大的情形,就多产生了测试次数。我们很容易就想到,可以设想,让区间大小从前往后,逐步减少,让相邻的两个区间,楼层较低的区间段比楼层号较高的区间段多1,这样就保证了无论临界楼层在哪个区间段,我们总能通过同样的试探次数将能将其找出来,平均来说是最优的方案。