没有一定长度的连续零的二进制字符串的数量与斐波纳契数相关。

时间:2016-09-18 10:31:29

标签: java algorithm fibonacci

我正在尝试开发一种算法,该算法可以确定没有一定长度的连续零的二进制字符串的数量。我找到了基于Fibonacci序列的解决方案。我不明白,二进制字符串如何以0或1结尾而不包含重复的0取决于Fibonnacci序列。
有人可以解释一下吗?

例如,对于长度3,答案将为5,因为:

 000
 001
*010
*011
 100
*101
*110
*111

*没有连续零的字符串

1 个答案:

答案 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)

你看到斐波纳契式的关系吗?