这个谜题就是用机器人安排台球!
您拥有一家名为RoboRackers™的初创公司,该公司生产可以放置台球的机器人。要操作机器人,您需要给它一个模板,如下图所示。(模板只识别条纹、实体和八球之间的差异。其他数字都不重要。)
首先,机器人随机地将所有球围成木制三角形。从那里,机器人可以交换两个球的位置,或者将整个机架沿任一方向旋转120度。机器人继续执行这些操作,直到球的排列与模板匹配为止,并且它总是使用尽可能少的操作次数来完成这些操作。
使用上面给出的模板-一个标准的八球游戏的正确支架-机器人可以执行的最大操作次数是多少?什么起始位置会产生这种结果?平均手术次数如何?
额外学分:机器人使用任何模板执行的最大操作次数是多少?哪个模板和起始位置会产生此结果?
这是我的解决方案:
[显示解决方案]
考虑这个问题的一种方法是用图表。假设图中的每个顶点对应于池球的不同排列,如果可以在一次移动(交换或旋转)中从一个顶点过渡到另一个顶点,则添加一条边连接两个不同的排列。然后,问题变成:“图中哪个顶点距离目标顶点的路径长度最远?”。当两个顶点由一条边连接时,我们称它们为“邻居”。请注意,此图中的边是双向的,因为所有移动都是可逆的。
我们的一般方法是用一个整数来标记每个顶点,该整数对应于到达目标顶点所需的最小移动次数。实际上,我们正在计算所谓的图形偏心率目标顶点的。
这是一种贪婪的方法,可以实现所需的标签。
- 通过列举所有可能的唯一台球排列,并在每对分开一步的台球之间添加一条边,创建图表。
- 将目标顶点标记为“0”。然后设置$i=0$并:
- 对于标签为$i$的每个顶点,请访问其所有相邻顶点。对于当前未标记的每个邻居,为其指定标签$i+1$。
- 将$i\maps设置为i+1$,并从步骤3开始重复,直到图形中的所有顶点都已标记。
既然所有顶点都已标记,那么具有最大标记的顶点对应于那些需要最多移动才能到达的顶点。为了重建返回目标顶点的路径,我们按相反的顺序进行:
- 调用最大标签$d$。然后拾取标签为$d$的任何顶点。将其称为“当前顶点”。设置$i=d$并重复:
- 枚举当前顶点的相邻顶点,并选择标签为$i-1$的任意顶点。
- 将新选择的顶点添加到路径中,并将其设置为新的当前顶点。
- 设置$i\mapsto i-1$并从步骤2开始重复,直到达到$i=0$。
就这么简单!请注意,我们必须按相反的顺序执行第二个步骤。如果我们试图从目标开始,朝着最大标签顶点之一前进,则无法保证能够选择有效的最大长度路径,因为某些路径将以死胡同结束(它们将不是最大长度)。然而,当我们反向操作时,由于标签的构造方式,所有标签减少的路径都必须找到返回目标的路径。
我上面描述的方法是,这是解决递归定义问题的一种流行方法。
数值解
我对上述程序进行了编码,发现如下:
- 该图有51480个顶点1673106条边(耶!)。
- 每个顶点有65个邻居。这是因为从任何位置来看,有49种可能的方式交换条纹和实心球,14种方式交换八个球与其他球之一,以及2种可能的旋转。
- 一旦我们标记完所有顶点,最大的标签是$6$。这意味着最多需要六步才能达到目标安排。
- 下面是顶点上标签的分布
到目标的距离 |
0 |
1 |
2 |
三 |
4 |
5 |
6 |
顶点数 |
1 |
65 |
1253 |
9653 |
27422 |
12946 |
140 |
实际上,有140个不同的顶点与目标顶点的最大距离。我们可以将上面列出的频率除以51480,即顶点总数,将其转换为概率。然后,这就变成了概率分布。计算它的期望值,我们得到$\frac{51697}{12870}\大约4.017$。因此,假设我们从随机均匀选择的位置(顶点)开始,平均需要4次移动才能到达目标位置。下面是分布图:
最后,这里是一个可能的移动序列图,它将您从140个最坏情况的起始顶点之一带到目标顶点。
额外信贷
如果我们寻找两条路径之间的“最长最短路径”任意两个顶点在图中,我们计算的是图形的直径。这比计算特定顶点的偏心率要困难得多,因为它涉及计算所有顶点的偏心度!计算这些数字花了一个多小时,答案是……8。下面我展示了一个长度为8的最坏情况路径的示例。
事后来看,很明显直径不能大于8。为了了解原因,我们可以在8次或更少的移动中从任何位置到达任何其他位置。你可以这样做。首先,交换八个球,把它移到正确的位置。这最多需要一步。现在,考虑剩下的七个实体和七个条纹。在最坏的情况下,它们都不合适。因此,最多需要7次额外的掉期才能修复,总共需要8次。
注意,在这个论点中,我没有使用任何旋转!这意味着我们总是可以在8个动作中从一个配置切换到另一个配置,而不需要使用旋转。因此,如果两种构型之间的最短路径长度为8,那么也存在一条不使用旋转的最短道路。在上面的8长度解决方案中,我选择了一个没有任何旋转的解决方案。然而,在其他情况下,旋转很重要。例如,在最初实现八球配置的问题中,如果我们不允许旋转,那么解的长度将是8而不是6。