Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 人工智能:IDA*搜索的时间复杂性_Algorithm_Time Complexity_Artificial Intelligence_A Star_Iterative Deepening - Fatal编程技术网

Algorithm 人工智能:IDA*搜索的时间复杂性

Algorithm 人工智能:IDA*搜索的时间复杂性,algorithm,time-complexity,artificial-intelligence,a-star,iterative-deepening,Algorithm,Time Complexity,Artificial Intelligence,A Star,Iterative Deepening,我正在研究知情搜索算法,对于迭代深化A*搜索,我知道空间复杂度是O(d),其中d是最浅目标节点的深度。我试图找出它的时间复杂度是什么,但我无法在在线资源中找到任何关于它的确切信息。IDA*搜索的确切时间复杂度未知吗?任何见解都将不胜感激。 时间复杂度:O(b^d) 空间复杂度:O(d) b:分支因子 d:第一解的深度 你可以找到时间复杂度的证明和例子。IDA的时间复杂度*:在IDA*你不能笼统地说它是O(b^d)时间。时间复杂度不同于在二叉树、不平衡树或具有圆或无限图的图中搜索。 因此,这首先

我正在研究知情搜索算法,对于迭代深化A*搜索,我知道空间复杂度是O(d),其中d是最浅目标节点的深度。我试图找出它的时间复杂度是什么,但我无法在在线资源中找到任何关于它的确切信息。IDA*搜索的确切时间复杂度未知吗?任何见解都将不胜感激。

  • 时间复杂度:O(b^d)
  • 空间复杂度:O(d)

  • b:分支因子

  • d:第一解的深度

你可以找到时间复杂度的证明和例子。

IDA的时间复杂度*:在IDA*你不能笼统地说它是O(b^d)时间。时间复杂度不同于在二叉树、不平衡树或具有圆或无限图的图中搜索。 因此,这首先取决于搜索环境。现在,时间也将取决于需要扩展的节点数量,这取决于您将有多少次迭代,这取决于您使用的启发式以及启发式函数将给出多少不同的值。启发式给出的不同值越多,IDA*将进行的迭代就越多。检查伪代码以查看,每次迭代中的f(n)值大于实际阈值时,它都会重新启动迭代

在最坏的情况下,您必须进行所有可能的扩展和所有迭代,直到树的最深处。这可能在二叉树或不平衡树中以不同的方式发生

Richard E.Korf,《迭代-深化-A的时间复杂性》∗ (2001):“IDA的运行时间∗ 通常与展开的节点数成比例。 这取决于最优解决方案的成本,以及暴力中的节点数 搜索树和启发式函数。”

IDA的空间复杂度*:O(d)空间不是正确的估计,即使对于IDDF也是如此。空间复杂度可以用同样的方法来估计,因为它们使用深度优先搜索,而深度优先搜索所需的内存要比BFS甚至a*少得多——事实上,这就是开发IDA*的原因。树的空间复杂度为O(bd),因为您总是只存储算法在迭代中探索的实际路径,在最坏的情况下可能是树的“最深”点,或者说树的底部。在此之前,您必须存储已扩展的所有节点,即分支因子乘以树的“最深级别”=b*d。所以它是O(bd)

使用source查看IDA*的创建者自己是如何进行估算的


注意:@David Speck之前的答案甚至不是针对IDA*的,而是针对迭代深化深度优先搜索(IDDFS)。IDA*使用启发式来指导搜索,IDDFS没有,IDDFS是一种蛮力搜索技术,它们不一样。

所以本质上,IDA*的时间复杂度与迭代深化深度优先搜索相同?