指数:如何面对复杂
原创大约 2 分钟
寻找罪犯
和棋盘麦粒问题一样,纸张对折问题
也让很多人大感意外:原来厚度1mm(毫米)
的A4
纸,在对折39次后的厚度,就超过了从地球到月球的距离。
其实,这两类问题有一个共同的因素在起作用,那就是指数爆炸。
指数爆炸是一种数值急剧增长的情况,它在几何上的线条图形如果放大了看,几乎和Y轴
平行。
这种由指数爆炸引发的问题,在开发中也存在。

在目前大多数的软件中,包括互联网软件,都有这样的选项设置功能。例如,IDEA的设置就有大几百个。
假设上图中的这几个复选框按照不同设置组合,程序会执行不同的功能。那么如果程序有30个这样设置项的话,就需要执行230 = 1073741824(10亿7374万)次不同的测试,这就是典型的指数爆炸问题。
所以,只要是存在倍数
和组合
的地方,就存在指数爆炸。
幸亏IDEA通过将不同的设置划分为不同的类别,破坏了指数爆炸存在的条件,才得以让工程师们使用顺畅。
但如果没有任何类别可以划分,非得从存在倍数
和组合
的地方找出解药
来,怎么办呢?
例如,有23位嫌疑人排成一排,但他们中只有一位才是真正的罪犯,需要通过讯问
的方式找到犯人。
规则是这样的(假定每次讯问
嫌疑人讲的都是实话):假设任意选择其中一人问犯人在哪里?
,会得到以下3种答案,只有1个是正确的。
我是犯人
。犯人在我右边
。犯人在我左边
。
这时,其实只需要通过4次讯问
,就能知道谁是犯人——只要从最中间的那位嫌疑人开始,利用指数爆炸的特性,以折半查找法就能迅速锁定罪犯。

如果不使用这种方式,当超过30人时,就得讯问
30次。
也就是说,经过n次
尝试,就可以在
感谢支持
更多内容,请移步《超级个体》。