如何在Rubik立方体上正确定位边缘,我如何才能最佳地确定?

时间:2013-06-25 18:40:44

标签: algorithm language-agnostic rubiks-cube

如果只通过旋转右,左,上和下面来解决边缘,则认为它是正确定向的。如果解决边缘需要转动前面或后面,则认为它是错误的或“坏的”。不允许旋转立方体以使正面和背面成为不同的立方体。

以下是一个例子:

example

来自here

的图片

This网站详细介绍了人类确定边缘方向的演绎方法。我想知道是否有一种更优化的方式从程序中执行它(同样,已经采取了扰乱多维数据集的步骤)。

1 个答案:

答案 0 :(得分:2)

您网站上的问题似乎已得到答案。

Look at the U/D faces. If you see:

   - L/R colour (orange/red) it's bad.
   - F/B colour means you need to look round the side of the edge. If the side is U/D (white/yellow) it is bad.


Then look at the F/B faces of the E-slice (middle layer). The same rules apply. If you see:

   - L/R colour (orange/red) it's bad.
   - F/B colour (green/blue) means you need to look round the side of the edge. If the side is U/D (white/yellow) it is bad.

所以这只是在U / D / F / B面上循环颜色的问题(或者你可以在单个边缘基础上进行),如果它们中的任何一个违反规则,你就知道边缘是坏的。这种方式只查看每个边缘一次,所以我认为它相当有效。这忽略了知道加扰算法。

简单地使用加扰算法来确定边缘方向会更加困难,因为你必须注意转弯中的模式,如果加扰足够长,这可能会比上面解释的花费更多的时间。但为了完整起见,我将简要介绍一下如何做到这一点。

  • 从所有边缘的状态和它们所在的位置开始,(因此只有12个位置,因此编号)。或者如果你只对一个轨道感兴趣,那就再说一次。
  • 然后迭代浏览列表
    • 任何时候F / B转动奇数次都会在转动的任何一个面上翻转边缘的方向。

当你将它移回到完整性时,可以向后运行以跟踪边缘的状态,如果最后你的边缘声称“错误定向”,你会知道它实际上与你开始时的状态相反(因为求解的立方体具有所有边缘定向)。

然而,这在O(n)中运行,其中n是加扰的长度,第一个在O(1)中运行,因此如果你期望非常短的加扰,则第二种方法可能更好。但是你保证第一次获得快速的结果。

我会提供伪代码,但我不认为这些算法非常复杂,我不确定如何存储数据。