<<具体数学>>1.2递归(二)

开头:今天刚考完试,还有就是下雨就不太想出去了,长春也有点冷,我们接着上次写的继续写,我也把这个发在其他博客上了,感觉o(╯□╰)o,没人看啊,哈哈,自嘲结束,今天写递归的下一节平面中的直线(Lines in the Plane)
1.2平面中的直线(Lines in the Plane)

不黑不吹,这本书没一节的故事也是很吸引人的:一个人用刀在意大利馅饼上做n次直线切割,能把馅饼切成多少份?或者,较正式地说:由平面中n条直线确定的最大区域数Ln是多少?瑞士数学家Jacob Steiner在1826年首先予以解决(图论、算法中的Steiner树以其名字命名,该问题是NPC的)

套路来了,其实就是老的套路:

(1)n=0:L0=1

(2)n=1:L1=2

(3)n=2:L2=4

 

记住从最小的开始,没有直线的平面具有1个区域;有1条直线的平面具有2个区域;有2条直线的平面有4个区域;但当我们加入第3条直线,我们立即发现,不管如何放前2条直线,它至多能切3个老区域;

 

因此L3=4+3=7是我们可以得到的结果.

冷静一下.....仔细想想.......

直觉上来看,直线对区域的剖分,表现为在区域中加上了1条分界线,也正是区域边界与直线相交形成的一段

如果将直线划分成不同的段(闭区段和开区段都算),则每个段剖分1个区域,每剖分1个区域,新增加1个区域。

因此,新增加的区域数应该等于新直线被划分的段数!!!

每条直线至多相交一次,因此新直线最多与原来的n - 1直线相交n – 1次,形成n个段(注意两端开放的段)

倒着反推再反推,新直线最多剖分出来n个新的区域!!!

所以我们可以得到

Ln ≤ Ln-1 + n

和上篇的汉诺塔一样,是时候拿出数学归纳法了,易证我们能达到此公式中的等式,我们只要使第n条直线不和其他任何直线平行(因此它和其他任何直线相交),且使它不通过任何存在的交点(它和其他任何直线交于不同位置),所以递归式为

L0=1;

Ln=Ln-1+n(n>0)

下面来解这个递归式:

Ln=Ln-1+n;

  =Ln-2+(n-1)+n

  =L0+1+2+....+(n-2)+(n-1)+n

  =1+Sn

其中Sn=1+2+3+...+(n-1)+n。

 

 

这些值也称为三角数,因为Sn是n行三角形阵中球状针孔个数.例如,通常4行阵    *  *  *  *

                                                                       *  *  *

                                                                         *  *

                                                                           *

有S4=10个针孔

小学其实我们就会算Sn的和,所以Ln=n*(n+1)/2+1(n>=0)

要进行严格的数学归纳证明,关键归纳步是Ln=Ln-1+n=1/2n(n+1)+1

关于书上讲的闭形式:对一个量f (n)的表达式而言,如果能够最多用固定次数(此次数独立于n )的“常用”标准运算来算出结果,则称其为封闭形式的。So,

1、递归方程不是封闭形式,因为求解次数依赖于n。

2、我们得到的Tn和Ln的结果是封闭形式的:

Tn :1次exp,1次—

Ln :2次+,1次× ,1次÷

3、1 + 2 + … + n之类的和不是封闭的(用…省略了中间的加法计算,其次数与n有关)

4、n(n+1)/2等表达式是封闭的( 1次+,1次×,1次÷)

5、n!是不是呢?

关于n!等封闭形式的例外情形:

简单闭形式的总数是有限的,而一些常用、重要的递归方程并没有简单闭形式

为了更好地表达数学运算结果,我们就增加了一些“常用”的标准运算,以扩展封闭形式的范围。例如阶乘n! (尽管它的等价形式1·2·…·n并不是封闭的),也就是说计算阶乘被视为1次运算。

平面中的直线—变形

下面考虑Lines in Plane问题的变形:假设用弯曲线代替直线,而且每条弯曲线都含有一个“锐角的锯齿形转角”,那么平面中n条弯曲线围成的区域最多有多少呢?

先来观察一下n = 1和n = 2的情形:

 

 

容易看出:每加入1条弯曲线,就像加入了2条直线,只是这“两条”直线在交点处没有延伸,因此导致了区域2、3、4的合并(3变1):

 

每加入1条新弯曲线,在新增加区域的数量中都要至少减去2。同时,如果把拐点地放到一个开区域,使得隐去的直线不会与原来的直线相交,我们只会减少2个区域

也就是说,新弯曲线增加的区域数为2n – 2 (先像2条直线一样考虑区域的剖分,得到2n,再考虑区域的合并,得到-2)

Zn = Zn-1 + 2n - 2

或者,先统一地像2n条直线一样考虑区域的剖分,得到L2n;再考虑区域的合并,得到-2n,所以

Zn = L2n – 2n

= 2n(2n + 1) / 2 + 1 – 2n

= 2n2 – n + 1

对Ln和Zn的封闭形式进行比较,我们发现对于大的n,有下面的关系,

因此,弯曲线情况得到的区域数目大概是直线情况的4倍。(第9章会讨论如何分析整函数的近似状态,符号‘~’的定义可见9.1节,其实学过高数的应该知道这什么。。。。)

总结:其实这小节不是很难的,下一节就有点难了,我希望我能坚持写下去,也能坚持把书看完,虽然很吃力,但我更想看高老头的TAOCP,应该算是神作了,号称计算机中的圣经啊,昨天母亲节,谢谢我的母亲。。大家也应该多去关心一下家人,加油,我希望我每星期都能写那么一点点。。。

转载于:https://my.oschina.net/u/1589875/blog/263718

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值