汉诺塔#
设Tn为n个圆盘的方案数,显然T0=0,T1=1
构造一种方案:将n−1个圆盘移动到第二根柱子上,将最大的圆盘移动到第三根柱子,再将n−1个圆盘移动过去
那么按照此方案至少有
Tn≤2Tn−1+1,n>0
且易证最优
Tn≥2Tn−1+1,n>0
所以
T0=0,Tn=2Tn−1+1,n>0
n很大时递归式不好算,考虑一个封闭形式
观察好像有
Tn=2n−1
至少T1=21−1
那么当Tn−1=2n−1−1时,有Tn=2Tn−1+1=2n−1,根据归纳得Tn=2n−1
有时我们观察不到Tn=2n−1
也许更容易发现Un=Tn+1=2n
平面上的直线#
求平面上n条直线所界定的区域的最大个数Ln
显然L0=1,L1=2,L2=4
那么似乎有Ln=2n
然后有L3=7,What a pity
第n条直线使得区域增加k个,当且仅当对k个已有区域进行分割,即与已有直线有k−1个交点,此前仅有n−1条直线
Ln≤Ln−1+n,n>0
易证等号可取(第n条与此前所有直线有交点可取)
L0=1,Ln=Ln−1+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+(n−1)+(n−2)+…+1
2Sn=(n+1)+(n+1)+…+(n+1)=n∗(n+1)
Sn=n∗(n+1)2
由此得出
Ln=1+n∗(n+1)2,n≥0
归纳也可得
Ln=Ln−1+n=((n−1)∗n2+1)+n=1+n∗(n+1)2
问题变形:用折线代替直线,每个折线包含一个尖,求n条折线能界定的区域最大个数Zn

先列小数据:Z0=1,Z1=2,Z2=7
观察发现(根本没法发现x):一个折线相当于两条相交直线去掉一半(去掉蓝色一半)

等价于:每条折线我们失去了两条直线界定空间中的两个,也就是
Zn=L2n−2n
Zn=2n2−n+1,n≥0
约瑟夫问题#
n个人围成一个圆圈,隔一个杀一个,直到只有一人存活,求存活的人的编号
如n=10时,杀死的顺序是2、4、6、8、10、3、7、1、9
于是得到J(10)=5
猜测J(n)=n2
然后试了几次就GG了
假设有2n个人,经过第一轮只剩下奇数编号的人,那么3号就成为下一个要离开的人
也就是除了每个人的号码加倍再减一,其他规则同n个人一致
那么J(2n)=2J(n)−1
由此J(20)=2∗J(10)−1,n≥1
同理J(2n+1)=2J(n)+1
结合得到递推式
J(1)=1
J(2n)=2J(n)−1,n≥1
J(2n+1)=2J(n)+1,n≥1
指数级的递推式更快捷
打表
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,m≥0,0≤l<2m
对m归纳
J(1)=1,J(2m+l)=2J(2m−1+l2)−1=2(l2+1)−1=2l+1
观察前式可知
J(2n+1)−J(2n)=2
拓展:
假设n的二进制展开式是
n=(bmbm−1…b1b0)2
等价于
n=bm∗2m+bm−1∗2m−1+…+b1∗2+b0
其中bi=0或1,而首位bm=1
那么依次有
n=(1bm−1…b1b0)2
l=(0bm−1…b1b0)2
2l=(bm−1…b1b00)2
2l+1=(bm−1…b1b01)2
J(n)=2l+1,J(n)=(bm−1…b1b0bm)2
最后得到了
J((bmbm−1…b1b0)2)=(bm−1…b1b0bm)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=2m−23
当l=2m−23为整数时,n=2m+l就是一个解
不难验证,当m为奇数时,2m−2是3的倍数,但当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)=2m−l−1,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=2∗1+β,1=2∗1+γ
此时α=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)=n−A(n)=l
B(n)=A(n)−1−C(n)=2m−1−l
猜想的结果被完美推出
此为成套方法,有多少个独立参数就需多少独立特解
将成套方法用于约瑟夫问题:
已知
J((bmbm−1…b1b0)2)=(bm−1…b1b0bm)2
若令β0=β,β1=γ
f(1)=α
f(2n+j)=2f(n)+βj,j=0,1,n≥1
按二进制展开就是
f((bmbm−1…b1b0)2)=2f((bmbm−1…b1)2)+βb0
=4f((bmbm−1…b2)2)+2βb1+βb0
=2mα+2m−1βbm−1+…+2βb1+βb0
则有
f((bmbm−1…b1b0)2)=(αbm−1…b1b0)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+32−16−8+4−2−1=73
以100为例,1100100中每个1被0(−1)减至最靠右的0的位置上

由此推出循环移位性质
更拓展:
f(j)=αj,1≤j<d
f(dn+j)=cf(n)+βj,0≤j<d,n>0
则有
f((bmbm−1…b1b0)d)=(αbm−1…b1b0)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=5∗100+76∗10−2=1258
约瑟夫问题有趣起来了
1.当n=2时,1到n−1与2到n不存在交叉部分,不具有传递性
T0=0,T1=2
Tn=3Tn−1+2
Tn=3n−1
3.显然
4.数学归纳法
n=1时,移动次数为0或1
g(1)=1=2n−1
对于第n个盘子,若在第三根柱子上g(n)=g(n−1)≤2n−1−1
若不在第三根柱子上g(n)=g(n−1)+1+Tn−1≤2n−1
5.不能,第四个圆与前三个圆最多有6个交点,最多增加6个表示集合
6.f(1)=f(2)=0,f(n)=f(n−1)+n−2=Sn−2,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)n≥x1…xn
(x1+…+xn−1+x1+…xn−1n−1n)n≥x1…xn−1∗x1+…+xn−1n−1
(x1+…+xn−1n−1)n≥x1…xn−1∗x1+…+xn−1n−1
(x1+…+xn−1n−1)n−1≥x1…xn−1
b:
引理一:基本不等式:
ab≤(a+b2)2
证明:
(∑ni=1xin)n≥n∏i=1xi
(∑2ni=n+1xin)n≥2n∏i=n+1xi
两式相乘
(∑ni=1xin∗∑2ni=n+1xin)n≥2n∏i=1xi
由引理一得
(∑2ni=1xi2n)2n≥2n∏i=1xi
c.
疑问,对于a.的证明,题目给出了特定条件,是否对一般地情况成立
引用
补充对不等式的证明:
引理一:
x≤ex−1
证明:
如果存在xi=0,那么显然成立
若任意xi>0,令
a=∑ni=1xin>0
对任意xi有
xia≤exia−1
所有式子相乘得到
∏ni=1xian≤e∑ni=1xia−n=en−n=1
an≥n∏i=1xi
(∑ni=1xin)n≥n∏i=1xi
Qn:先将n−1个盘子挪到C,将第n个盘子挪到B,再将n−1个盘子挪到B
Qn=Rn−1+1+Rn−1=2Rn−1+1
Rn:将n−1个盘子挪到A,将第n个盘子挪到C,将n−1个盘子挪到B,将第n个盘子挪到A,将n−1个盘子挪到A
Rn=Rn−1+1+Qn−1+1+Rn−1=Qn+Qn−1+1
a.
Pn=2Pn−1+2=2n+1−2
b.
注意,只需要在最后恢复,经偶数次a中放置即可恢复顺序
Qn=4Pn−1+3=4∗(2n−2)+3=2n+2−5
Pn=2Pn−1+mn=n∑i=12n−imi
每条Z比三条直线少了5块区域
Fn=L3n−5n=3n(3n+1)2−5n+1=9n2−7n+22
或,第n个折线与前n−1条折线每条最多有9个交点,共计最多9n−9个交点,可新增9n−8个区域
Fn=Fn−1+9n−8=9n2−7n+22$
新切一刀增加的空间数量为切面上直线划分的二维平面数量
Pn=Pn−1+Ln−1
类似的,设Xn是一条直线上n个点所确定的一维区域的最大个数,有
Ln=Ln−1+Xn−1
更有趣的:
Xn=(n0)+(n1)
Ln=(n0)+(n1)+(n2)
Pn=(n0)+(n1)+(n2)+(n3)
符合上述规律:
Pn=Pn−1+Ln−1=(n−10)+(n−11)+(n−12)+(n−13)+(n−10)+(n−11)+(n−12)
=(n−10)+((n−10)+(n−11))+((n−11)+(n−12))+((n−12)+(n−13))
=(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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 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】