我正在研究明智的搜索算法,对于迭代加深A *搜索,我知道空间复杂度为O(d),其中d是最浅目标节点的深度。我试图找出它的时间复杂度是什么,但我一直没能找到关于在线资源有关的任何确切信息。 IDA *搜索的确切时间复杂度是否未知?任何见解都会受到赞赏。
答案 0 :(得分:0)
空间复杂度:O(d)
b:分支因子
您可以找到时间复杂度here的证明和示例。
答案 1 :(得分:0)
IDA的时间复杂度 *:在IDA *上,您不能一概而论地说现在是O(b ^ d)时间。时间复杂度不同于在二叉树,不平衡树或具有圆形或无限图等的图形中进行搜索。 因此,这首先取决于搜索环境。现在,时间还将取决于必须扩展多少个节点,这取决于将要进行的迭代次数,这取决于您使用的启发式方法以及启发式功能将给出多少个不同的值。启发式值越多,IDA *进行的迭代就越多。检查伪代码以查看是否每当f(n)值大于一次迭代中的实际阈值时,它就会重新开始迭代。
在最坏的情况下,您必须对树的最深处进行所有可能的扩展和所有迭代。这在二叉树或不平衡树中可能以不同的方式发生。
Richard E. Korf,迭代加深-A ∗的时间复杂度(2001):“ IDA ∗的运行时间通常与扩展的节点数成正比。 这取决于最佳解决方案的成本,蛮力中的节点数 搜索树和启发式功能。”
IDA的空间复杂度 *:即使对于IDDFS,O(d)空间也不是正确的估计。两者的空间复杂度可以用相同的方式估算,因为它们使用深度优先搜索,而深度优先搜索所需的内存比BFS甚至A *少得多-实际上,这就是开发IDA *的原因。对于树,空间复杂度将为O(bd),因为您始终仅存储算法在迭代中探索的实际路径,也就是说,在最坏的情况下,它可能是树的“最深”点,或者说是树的底部。那个树。在那之前,您必须存储所有已扩展的节点,即分支因子乘以树的“最深层” = b * d。所以是O(bd)。
使用this来源查看IDA *的创建者本人如何进行估算。
注意:@David Speck先前的答案甚至不是针对IDA *,而是针对迭代加深深度优先搜索(IDDFS)。 IDA *使用启发式方法来指导IDDFS不执行的搜索,IDDFS是一种蛮力搜索技术,它们并不相同。