巧妙的斐波那契
在算法中发现了数学的乐趣。
先提出一个问题,如果一个长的为n的数组,用0和1填充,不能有连续的1,那么有多少种填充方法。
解法:长度为n,只有当1的个数小于等于n/2+n%2时,此时才可能满足题意。(例如n=7,那么之多可以有4个1,因为3个0的周围只有4个 空。)则有解为C44 +c5 3 +c6 2 + C71+c80 = 1 + 10 + 15 + 7 + 1 = 34;故长度为7时有34中排法。
这个解法不是这篇文章的重点,重点是有1,2,3,4,5,6,7的分别是2,3,5,8,13,21,34。这是已经发现规律了,这恰好是斐波那契数(只是斐波那契数开始为1,1,2)。
以5,6,7为例解析:
[5] : C3 3+ C4 2 + C5 1 + C6 0 .
[6] : C4 3+ C5 2 + C6 1 + C7 0 .
[7] : C4 4 + C5 3 +C6 2 + C7 1 + C8 0.
在排列组合中有:Cn m = Cn-1 m + Cn-1 (m-1);
故【5】【6】相同颜色的部分相加等于【7】的该颜色部分(如上图).
另一种理解:
对于n>2来说,若F【n-1],F[n-2]都知道,那么这么分析,假设最后一位是0,那么种类数为F【n- 1】; 若最后一位是1,那么倒数第二位一定是0,种类数为F【n-2】。故F【n】 = F【n-1】+F【n-2】;而F【1】=2;F【2】=3;
暂时还没有完全理解其中道理,贴出来算是分享,也算是等待知道原因的给讲解下。
本文通过一个具体的算法问题引入斐波那契数列,并解析了其背后的数学规律。通过对不同长度数组中0和1排列组合的研究,揭示了斐波那契数列与特定算法问题之间的联系。
224

被折叠的 条评论
为什么被折叠?



