15 Puzzle
(15拼图)是一个经典的用于建模涉及启发式算法的问题。该问题常用的启发式算法包括计算错位瓷砖的数量,以及查找每个方块与其在目标配置中的位置之间的曼哈顿距离之和。请注意,两者都是可采纳的,即它们永远不会高估剩余的步数,这确保了某些搜索算法(如A*)的最优性。
- 你认为哪个
Heuristic
(启发式)方法更合适?A*
算法似乎效果不错,你有例子吗?也许用c
或java
实现的?
回答:
启发式算法
我选择的启发式方法是确定排列中所有逆序数之和是奇数还是偶数——如果是偶数,则15拼图有解。
一个排列中的逆序数等于其逆排列的逆序数(Skiena 1990, p. 29; Knuth 1998)。
只有当我知道它能够被解决时,解决它才有意义。 因此,任务就是减少逆序数,然后问题就解决了。 找到解决方案应该不超过80步。
更多帮助
排列的公式是:
0到16范围内的阶乘是{1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800, 479001600, 6227020800, 87178291200, 1307674368000, 20922789888000}。 如果你需要更多阶乘,请在 WolframAlpha 中搜索 Range[1,20]!
如果你想了解更多相关信息,请阅读:15Puzzle。