我正在尝试使用具有3种不同启发函数的A *算法来解决N难题。我想知道如何在时间复杂度方面比较每个启发式方法。我使用的启发式方法是:曼哈顿距离,曼哈顿距离+线性冲突,N-max交换。特别是8拼图和15拼图。
答案 0 :(得分:1)
一般来说,N-puzzle很难找到最短的解决方案,所以无论你使用哪种启发式方法,你都不可能在它们之间找到任何复杂性差异,因为你不会被证明任何束缚的紧张。
如果你将自己限制在8-puzzle或15-puzzle中,带有任何可允许启发式的A *算法将在O(1)时间内运行,因为有一个有限(尽管很大)的棋盘位置。
答案 1 :(得分:1)
正如@Harold在他的评论中所说的那样,通过实验测试来比较启发式函数的时间复杂度。在您的情况下,为8-puzzle和15-puzzle生成一组 n 随机问题,并使用不同的启发函数解决它们。需要注意的是:
比较将始终取决于几个因素,例如硬件预测,编程语言,实施算法时的技能,......
一般来说,更明智的启发式方法总是会比不太知情的方法扩展节点,并且可能会更快。
最后,为了比较每个问题集的三个启发式算法,我建议使用平均运行时间的图形(例如每个问题重复5次),其中:
以及与探索状态数量相似的图形。