【发布时间】:2016-11-27 13:33:36
【问题描述】:
我正在解决一个编码问题,并找出了以下关系以找到可能的排列数:
one[1] = two[1] = three[1] = 1
one[i] = two[i-1] + three[i-1]
two[i] = one[i-1] + three[i-1]
three[i] = one[i-1] + two[i-1] + three[i-1]
我可以很容易地使用 for 循环 来找出各个数组的值直到 n,但 n 的值是 10^9 的顺序,我赢了'无法从1 迭代到如此庞大的数字。
对于n的每个值,我需要在O(1)时间输出(one[n] + two[n] + three[n]) % 10^9+7的值。
一些结果:
- 对于 n = 1,结果 = 3
- 对于 n = 2,结果 = 7
- 对于 n = 3,结果 = 17
- 对于 n = 4,结果 = 41
在花费数小时后,我无法找到上述n 的通用公式。谁能帮帮我。
编辑:
n = 1, result(1) = 3
n = 2, result(2) = 7
n = 3, result(3) = result(2)*2 + result(1) = 17
n = 4, result(4) = result(3)*2 + result(2) = 41
所以,result(n) = result(n-1)*2 + result(n-2) 或
T(n) = 2T(n-1) + T(n-2)
【问题讨论】:
-
你试过纸、铅笔和一些代数吗?
-
是的.. 试着用铅笔在纸上找出一个图案。没找到。虽然不如代数...
-
好吧,我可以告诉你,乍一看,它看起来并不难弄清楚。不幸的是,我没有时间参与其中。再试一次,这次更努力。
-
顺便说一句,
result[n] = one[n] + two[n] + three[n]看起来不属于那里。 -
@FDavidov:已编辑。删除了
result[n]
标签: algorithm formula recurrence