求解NxNxN Rubik立方体的算法

时间:2014-01-16 00:43:52

标签: algorithm rubiks-cube

我想为Rubik的任何大小的立方体编写cubesolver。

我知道如何解决大于3x3x3的立方体的问题:

  • 首先我们需要解决立方体的中心(平面)字段,因此它们看起来就像图片一样。

Cube with solved centers

  • 其次,我们解决了问题:

Cube with solved edges

  • 最后,我们可以将整个问题减少到解决3x3x3立方体:

4x4x4 cube reduced into 3x3x3 cube


这听起来很容易,但问题是解决中心和边缘的方法取决于立方体大小。对于求解中心和边缘的3x3x3算法有0个移动,对于4x4x4它更长,而对于5x5x5它甚至更长。

但我该如何计算这些动作?有什么简单的方法吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以将此视为群论中的练习,将每种移动视为排列。然后,您需要确定多维数据集的加扰顺序是否等于某些顺序中某些可用排列的乘积,如果是,那么该顺序是什么。

事实证明,有一些算法可以解决这个问题,还有一些非常复杂的计算机软件包可以实现它们。对于包和主题,一个起点是http://en.wikipedia.org/wiki/Computational_group_theory

可执行算法的一个参考是Knuth在http://arxiv.org/pdf/math.GR/9201304.pdf。我已经实现了这个版本,所以它是可行的,但是论文很密集 - 请参阅我在Regarding approach to solving sliding tiles puzzle的引用。如果你比我更了解群论,你将能够阅读更密集的论文并实现更有效的算法。哦 - 如果你完成论文,你首先应该能够找到问题是否可以解决,然后,理论上,找到一系列解决它的排列,但这个序列可能不切实际。

这个特殊的算法与你上面概述的方案没有完全不同,因为它寻找可用移动的组合,使一些对象被置换固定,同时将另一个对象恢复到适当的位置。 / p>