问题是要产生十五岁以上的'不同大小的谜题,确保所有谜题都是可以解决的。有关测试可解决难题的信息,请参阅Wikipedia或Wolfram。
天真的随机播放方法包括(a)模拟大量的随机动作(b)以某种方式改组,检查是否有效,如果没有则修复。另请参阅How can I ensure that when I shuffle my puzzle I still end up with an even permutation?。
最佳随机播放将(a)以相同的概率产生每个可能的可解决的拼图(b)执行不超过N个交换,其中N是瓦片的数量,并且最有可能(c)在每次交换之后使拼图可解决。
有这样的方法吗?
有一种众所周知的方法,使用步骤(1)Knuth或类似的shuffle(2)测试有效性(3)如果需要再做一次交换。这相当于3个独立的算法,并且(因为步骤3)不会产生具有完全相等概率的所有可能的可解决难题。如果没有方法满足要求,那么就应该有一个证据来证明这一点。
经过进一步思考,步骤3可能不会损害洗牌的分布,但它确实(a)使洗牌的总数不确定(b)需要额外的测试。在目标应用程序中,执行该测试的逻辑不可用。
因此,问题可以重新拟定为找到一组最小的掉期,这些互换产生了每次可能的有效混乱,且概率相等。最终结果必须是可解决的难题,无需测试可解性。假设所需的掉期数量为N-1。
答案 0 :(得分:3)
有一种众所周知的方法,使用步骤(1)Knuth或类似的shuffle(2)测试有效性(3)如果需要再做一次交换。这相当于3个独立的算法,并且(因为步骤3)不会产生具有完全相同概率的所有可能的可解决难题。
我认为你的结论是错误的。这是一个3步法:
首先,通过交换瓦片1和2获得可解决网格和不可解决网格之间的双射。显然,步骤(1)中的混洗产生具有相同概率的所有网格,但是这些网格中只有一半是可解的。因此,如果我们将双射应用于所有不可解析的网格,那么我们将在可解决的网格上保持均匀分布。 (对于任何给定的可解决网格,有两种方法可以“结束”:将网格混洗到该状态,或者将网格混洗到其唯一的相应不可解析状态。显然,对于每个可解决的网格,这种情况都是相同的。)< / p>
来自Wikipedia article on the 15 puzzle:
不变量是所有16个方格的排列的奇偶性加上从右下角开始的空方格的出租车距离(行数加上列数)的奇偶校验。这是一个不变量,因为每次移动都会改变排列的奇偶性和出租车距离的奇偶性。特别是如果空方块位于右下角,那么当且仅当剩余部分的排列是偶数时,拼图才是可解决的。
来自Wikipedia article on the parity of a permutation:
偶数置换可以作为两个元素的偶数和偶数个交换(称为转置)的组合获得,而奇数置换可以通过(仅)奇数个转置获得。 p>
因此,交换(转置)任何两个编号的图块(不是空的正方形)将改变置换的奇偶校验(我们添加了一个转置)。但是,空方的出租车距离的平价没有变化(因为空方没有移动)。
因此,这样的操作将改变拼图的可解决性。换句话说,应用此操作(例如,交换标记为1
和2
的切片)将始终将无法解决的谜题转换为可解决的谜题,反之亦然。 (此操作也是一种双射,因为它是可逆的。)
考虑起始2x2网格:
1 2
3 _
和“目标”网格:
_ 3
2 1
我们可以从第一个网格移动到第二个网格,最多使用4次交换(要求(b))并在每次交换后保持网格可解(要求(c))?
首先,请注意满足要求(c)的唯一允许交换是使用相邻的区块(而不是对角区块)移动空间_
。通过对称,我们可以顺时针移动空间而不失一般性。然后执行任何计数器 - 时钟交换是没用的,因为它取消了之前的顺时针交换。
因此,我们反复将空间与相邻的瓷砖沿顺时针方向交换,直到我们获得所需的网格。这需要6次交换。从6开始> 4,满足要求(c)时不能满足要求(b)。
答案 1 :(得分:0)
假定棋盘颜色。然后从一个可解决的难题(甚至排列奇偶校验)开始,可以进行以下交换:
只有唯一的交换是,难题才能在每一步都有效(即使是奇偶校验) 类型3。如果每个类型1或2的交换都跟在另一个相同类型的交换之后,则难题将在每对这样的货币对之后有效。
从上面随机选择的足够数量的交换将实现高度的混乱。总共16次交换,这样 每个方块至少要交换一次,并且遵守这些交换规则就足够了。 很难确定谜题的分布是否完美,但对于大多数目的来说应该足够了。
该解决方案可轻松推广到4x4以外的其他难题。
答案 2 :(得分:-1)
假设棋盘着色,左上方是白色。然后从一个可解决的谜题开始,以下交换让难题可以解决:
解决方案概括为4x4以外的谜题。