您的位置:首页 > 其它

关于立体图形切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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  切蛋糕 具体数学