我不明白IDA*
如何节省内存空间。
从我的理解IDA*
是A*
迭代加深。
A*
使用的内存量与IDA*
之间的差异有多大。
IDA*
的最后一次迭代是否与A*
完全相同,并使用相同数量的内存。当我跟踪IDA*
时,我意识到它还必须记住低于f(n)
阈值的节点的优先级队列。
我知道ID-Depth第一次搜索有助于深度优先搜索,允许它首先像搜索一样进行广度,而不必记住每个节点。但我认为A*
已经表现得像深度一样,因为它忽略了沿途的一些子树。迭代加深如何使用更少的内存?
另一个问题是使用迭代加深的深度优先搜索允许您通过使其首先表现为宽度来找到最短路径。但A*
已经返回最佳最短路径(假设启发式是可接受的)。迭代加深如何帮助它。我觉得IDA *的最后一次迭代与A*
相同。
答案 0 :(得分:11)
在IDA*
中,与A*
不同,您不需要保留一组您打算访问的暂定节点,因此,您的内存消耗仅专用于递归的局部变量功能
虽然这种算法的内存消耗较低,但它有自己的缺陷:
与A *不同,IDA *不使用动态编程,因此通常最终会多次探索相同的节点。 https://www.linkedin.com/developer/apps/APP_ID/mobile
仍然需要为您的案例指定启发式函数,以便不扫描整个图形,但每个时刻所需的扫描内存只是您当前正在扫描而没有其周围节点的路径。
以下是每种算法所需内存的演示:
在A*
算法中,所有节点及其周围节点都需要包含在“需要访问”列表中,而在IDA*
中,当您到达时,您会“懒洋洋地”获得下一个节点它的预览节点,因此您不需要将其包含在额外的集合中。