「具体数学」一:递归问题

汉诺塔#

Tnn个圆盘的方案数,显然T0=0,T1=1

构造一种方案:将n1个圆盘移动到第二根柱子上,将最大的圆盘移动到第三根柱子,再将n1个圆盘移动过去

那么按照此方案至少有

Tn2Tn1+1,n>0

且易证最优

Tn2Tn1+1,n>0

所以

T0=0,Tn=2Tn1+1,n>0

n很大时递归式不好算,考虑一个封闭形式

观察好像有

Tn=2n1

至少T1=211

那么当Tn1=2n11时,有Tn=2Tn1+1=2n1,根据归纳得Tn=2n1

有时我们观察不到Tn=2n1

也许更容易发现Un=Tn+1=2n

平面上的直线#

求平面上n条直线所界定的区域的最大个数Ln

显然L0=1L1=2,L2=4

那么似乎有Ln=2n

然后有L3=7,What a pity

n条直线使得区域增加k个,当且仅当对k个已有区域进行分割,即与已有直线有k1个交点,此前仅有n1条直线

LnLn1+n,n>0

易证等号可取(第n条与此前所有直线有交点可取)

L0=1,Ln=Ln1+n,n>0

展开Ln

Ln=L0+1+2+3++n

Ln=1+Sn

Sn=1+2+3++n

Sn又称三角形数,是一个有n行的三角形阵列中保龄球的个数

高斯九岁得出了计算Sn的办法

Sn=1+2+3++n

Sn=n+(n1)+(n2)++1

2Sn=(n+1)+(n+1)++(n+1)=n(n+1)

Sn=n(n+1)2

由此得出

Ln=1+n(n+1)2,n0

归纳也可得

Ln=Ln1+n=((n1)n2+1)+n=1+n(n+1)2

问题变形:用折线代替直线,每个折线包含一个尖,求n条折线能界定的区域最大个数Zn

先列小数据:Z0=1,Z1=2,Z2=7

观察发现(根本没法发现x):一个折线相当于两条相交直线去掉一半(去掉蓝色一半)

等价于:每条折线我们失去了两条直线界定空间中的两个,也就是

Zn=L2n2n

Zn=2n2n+1,n0

约瑟夫问题#

n个人围成一个圆圈,隔一个杀一个,直到只有一人存活,求存活的人的编号

n=10时,杀死的顺序是2468103719

于是得到J(10)=5

猜测J(n)=n2

然后试了几次就GG

假设有2n个人,经过第一轮只剩下奇数编号的人,那么3号就成为下一个要离开的人

也就是除了每个人的号码加倍再减一,其他规则同n个人一致

那么J(2n)=2J(n)1

由此J(20)=2J(10)1,n1

同理J(2n+1)=2J(n)+1

结合得到递推式

J(1)=1

J(2n)=2J(n)1,n1

J(2n+1)=2J(n)+1n1

指数级的递推式更快捷

打表

J(1)=1

J(2)=1,J(3)=3

J(4)=1,J(5)=3,J(6)=5,J(7)=7

J(8)=1,J(9)=3,J(10)=5,J(11)=7,J(12)=9,J(13)=11,J(14)=13,J(15)=15

J(16)=1

似乎可以按2的幂分组,并且每组开始J(n)=1

J(2m+l)=2l+1,m0,0l<2m

m归纳

J(1)=1,J(2m+l)=2J(2m1+l2)1=2(l2+1)1=2l+1

观察前式可知

J(2n+1)J(2n)=2

拓展:

假设n的二进制展开式是

n=(bmbm1b1b0)2

等价于

n=bm2m+bm12m1++b12+b0

其中bi=01,而首位bm=1

那么依次有

n=(1bm1b1b0)2

l=(0bm1b1b0)2

2l=(bm1b1b00)2

2l+1=(bm1b1b01)2

J(n)=2l+1,J(n)=(bm1b1b0bm)2

最后得到了

J((bmbm1b1b0)2)=(bm1b1b0bm)2

n向左循环一位就得到了J(n)

如果一直用二进制表示也许很快就能发现

根据循环可以期待进行m+1次迭代再次得到n

但事实上例如J((1101)2)=(1011)2,再迭代一次J((1011)2)=(111)2,当0为首位时会消失

实际上J(n)必然n,于是如果J(n)<n就不可能迭代回n

反复迭代得到一系列递减数列后最终会到达一个不动点J(n)=n(至少还有J(1)=1呢)

显然这个不动点的二进制表示中全是1

所以不动点的数值是2v(n)1,其中v(n)n的二进制表示中1的个数

回去考虑第一个猜测:J(n)=n2

考虑它什么时候成立

J(n)=n2

2l+1=2m+l2

l=2m23

l=2m23为整数时,n=2m+l就是一个解

不难验证,当m为奇数时,2m23的倍数,但当m为偶数时则不然(后面再研究)

前几个解:

m=1,l=0,n=2,J(n)=1,n=(10)2

m=3,l=2,n=10,J(n)=5,n=(1010)2

m=5,l=10,n=42,J(n)=21,n=(101010)2

m=7,l=42,n=170,J(n)=85,n=(10101010)2

其中通过二进制很好看出来

再拓展:

引入

f(1)=α,f(2n)=2f(n)+β,f(2n+1)=2f(n)+γ

打表

f(1)=α

f(2)=2α+β,f(3)=2α+γ

f(4)=4α+3β,f(5)=4α+2β+γ,f(6)=4α+β+2γ,f(7)=4α+3γ

f(8)=8α+7β,f(9)=8α+6β+γ

一般地

f(n)=A(n)α+B(n)β+C(n)γ

A(n)=2m,B(n)=2ml1,C(n)=l

归纳法易证,但是很难直接得出此结论

下面考虑一般方法

f(n)=A(n),可得α=1,β=γ=0

A(n)=1,A(2n)=2A(n),A(2n+1)=2A(n)

成立

若代入f(n)=1

1=α,1=21+β,1=21+γ

此时α=1,β=γ=1

类似,若代入f(n)=n,得到α=1,β=0,γ=1

但由此我们有

A(n)=2m,A(n)B(n)C(n)=1,A(n)+C(n)=n

C(n)=nA(n)=l

B(n)=A(n)1C(n)=2m1l

猜想的结果被完美推出

此为成套方法,有多少个独立参数就需多少独立特解

将成套方法用于约瑟夫问题:

已知

J((bmbm1b1b0)2)=(bm1b1b0bm)2

若令β0=β,β1=γ

f(1)=α

f(2n+j)=2f(n)+βjj=0,1,n1

按二进制展开就是

f((bmbm1b1b0)2)=2f((bmbm1b1)2)+βb0

=4f((bmbm1b2)2)+2βb1+βb0

=2mα+2m1βbm1++2βb1+βb0

则有

f((bmbm1b1b0)2)=(αbm1b1b0)2

打表

f(1)=α

f(2)=2α+β,f(3)=2α+γ

f(4)=4α+2β+β,f(5)=4α+2β+γ,f(6)=4α+β+2γ,f(7)=4α+γ+2γ

例如

n=100=(1100100)2,α=1,β=1γ=1

f(n)=64+32168+421=73

100为例,1100100中每个101)减至最靠右的0的位置上

由此推出循环移位性质

更拓展:

f(j)=αj,1j<d

f(dn+j)=cf(n)+βj0j<d,n>0

则有

f((bmbm1b1b0)d)=(αbm1b1b0)c

例如假设

f(1)=34,f(2)=5,f(3n)=10f(n)+76,n>0,f(3n+1)=10f(n)2,n>0,f(3n+2)=10f(n)+8,n>0

d=3,c=10,要求d=19

f(19)=f((201)3)=(5,76,2)10=5100+76102=1258

约瑟夫问题有趣起来了

习题#

1.当n=2时,1n12n不存在交叉部分,不具有传递性

T0=0,T1=2

Tn=3Tn1+2

Tn=3n1

3.显然

4.数学归纳法
n=1时,移动次数为01
g(1)=1=2n1
对于第n个盘子,若在第三根柱子上g(n)=g(n1)2n11
若不在第三根柱子上g(n)=g(n1)+1+Tn12n1

5.不能,第四个圆与前三个圆最多有6个交点,最多增加6个表示集合

6.f(1)=f(2)=0,f(n)=f(n1)+n2=Sn2,n>2

7.H(1)=J(2)J(1)=0

Q2=1+βα

Q3=1+1+βαβ=1+α+βαβ

Q4=1+1+α+βαβ1+βα=α+1+α+ββ1+β=1+α+1+αβ1+β=(1+α)(1+β)β1+β=1+αβ

Q5=1+1+αβ1+α+βαβ=αβ+α(1+α)1+α+β=α(1+α+β)1+α+β=α

a:

(x1++xnn)nx1xn

(x1++xn1+x1+xn1n1n)nx1xn1x1++xn1n1

(x1++xn1n1)nx1xn1x1++xn1n1

(x1++xn1n1)n1x1xn1

b:

引理一:基本不等式:

ab(a+b2)2

证明:

(i=1nxin)ni=1nxi

(i=n+12nxin)ni=n+12nxi

两式相乘

(i=1nxini=n+12nxin)ni=12nxi

由引理一得

(i=12nxi2n)2ni=12nxi

c.

疑问,对于a.的证明,题目给出了特定条件,是否对一般地情况成立

引用

补充对不等式的证明:

引理一:

xex1

证明:

如果存在xi=0,那么显然成立

若任意xi0,令

a=i=1nxin>0

对任意xi

xiaexia1

所有式子相乘得到

i=1nxianei=1nxian=enn=1

ani=1nxi

(i=1nxin)ni=1nxi

Qn:先将n1个盘子挪到C,将第n个盘子挪到B,再将n1个盘子挪到B

Qn=Rn1+1+Rn1=2Rn1+1

Rn:将n1个盘子挪到A,将第n个盘子挪到C,将n1个盘子挪到B,将第n个盘子挪到A,将n1个盘子挪到A

Rn=Rn1+1+Qn1+1+Rn1=Qn+Qn1+1

a.

Pn=2Pn1+2=2n+12

b.

注意,只需要在最后恢复,经偶数次a中放置即可恢复顺序

Qn=4Pn1+3=4(2n2)+3=2n+25

Pn=2Pn1+mn=i=1n2nimi

每条Z比三条直线少了5块区域

Fn=L3n5n=3n(3n+1)25n+1=9n27n+22

或,第n个折线与前n1条折线每条最多有9个交点,共计最多9n9个交点,可新增9n8个区域

Fn=Fn1+9n8=9n27n+22$

新切一刀增加的空间数量为切面上直线划分的二维平面数量

Pn=Pn1+Ln1

类似的,设Xn是一条直线上n个点所确定的一维区域的最大个数,有

Ln=Ln1+Xn1

更有趣的:

Xn=(n0)+(n1)

Ln=(n0)+(n1)+(n2)

Pn=(n0)+(n1)+(n2)+(n3)

符合上述规律:

Pn=Pn1+Ln1=(n10)+(n11)+(n12)+(n13)+(n10)+(n11)+(n12)

=(n10)+((n10)+(n11))+((n11)+(n12))+((n12)+(n13))

=(n0)+(n1)+(n2)+(n3)

组合意义待探究

I(2)=2,I(3)=1

n为偶数,第一轮删掉2,4,6,,剩下1,3,5,,再从1开始,那么I(n)=2I(n2)1

n为奇数,第一轮过后再从3开始,那么I(n)=2I(n2)+1

posted @   lovelyred  阅读(217)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
CONTENTS