【问题标题】:On the number of tilings of a chessboard by dominoes关于多米诺骨牌棋盘的平铺数量
【发布时间】:2017-01-02 21:15:03
【问题描述】:

用多米诺骨牌将棋盘部分平铺是指在棋盘上放置多米诺骨牌,使得没有两个多米诺骨牌重叠。用多米诺骨牌拼贴棋盘是一种局部拼贴,其中棋盘的每个方格都被一些多米诺骨牌覆盖。

我感兴趣的问题如下:$N$×$N$ 棋盘由多米诺骨牌组成的平铺数是多少?

事实证明,$M$ 与 $N$ 棋盘 b 多米诺骨牌的平铺数量实际上有一个明确的公式:

https://wikimedia.org/api/rest_v1/media/math/render/svg/1bc328b90d68fd765e2666ad0c62bb42b2e2bd10

我对解决此问题的算法方法感兴趣。我们只需要考虑 $N$ 偶数的情况(对于 $N$ 奇数,平铺的数量显然是 $0$)。我想解决的唯一算法是蛮力递归。

我创建了一个名为 number_of_tilings(partial_tiling) 的函数,该函数接受棋盘的部分平铺,并输出用多米诺骨牌覆盖未覆盖方格的方式数,以便我们最终得到一个平铺。

我创建了一个名为uncovered_square(partial_tiling) 的辅助函数,它接受部分平铺并输出平铺中最左上角的未覆盖正方形,如果不存在这样的正方形,则输出False。

函数number_of_tilings(partial_tiling)是递归定义的:如果uncovered_square(partial_tiling)输出False,那么number_of_tilings(partial_tiling)=1,因为partial_tiling实际上是一个合适的平铺。否则,uncovered_square(partial_tiling) 输出一些正方形 S。我们在正方形 S 上水平放置一个多米诺骨牌(如果可能),从而生成一个新的部分平铺 t_horizo​​ntal。同样,我们定义 t_vertical。最后我们计算number_of_tilings(t_horizo​​ntal)+number_of_tilings(t_vertical)。

number_of_tilings 的初始输入是一个 $N$ x $N$ 棋盘,上面没有放置多米诺骨牌。

对于 N=2,4,6,该算法非常快地给出正确答案,但对于 N>=8,它非常慢(超指数时间)。


所以我的问题是存在哪些其他可能的算法,或者可以优化蛮力算法吗?

【问题讨论】:

  • 你在哪里找到这个公式的?有一个 P 时间算法可以做到这一点。见en.wikipedia.org/wiki/FKT_algorithm,但关于这种特殊情况的优雅算法的存在,我不知道。

标签: algorithm


【解决方案1】:

有一个非常简单的动态规划解决方案,运行时间为 O(N*2^2N) 或更好:

  1. 生成填充第一行的所有可能方式(小于 2^N)。

  2. 由于多米诺骨牌只有 2 个方格长,因此其效果只会传播到第 2 行。第二行的可能配置少于 2^N。计算每种方法有多少种生成方法。

  3. 同样,填充前 2 行产生的第三行有

  4. 对于通过填充前 N-1 行生成的每个配置,最多可以有 1 种方式来填充最后一行。将 # 种方法加起来以生成在最后一行仅留下偶数长度间隙的每个配置,这就是您的答案。

在一个包含严格代码的好盒子上,我预计对于 N=16,这将花费不到一分钟的时间。 我可以想出很多方法让它更快一点,但没有任何东西能低于 O(2^N)

【讨论】:

    【解决方案2】:

    这个问题已经在文献中进行了研究,似乎不是很容易和直接。例如来看看

    http://www.math.cmu.edu/~bwsulliv/domino-tilings.pdf

    上面的链接提供了一个多项式时间算法来计算它。

    实际上它首先将其转化为图问题,即特殊图类中完美匹配的数量。然后为该图定义一个邻接矩阵并计算该矩阵的永久值,该矩阵等于完美匹配的数量。

    在一般图中很难计算矩阵的永久值。但是在这个特定的图中,或者在平面图中,可以解决它。这部分的想法虽然不是很直观。

    【讨论】:

      猜你喜欢
      • 2022-08-14
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多