迭代加深
深度优先搜索是选择一个分支,直到尽头才会开始回溯。但在遇到搜索树的每个节点的分支数目非常多,并且答案其实只是在很浅的节点上。那么如果在一开始深搜选错了分支,就很可能在不包含答案的深层子树上浪费大量的时间。
那么此时,我们就可以使用迭代加深的思想,从小到大限制搜索的深度。如果在当前深度限制下搜索不到答案,那么就增加深度,重新进行一次搜索。
虽然理论上重新搜索的代价似乎是挺不必要的,但是随着层数的深入,每层节点数会呈指数性增长。这点重复量和深层子树的规模相比,不值一提。
总之,当搜索树规模随着层次的深入增长很快,并且我们能够确保答案在一个较浅层的节点时,就可以用这个技巧。