组合数学经典问题---铺砖问题

来源:互联网 发布:python绘制立体玫瑰花 编辑:程序博客网 时间:2024/05/09 15:38
铺路问题:
1、1*n长度的路的铺砖问题
2、2*n长度的路的铺砖问题
3、3*n长度的路的铺砖问题


一、1*n的铺砖问题


题目如下所示:某人要铺1*n长度的路,有三种砖可以使用:1*1的方砖,两个直角边分别为1,1的直角三角砖(方砖从对角线切开得到两块这样的砖,下称小三角)以及斜边是2的等边直角三角砖(下称大三角)。提问:
(1)铺1*n长度的路一共有多少方案数;
(2)铺1*n长度的路一共可能出现的方砖总数;
(3)铺1*n长度的路可能出现的连续两块方砖的总次数。
对付这种题目的实际策略并不像它表面那样难以捉摸,我们只要立好一个标准的拆分方式,就可以得到很好的递推关系。我将1*n的路分为两个部分,如图所示:
 
第一个部分是从路的末端算起直到找到第一个可以有垂直缝隙的位置,长度为x(表示为灰色),余下的为第二部分。
l 第一问:
当x=1时,灰色部分公有三种方案:一块方砖,2块小三角(摆成两种方向),如图所示:
根据最后一部分的竖线位置在哪,确定递推关系式。


那么,如果前长度为n-1的路方案数是an-1,此时总的方案数是3an-1。
当x=2时,灰色部分只可能有两种方案,分别是大小三角的摆成两个方向的组合(注意不能有可以垂直缝隙的部分)
 
如果前面长度为n-2的路的方案数是an-2,此时总的方案数是2an-2。
同理,当x=3的时候,灰色部分仍然只能是大小三角用两种方向摆放的组合。总的方案数只能是2an-3。如下的依次类推,则得到:
an=3an-1+2an-2+2an-3+2an-4+……+2a1 ①
同理
an-1=3an-2+2an-3+2an-4+2an-5+……+2a1 ②
① - ② 就得到了第一问的递推公式:
an - 4an-1 +a n-2 = 0。 ③
接下来的问题就是数数和解方程了,不再赘述。
l 第二问:
解决第二问和第一问的思想是完全一样的。只不过要用到第一问的概念和结果。设总体的方块数是bn。
当x=1时,就有两种子情况,即灰色部分是不是方块。:
1. 如果是方块的话,灰色部分的方块数就是an-1(记住前n-1长度的路有an-1种方案,每一种方案都要算一次增加的方案数)。再加上前边的方块数bn-1就是an-1 + bn-1块方块
2. 如果不是方块,则灰色部分增加的就是两倍的原有方块数(因为此时灰色部分有2种方案),所以方块数就是2 bn-1
当x=2时,由于灰色部分不可能再有方块了,所以增加的方块数只能是2bn-2。
在x=2 、3、……的时候,道理也同x=2的情况,所以增加的方块数始终是2b n-x。
那么把上边所有的情况都算起来,就得到了关系式:
bn=3bn-1+an-1+2bn-2+2bn-3+……+2b1 ④
那么就有:
bn-1=3bn-2+an-2+2bn-3+2bn-4+…+2b1 ⑤
通过上面两个式子相减就得到了第二问得递推关系式:
bn – 4b n-1 + bn-2 = an-1 - an-2 ⑥
有人算到这里的时候还要在进行加减,试图把a销掉,然后再得出特征方程,其实这是没有必要的。考虑③和⑥的关系就应到立刻得出特征方程:
(x2 - 4x + 1)2 = 0
这个方程的根都是第一问方程根的重根而已。如果你把a销掉了,此时就有要花很大力气重新将多项式分解成现在的样子,费力不讨好而已。
考虑到会有很多无理数参加运算,比较复杂。所以,接下来我将就这个问题,解释一下如何快速解待定系数的4元一次方程。
首先,上边特征方程的根是两个2 + 3^0.5和2 - 3^0.5 (下文对开二次方进行简写,写成2 + !3和2 - !3)。然后通过数数得到b1=1,b2=6,b3=31,最后通过反向计算得到b0=1 (记住b0永远都是通过递推公式反推出来的,而不是数出来的,所以b0很可能不是一个有意义的数字,甚至可以是个分数或者负数)。根据以上事实可以得到最终通项公式的形式:
(A+Bn)x^n + (C+Dn)y^n
其中x和y为特征根。A、B、C、D为待定系数,代入以上所有的值可以得到方程:
A + C = 1
(A + B)(2 + !3) + (C + D)(2 - !3) = 1
(A + 2B)(7 + 4!3) + (C + 2D)(7 – 4!3) = 6
(A + 3B)(26 + 15!3) + (C + 3D)(26 – 15!3) = 31
经过实践我们发现ABCD都可能是很复杂的数(即包含有理部分又包含无理部分),单独解非常容易出错,但是A+C、A-C、B+D、B-D的形式却非常简单(其中A+C就是b0)。我们将上面的方程组重组成:
A + C = 1
2(A+C) + !3(A-C) + 2(B+D) + !3(B-D) = 1
7(A+C) + 4!3(A-C) + 14(B+D)+8!3(B-D) = 6
26(A+C) + 15!3(A-C) + 78(B+D)+45!3(B-D) = 31
这样重组了之后,就可以很轻松的利用加减法得到
A+C=1 A-C=-4/(3!3) B+D=-5/6 B-D=2/!3
之后再计算A,B,C,D就显得相当轻松了。
至于第三问,相信聪明的你一定可以利用已经学习到的技术轻松解出,不是么?


同样因为类似的这种问题,可以求得所有的方案需要的方砖数目、小三角数目、大三角砖数目。




二、2*n的铺砖问题


重点仍然是递推关系式的推导:
(1)经验推导法:
求出a1、a2、a3、a4的数目,通过比对,确定递推关系式,这种方法的好处是比较显而易见,容易得出正确的递推关系,但是前提必须是你手算出的a每项必须是正确的。
(2)形式推导法:
根据最后一块砖的形状或者摆放,最后两块砖的形状或摆放确定最后的递推公式。


例2:2*n的路径铺砖问题,可以铺小三角砖(直角边为1),大三角砖(斜边为2,直角边为√2)、方砖1*1,问:
(1)总方案数

(2)总方案的总砖数、小三角砖数、大三角砖数、方砖数。


未完待续。。。。






0 0