给定边界框中的随机自避免晶格循环


25

关于“ Slither Link”难题,我一直在想:假设我有一个的正方形单元格,并且我想找到一个简单的网格边缘循环,在所有可能的简单循环中均匀地随机分布。n×n

做到这一点的一种方法是使用马尔可夫链,其状态是正方形的集合,其边界是简单的周期,并且其过渡包括选择一个随机的正方形进行翻转,并在修改后的正方形组仍然具有简单的周期时保持翻转它的边界。一个人可以以这种方式从任何简单的循环过渡到其他任何循环(使用关于脱壳的标准结果),因此最终可以收敛到统一的分布,但是速度有多快?

或者,是否有更好的马尔可夫链,或选择简单循环的直接方法?

预计到达时间:请参阅此博客文章,获取用于计算我正在寻找的周期数的代码,以及一些其中一些指向OEIS的指针。众所周知,计数与随机生成几乎是一回事,我从这些数字的因式分解中缺乏任何明显的模式以及OEIS条目中缺乏公式的推断得出,不太可能存在已知的简单直接方法。但这仍然存在以下问题:该链融合的速度有多快,以及是否有更好的链开放性。


1
OEIS序列计算的集合的边界不一定是简单的循环,例如对于3x3,218个中的一个具有除中间以外的所有正方形,另外四个则通过进一步去除一个角来给出。
Colin McQuillan

1
对于2xn网格,数字如oeis.org/A059020所示。对于3xn,我非常确定它们是6,40,213,1049,5034,23984,114069,542295,2577870,12253948,58249011,276885683,1316170990,6256394122,29739651711,141366874247,...(不在OEIS中)。我设置了传递矩阵来手工计算,但将其与机器生成的矩阵进行了比较,唯一的区别是手是正确的而机器是错误的。(这应该在3x3的情况下显示-机器矩阵将允许一个在中央带有孔的octomino。)
David Eppstein

1
您应该将该序列发送给Neil Sloane,以便他可以将其放入OEIS。
彼得·索尔

1
@David:谢谢。也许该是我更全面地学习转移矩阵方法的时候了。
冈本

2
@David:您刚刚把这个谜题链接浪费了我一生两个小时。
domotorp 2011年

Answers:


1

似乎因为您仅使用图形中循环数的计数来随机选择一个循环,所以如果对该数字具有随机近似值,则仍可以大致均匀地选择一个循环。

注意,循环的在一个曲线图中的数,其中包含边缘,等于周期的数量加上从简单的路径的数目到在。因此,利用 -路径数量的多项式时间近似值,可以一次递增地构建一个个边沿,随时间的推移近似地获得多项式时间近似值。 u v G u v u v G u v u v GG(u,v)G(u,v)uvG(u,v)uvG

我实际上认为,有一种更直接的选择周期的方法。令为的正方形网格周围的整个边图。对于每个边缘找到包含边缘周期的数量(这是数量 -在路径 -)。然后随机选择一条包含该边缘的循环数加权的边缘。这将是您随机选择的循环中的第一个优势。所有其他边缘将通过一次扩展一个边缘来选择。n × n u v u v G u v Gn×n(u,v)uvG(u,v)

假设您选择的路径是随机循环的一部分。令此路径上的顶点集为,令和为路径的端点。还要让为不在的的邻居集合(请注意,在此特定图中最多只有3个)。对于每个计数诱导图的 -路径数。然后,选择邻居,的加权路径刚刚计数。添加边CvsveNveCuNuvsG[V(C{vs,ve})]uve(ve,u) 到您选择的路径,将其扩展一。

这样,选择了多项式的边,每个边都需要对多项式时间近似算法进行少量计算。因此,可以均匀地选择一个周期。

我目前有一个stackexchange问​​题,要求提供有关快速路径计数近似算法的参考。我在一些地方读过这些算法存在,但尚未找到它们。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.