15拼图启发式算法

15 Puzzle(15拼图)是一个经典的用于建模涉及启发式算法的问题。该问题常用的启发式算法包括计算错位瓷砖的数量,以及查找每个方块与其在目标配置中的位置之间的曼哈顿距离之和。请注意,两者都是可采纳的,即它们永远不会高估剩余的步数,这确保了某些搜索算法(如A*)的最优性。

  • 你认为哪个Heuristic(启发式)方法更合适?A* 算法似乎效果不错,你有例子吗?也许用 cjava 实现的?

回答:

启发式算法

我选择的启发式方法是确定排列中所有逆序数之和是奇数还是偶数——如果是偶数,则15拼图有解。

一个排列中的逆序数等于其逆排列的逆序数(Skiena 1990, p. 29; Knuth 1998)。

只有当我知道它能够被解决时,解决它才有意义。 因此,任务就是减少逆序数,然后问题就解决了。 找到解决方案应该不超过80步。

更多帮助

排列的公式是:

enter image description here

0到16范围内的阶乘是{1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800, 479001600, 6227020800, 87178291200, 1307674368000, 20922789888000}。 如果你需要更多阶乘,请在 WolframAlpha 中搜索 Range[1,20]!

如果你想了解更多相关信息,请阅读:15Puzzle

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注