斐波那契数列如何出现在 CodeChef 火与冰谜题的解决方案中?
How does the Fibonacci sequence arise in the solution to the CodeChef puzzle Fire and Ice?
有关原始问题陈述,请参阅 https://www.codechef.com/problems/FICE。问题归结为计算长度为 n >= 1
的二进制字符串的数量,其中每个连续的 运行 零或 1 具有奇数长度(即匹配正则表达式 (0(00)*|1(11)*)*
的字符串数量) .
为什么解等于 2 Fib(n)
,其中 Fib
表示斐波那契数列?
让我们写一个重复的答案。设 T0(n)
为以 0
结尾的有效字符串数,T1(n)
为以 1
结尾的有效字符串数。由于n >= 1
,答案是T0(n) + T1(n)
。
我们可以找到一些基本案例。
T0(1) = 1, since there is one string of length one that ends with 0, i.e., 0
T0(2) = 1, since there is one string of length two that ends with 0, i.e., 10
现在让我们考虑 n >= 3
的 T0(n)
。给定一个长度为 n
并以 0
结尾的字符串,有两种情况,其中恰好有一种适用。第一种情况是字符串以 10
结尾,在这种情况下,删除 0
会得到长度为 n - 1
且以 1
结尾的有效字符串。第二种情况是字符串以 000
结尾,在这种情况下,删除 00
会得到长度为 n - 2
且以 0
.
结尾的有效字符串
T0(n) = T0(n - 2) + T1(n - 1)
我们观察问题的对称性 T0(n) = T1(n)
.
T0(n) = T0(n - 2) + T0(n - 1)
这就是斐波那契递推。答案是T0(n) + T1(n) = 2 Fib(n)
.
有关原始问题陈述,请参阅 https://www.codechef.com/problems/FICE。问题归结为计算长度为 n >= 1
的二进制字符串的数量,其中每个连续的 运行 零或 1 具有奇数长度(即匹配正则表达式 (0(00)*|1(11)*)*
的字符串数量) .
为什么解等于 2 Fib(n)
,其中 Fib
表示斐波那契数列?
让我们写一个重复的答案。设 T0(n)
为以 0
结尾的有效字符串数,T1(n)
为以 1
结尾的有效字符串数。由于n >= 1
,答案是T0(n) + T1(n)
。
我们可以找到一些基本案例。
T0(1) = 1, since there is one string of length one that ends with 0, i.e., 0
T0(2) = 1, since there is one string of length two that ends with 0, i.e., 10
现在让我们考虑 n >= 3
的 T0(n)
。给定一个长度为 n
并以 0
结尾的字符串,有两种情况,其中恰好有一种适用。第一种情况是字符串以 10
结尾,在这种情况下,删除 0
会得到长度为 n - 1
且以 1
结尾的有效字符串。第二种情况是字符串以 000
结尾,在这种情况下,删除 00
会得到长度为 n - 2
且以 0
.
T0(n) = T0(n - 2) + T1(n - 1)
我们观察问题的对称性 T0(n) = T1(n)
.
T0(n) = T0(n - 2) + T0(n - 1)
这就是斐波那契递推。答案是T0(n) + T1(n) = 2 Fib(n)
.