【问题标题】:Heuristic for shifting array移动数组的启发式
【发布时间】:2014-05-22 08:53:12
【问题描述】:

给定一个目标状态

int final[3][3]={{1,2,3},
                 {4,5,6},
                 {7,8,9}};

和一个随机的初始状态,我只想通过移动表格的行(右或左)和列(上和下)来将我的数组排序为最终状态

   7 8 4    by shifting to the right the first row it will become 4 7 8
   2 1 9                                                          2 1 9
   6 5 3                                                          6 5 3

所以我想使用 * 搜索并且我正在尝试找到一个好的启发式方法。

我已经尝试过使用错位的数组元素。

有什么建议吗?

【问题讨论】:

  • 继续努力。思考。喝咖啡。做笔记。再试一次。重复。

标签: c a-star heuristics


【解决方案1】:

我认为这是一个代数问题。你得到一组由 6 个循环(3 行和 3 列)生成的排列,你想找到更多的动作来帮助你得到任何排列。

第一个建议:并非所有排列都是可能的!由于每个移位都是偶数排列(3 个循环是两个转置的组合),因此只有偶数排列是可能的。因此,您将找不到任何解决方案来解决所有问题,但只有两个交换的数字,如 (2,1,3),(4,5,6),(7,8,9)。

第二个建议。如果 r 是行移位且 c 是列移位,则计算 rcr'c' 的作用,其中 r' 和 c' 是反向移位。这个“换向器”又是 3 个元素的循环,但这次它们不在一行或一列中。通过选择不同的 r 和 c,你会得到很多 3-cycles,可以在第三个建议中使用。

第三条建议。考虑已经处于最终位置的数字区域。对这组的补码应用 3 个循环以减少它,直到找到解决方案。

【讨论】:

  • 我的想法是,如果我扩展初始数组的树,我将有 12 个可能的移动(移位)要做,所以我会选择 f=g+h 最小的那个。现在,我的第一个问题是找到更好的启发式算法,第二个问题是如果我使用 4x4 数组或 5x5 数组,我该如何计算 g 成本。
  • 我不知道 f,g,h 是什么...我的建议是从抽象的数学角度研究这个问题,而不是在可能的移动树中盲目搜索。
猜你喜欢
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多