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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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