我正在尝试开发一种算法,该算法可以确定没有一定长度的连续零的二进制字符串的数量。我找到了基于Fibonacci序列的解决方案。我不明白,二进制字符串如何以0或1结尾而不包含重复的0取决于Fibonnacci序列。
有人可以解释一下吗?
例如,对于长度3,答案将为5,因为:
000
001
*010
*011
100
*101
*110
*111
*没有连续零的字符串
答案 0 :(得分:3)
设Z(k)是有效二进制字符串的数量,以0结尾。表示这样的字符串*0
设O(k)是有效二进制字符串的数量,以1结尾。表示这样的字符串*1
我们只能在*0
的末尾添加k+1
来构建长度为0
的{{1}},所以
*1
我们可以构建Z(k+1) = O(k)
*1
k+1
,将1
添加到任何*1
的末尾,并添加到任何*0
的末尾,所以< / p>
O(k+1) = O(k) + Z(k)
考虑长度为(k + 2)
的所有有效字符串F(k+2) =
Z(k+2) + O(k+2) =
O(k+1) + O(k+1) + Z(k+1) =
O(k) + Z(k) + O(k+1) + Z(k+1) =
F(k) + F(k+1)
你看到斐波纳契式的关系吗?