这就意味着,穷举搜索的方式不仅能保证在问题可解的时候寻找到问题的解,还能保证寻找到问题的最优解。另外,作为计算机的算法,穷举搜索非常简单——编写一个程序来实现它非常容易。
不过,哪怕我们只是粗略研究图4所示的片段都能够看出来,如刚才所描述的那样,采用穷举搜索的方式来解决问题是个相当愚蠢的过程。比如,仔细看看搜索树最左边的分支,仅仅移动两步以后,问题又返回到了初始状态,这是在无谓地浪费精力。如果是你来研究解决汉诺塔问题,可能会在寻找解决方案的时候犯一两次类似的错误,不过你会很快发现问题所在,并且学会避免做一些徒劳的移动。然而,一台简单执行穷举搜索的计算机却无法做到:它只能穷举出所有移动下的所有新状态,哪怕某些穷举步骤就是在浪费时间,它也会走回头路,回到已经被确认过失败的状态。
除了太多重复和低效率以外,穷举搜索还有一个根本的问题。如果你做过一些实验,会发现在大部分状态下,汉诺塔问题都有三种移动的可能性,即分支因子为3。不同的问题对应着不同的分支因子。比如,围棋的分支因子为250,这就意味着在游戏给定的任意状态下,每个玩家约有250种落子的可能性,当然,这只是平均值。所以,我们来看看搜索树随着分支因子能增长到多大——对确定了分支因子数的搜索树,在不同层级有多少种状态。以围棋为例[24]: