【发布时间】:2012-05-30 11:20:00
【问题描述】:
我想找出 4 x N 区域(4 个单位宽度和 N 个单位高度,N ≥ 1)的多米诺砖使用动态编程的可能不同组合的数量。
多米诺砖的大小为 2x1,例如
==
对于水平和
|
|
对于垂直砖。
现在,
示例 4x1(两块多米诺骨牌并排)
====
4x2 积木配置示例(共 5 个)
1)
||||
||||
2)(转动右边的两块砖)
||==
||==
3)
|==|
|==|
4)
====
====
5)
==||
==||
目前已知的唯一组合数
4x1 : 1 possibility
4x2 : 5 possibilites
4x3 : 11 possibilites
4x4 : 36 possibilites
【问题讨论】:
-
有一个简单的重复/生成函数。为什么动态规划如此重要?这是作业吗?
-
是的,我不知道如何解决这个问题。
-
oeis.org/A005178 为此给出了一个 O(1) 公式:
a(n)=((5*sqrt(29))/145)*(((1+sqrt(29)+sqrt(14+2*sqrt(29)))/4)^n+((1+sqrt(29)-sqrt(14+2*sqrt(29)))/4)^n-((1-sqrt(29)+sqrt(14-2*sqrt(29)))/4)^n-((1-sqrt(29)-sqrt(14-2*sqrt(29)))/4)^n)祝你好运,不过可以向你的老师解释:) -
@BlueRaja-DannyPflughoeft 因为
a(n)有Θ(n)位数,所以只要double精度足够,就只有O(1)。 -
我更喜欢递归公式
a(n) = a(n-1)+5*a(n-2)+a(n-3)-a(n-4);通过编写一个合适的矩阵,你应该得到 O(log n)。我猜O(1)公式是通过矩阵对角化得到的。
标签: algorithm dynamic-programming