关于立体图形切n刀最多切多少块的结论及推导
2018-02-08 19:26
225 查看
思路主要参照了知乎这个话题下德安城和安堇然的回答。自己再写一遍主要是为了加深理解。
首先直接给出结论:
在d维空间内,对于被切中的d维立体,每一刀将造成d-1维的划痕,将该d维立体分成两部分,则切n刀后得到的块数最多为:
f(d,n)=Σdk=0Ckn
其中,d表示维数,可以从0开始取,n表示切的刀数。
为了推导过程表述方便,我们要先给出一个符号定义:nk−=n∗(n−1)∗⋯∗(n−k+1)
当n=k时,即上式等于n!
我们再证明一个引理:
Σn−1r=1rk−=nk+1−−−k+1
方法是数学归纳法。
首先由于当k>r时,rk−=0,所以n≤k时,结果是0
所以我们从n=k+1时开始考虑: 此时
左式=kk−=k!,
右式=(k+1)k+1k+1=(k+1)!k+1=k!=左式
得证:n=k+1时,Σn−1r=1rk−=nk+1−−k+1,
令n=n+1
左式=nk−+Σn−1r=1rk−=nk−+nk+1−−k+1=(k+1)∗nk−+nk+1−−k+1
由于(k+1)∗nk−=(k+1)∗n∗(n−1)∗⋯∗(n−k+1)
且nk+1−−−=n∗(n−1)∗⋯∗(n−k+1)∗(n−k)
所以:(k+1)∗nk−+nk+1−−−=(n−k+k+1)∗nk−=(n+1)k−
所以在n=n+1时,Σnr=1rk−=(n+1)k+1−−k+1
综上所述,Σn−1r=1rk−=nk+1−−k+1
然后我们考虑切分d维立体图形的过程
d=0,此时f(0,n)=1,这个应该比较显然
d=1,此时f(1,n)=n+1,直观来讲,就是n个点可以将一条线切成n+1段 ,这个结果也可以表示为f(1,n)=f(1,n−1)+f(0,n)
d=2,此时我们假设已经切了n-1刀,最多已经形成了f(2,n−1)个小平面。为了能够让第n条割线割出最多的小平面,我们应当让第n条直线与之前的n-1条直线都有交点。
如下:是一个正方形平面已经被4条(黑色)直线最大化分割后,添加第5条(蓝色)直线的方法:
黄色区域是产生新平面的区域,我们可以将黄色区域抽象化为一条直线段,那4条黑色的直线将这条线段分割成了f(1,4)=4段,我们第5条线将这条小平面构成的抽象线段的每一小段都分成了两份,所以平面增加数为:f(1,4)。
以此类推,我们就得到了d=2情况下的最大分割数的递推公式:f(2,n)=f(2,n−1)+f(1,n−1)
d=3时,我们同样假设已经有n-1个平面已经将一个立方体最大化分割了,这时我们要加入第n个平面,这种情况下,我们也可以让第n个平面穿过其余的n-1个平面,其路径上的小立体都会被分割成两块,所以增加的数量就是f(2,n−1),
由此,我们得到了d=3情况下的最大分割数递推公式:f(3,n)=f(3,n−1)+f(2,n−1)
⋯
那么类比得到的递推式是:f(d,n)=f(d,n−1)+f(d−1,n−1)
我们现在得到了d维图形,切了x刀的递推式(其实到这里,计算复杂度已经跟刚开始的结论一样了,主要是感觉要推不出解析解了23333):f(d,x)=f(d,x−1)+f(d−1,x−1)
移项得到:f(d,x)−f(d,x−1)=f(d−1,x−1)
进行求和得到:f(d,n)=f(d,0)+Σnx=1[f(d,x)−f(d,x−1)]=1+Σn−1x=1f(d−1,x)
在德安城的回答中,他设了f(d,n)=Σdk=0ad,k∗nk−,这一步非常巧妙,直接导致了最后解出来的ad,k非常简洁,我还没有参透。
所以上式可以化为:
f(d,n)=1+Σn−1x=1Σd−1k=0ad−1,k∗xk−
f(d,n)=1+Σd−1k=0(ad−1,k∗Σn−1x=1xk−)
在上面的引理中已经证明了
Σn−1x=1xk−=nk+1−−−k+1
所以
f(d,n)=1+Σd−1k=0ad−1,k∗nk+1−−−k+1
f(d,n)=1+Σdk=1ad−1,k−1∗nk−k
又因之前设了:
f(d,n)=Σdk=0ad,k∗nk−=1+Σdk=1ad−1,k−1∗nk−
比较得:
ad,k=ad−1,k−1k=ad−2,k−2k(k−1)=⋯=1k!
所以
f(d,n)=Σdk=0nk−k!=Σdk=0Ckn
首先直接给出结论:
在d维空间内,对于被切中的d维立体,每一刀将造成d-1维的划痕,将该d维立体分成两部分,则切n刀后得到的块数最多为:
f(d,n)=Σdk=0Ckn
其中,d表示维数,可以从0开始取,n表示切的刀数。
为了推导过程表述方便,我们要先给出一个符号定义:nk−=n∗(n−1)∗⋯∗(n−k+1)
当n=k时,即上式等于n!
我们再证明一个引理:
Σn−1r=1rk−=nk+1−−−k+1
方法是数学归纳法。
首先由于当k>r时,rk−=0,所以n≤k时,结果是0
所以我们从n=k+1时开始考虑: 此时
左式=kk−=k!,
右式=(k+1)k+1k+1=(k+1)!k+1=k!=左式
得证:n=k+1时,Σn−1r=1rk−=nk+1−−k+1,
令n=n+1
左式=nk−+Σn−1r=1rk−=nk−+nk+1−−k+1=(k+1)∗nk−+nk+1−−k+1
由于(k+1)∗nk−=(k+1)∗n∗(n−1)∗⋯∗(n−k+1)
且nk+1−−−=n∗(n−1)∗⋯∗(n−k+1)∗(n−k)
所以:(k+1)∗nk−+nk+1−−−=(n−k+k+1)∗nk−=(n+1)k−
所以在n=n+1时,Σnr=1rk−=(n+1)k+1−−k+1
综上所述,Σn−1r=1rk−=nk+1−−k+1
然后我们考虑切分d维立体图形的过程
d=0,此时f(0,n)=1,这个应该比较显然
d=1,此时f(1,n)=n+1,直观来讲,就是n个点可以将一条线切成n+1段 ,这个结果也可以表示为f(1,n)=f(1,n−1)+f(0,n)
d=2,此时我们假设已经切了n-1刀,最多已经形成了f(2,n−1)个小平面。为了能够让第n条割线割出最多的小平面,我们应当让第n条直线与之前的n-1条直线都有交点。
如下:是一个正方形平面已经被4条(黑色)直线最大化分割后,添加第5条(蓝色)直线的方法:
黄色区域是产生新平面的区域,我们可以将黄色区域抽象化为一条直线段,那4条黑色的直线将这条线段分割成了f(1,4)=4段,我们第5条线将这条小平面构成的抽象线段的每一小段都分成了两份,所以平面增加数为:f(1,4)。
以此类推,我们就得到了d=2情况下的最大分割数的递推公式:f(2,n)=f(2,n−1)+f(1,n−1)
d=3时,我们同样假设已经有n-1个平面已经将一个立方体最大化分割了,这时我们要加入第n个平面,这种情况下,我们也可以让第n个平面穿过其余的n-1个平面,其路径上的小立体都会被分割成两块,所以增加的数量就是f(2,n−1),
由此,我们得到了d=3情况下的最大分割数递推公式:f(3,n)=f(3,n−1)+f(2,n−1)
⋯
那么类比得到的递推式是:f(d,n)=f(d,n−1)+f(d−1,n−1)
我们现在得到了d维图形,切了x刀的递推式(其实到这里,计算复杂度已经跟刚开始的结论一样了,主要是感觉要推不出解析解了23333):f(d,x)=f(d,x−1)+f(d−1,x−1)
移项得到:f(d,x)−f(d,x−1)=f(d−1,x−1)
进行求和得到:f(d,n)=f(d,0)+Σnx=1[f(d,x)−f(d,x−1)]=1+Σn−1x=1f(d−1,x)
在德安城的回答中,他设了f(d,n)=Σdk=0ad,k∗nk−,这一步非常巧妙,直接导致了最后解出来的ad,k非常简洁,我还没有参透。
所以上式可以化为:
f(d,n)=1+Σn−1x=1Σd−1k=0ad−1,k∗xk−
f(d,n)=1+Σd−1k=0(ad−1,k∗Σn−1x=1xk−)
在上面的引理中已经证明了
Σn−1x=1xk−=nk+1−−−k+1
所以
f(d,n)=1+Σd−1k=0ad−1,k∗nk+1−−−k+1
f(d,n)=1+Σdk=1ad−1,k−1∗nk−k
又因之前设了:
f(d,n)=Σdk=0ad,k∗nk−=1+Σdk=1ad−1,k−1∗nk−
比较得:
ad,k=ad−1,k−1k=ad−2,k−2k(k−1)=⋯=1k!
所以
f(d,n)=Σdk=0nk−k!=Σdk=0Ckn
相关文章推荐
- 关于图形数学的基本问题,沿任意轴旋转,或者旋转坐标系的推导过程
- 关于100根香蕉,猴子要背回50米远的家,一次最多只能背50根香蕉,但猴子每走1米后就要吃1根香蕉,问猴子最多可以背多少根香蕉回家?
- 最多有多少个点在一条直线上
- 关于树或二叉树的一些定理和结论
- JVM最多能创建多少个线程: unable to create new native thread
- 现在手机解锁方式有多少种?例如密码、图形、声纹、面部识别。
- 关于新版PCI DSS,你了解多少?
- 10个台阶,每次最多上2阶,有多少种上法?
- Shell最多可以输入多少个参数?
- C语言:每瓶汽水1元,两个空瓶可以置换一瓶汽水,现在有20元,最多能喝多少瓶汽水。
- 关于查看汉字多少的计算方法 杭电2030
- 关于众筹的规则你了解多少?
- 关于原码反码补码的相关结论
- Windows一个文件夹下面最多可以放多少文件
- 关于自定义View时,画图形和图片时抗锯齿的使用的问题
- 关于图形的判断
- 关于固定高度和宽度,文字多少控制问题
- 关于常见排序算法的稳定性分析和结论
- 干货:关于购物中心的十个为什么,你知道多少个?