关于改进版IDDFS(深度翻倍)最坏情况效率的疑问
关于改进版IDDFS最坏情况效率的解释
要理解为什么改进版IDDFS(深度限制按1、2、4、8...翻倍)在最坏情况下比标准IDDFS效率更低,核心在于两者遍历的总节点数差异——IDDFS的本质是每次迭代都从根节点重新遍历到当前深度限制,因此总遍历量是各次迭代遍历节点数的总和。
我们用具体场景分析:假设目标节点位于深度d,且d刚好是某两个翻倍深度之间的最大值(比如d=7,刚好小于下一个翻倍值8)。
标准IDDFS的遍历总节点数
标准IDDFS的深度限制依次为1、2、3、4、5、6、7,每次迭代遍历所有深度≤当前限制的节点:
- 第1次(限制1):遍历深度0-1的节点,共
1 + b个(b为分支因子) - 第2次(限制2):遍历深度0-2的节点,共
1 + b + b²个 - ...
- 第7次(限制7):遍历深度0-7的节点,共
1 + b + b² + ... + b^7个
总遍历节点数是这7次的总和。
改进版IDDFS的遍历总节点数
改进版的深度限制依次为1、2、4、8,每次迭代:
- 第1次(限制1):同标准,
1 + b个 - 第2次(限制2):同标准,
1 + b + b²个 - 第3次(限制4):遍历深度0-4的节点,共
1 + b + ... + b^4个 - 第4次(限制8):遍历深度0-8的节点,共
1 + b + ... + b^8个
总遍历节点数是这4次的总和。
对比两者的总节点数
以分支因子b=2为例:
- 标准IDDFS总节点数:
3 + 7 + 15 + 31 + 63 + 127 + 255 = 501 - 改进版IDDFS总节点数:
3 + 7 + 31 + 511 = 552
显然改进版遍历的节点更多,效率更低。原因在于:
- 改进版最后一次迭代的深度限制(8)远大于目标深度(7),额外遍历了深度8的所有节点,这部分是标准IDDFS不需要的。
- 标准IDDFS的中间迭代是逐步增加深度,每次仅多遍历一层节点;而改进版跳过了3、5、6、7这些中间深度,最后一次迭代一次性覆盖了这些深度+额外的深度8,导致总重复遍历+新增遍历的节点量超过标准IDDFS。
对于更一般的情况,当目标深度d接近某个2^m时,改进版的最后一次迭代会遍历到2^m层,而标准IDDFS仅遍历到d层,额外的2^m - d层节点会大幅增加总遍历量,最终导致改进版效率更低。
内容的提问来源于stack exchange,提问作者rum_15
相关产品推荐
相关产品推荐

