algorithm - 查找 Domino Tiling 的重复项

标签 algorithm recursion

我正在尝试解决 this spoj 上的问题。通过使用此教程中的 Link我能够弄清楚这种重复。

*****    AA***    AA***    AA***    A****
***** =  AA***  + A****  + AA***  + A****
*****    AA***    A****    A****    AA***
*****    AA***    AA***    A****    AA***

f(n)  =  f(n-2) + h(n-1) + g(n-1) + g(n-1).

但我不明白如何解决 h(n-1) 和 g(n-1) 的递归问题。

最佳答案

您需要边的所有 16 种可能轮廓的递归关系:

##
##
##
##

#.
##
##
##

##
#.
##
##

...

##
#.
#.
#.

#.
#.
#.
#.

这里的#表示一个格子被多米诺骨牌占据,.表示一个空格子。

你可以用f(n,0)f(n,15)来表示它们,这样递归关系就很容易写了。您甚至可以自动枚举这些配置文件并生成关系。或者,您可以通过注意对称性(就像您已经注意到两个 g 的对称性一样)手动将配置文件数量减少 2 倍,然后手动编写方程式。

关于algorithm - 查找 Domino Tiling 的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33218054/

相关文章:

ruby-on-rails - Ruby 内置的#permutation 和#repeated_permutation 方法的时间复杂度是多少?

c++ - 如何解决这个寻找最大值和最小值的递归(分而治之)过程?

javascript - 无法从递归 javascript 函数获取值数组

node.js - 有没有更好的方法在 typescript 中编写这个递归方法

java - 修复简单的 java 递归代码

c++ - 最长最大重复子串

algorithm - 诱导子图;两个节点之间存在路径

python - 优化用于从预定义范围确定合格分数的算法

algorithm - 位串中的循环检测

c++ - 没有 Y Combinator 的递归 lambda 回调