思路主要参照了知乎这个话题下德安城和安堇然的回答。自己再写一遍主要是为了加深理解。

首先直接给出结论:
在d维空间内,对于被切中的d维立体,每一刀将造成d-1维的划痕,将该d维立体分成两部分,则切n刀后得到的块数最多为:

f(d,n)=Σdk=0Ckn

f(d,n)=\Sigma_{k=0}^{d}C_n^k
其中,d表示维数,可以从0开始取,n表示切的刀数。

为了推导过程表述方便,我们要先给出一个符号定义:

nk−=n∗(n−1)∗⋯∗(n−k+1)

n^{\underline k}=n*(n-1)*\cdots*(n-k+1)
当 n=kn=k时,即上式等于 n!n!

我们再证明一个引理:

Σn−1r=1rk−=nk+1−−−k+1

\Sigma_{r=1}^{n-1}r^{\underline k}=\frac{n^{\underline {k+1}}}{k+1}
方法是数学归纳法。

  • 首先由于当k>rk>r时,rk−=0r^{\underline k}=0,所以n≤kn\leq k时,结果是0
  • 所以我们从n=k+1n=k+1时开始考虑: 此时
    左式=kk−=k!左式=k^{\underline k}=k!,
    右式=(k+1)k+1k+1=(k+1)!k+1=k!=左式右式=\frac{(k+1)^{k+1}}{k+1}=\frac{(k+1)!}{k+1}=k!=左式
    得证:n=k+1n=k+1时,Σn−1r=1rk−=nk+1−−k+1\Sigma_{r=1}^{n-1}r^{\underline k}=\frac{n^{\underline {k+1}}}{k+1},
  • 令n=n+1
    左式=nk−+Σn−1r=1rk−=nk−+nk+1−−k+1=(k+1)∗nk−+nk+1−−k+1左式=n^{\underline k}+\Sigma_{r=1}^{n-1}r^{\underline k}=n^{\underline k}+\frac{n^{\underline {k+1}}}{k+1}=\frac{(k+1)*n^{\underline k}+n^{\underline {k+1}}}{k+1}
    由于(k+1)∗nk−=(k+1)∗n∗(n−1)∗⋯∗(n−k+1)(k+1)*n^{\underline k}=(k+1)*n*(n-1)*\cdots*(n-k+1)
    且nk+1−−−=n∗(n−1)∗⋯∗(n−k+1)∗(n−k)n^{\underline {k+1}}=n*(n-1)*\cdots*(n-k+1)*(n-k)
    所以:(k+1)∗nk−+nk+1−−−=(n−k+k+1)∗nk−=(n+1)k−(k+1)*n^{\underline k}+n^{\underline {k+1}}=(n-k+k+1)*n^{\underline k}=(n+1)^{\underline k}
    所以在n=n+1n=n+1时,Σnr=1rk−=(n+1)k+1−−k+1\Sigma_{r=1}^{n}r^{\underline k}=\frac{(n+1)^{\underline {k+1}}}{k+1}
  • 综上所述,Σn−1r=1rk−=nk+1−−k+1\Sigma_{r=1}^{n-1}r^{\underline k}=\frac{n^{\underline {k+1}}}{k+1}

然后我们考虑切分d维立体图形的过程

  • d=0d=0,此时f(0,n)=1f(0,n)=1,这个应该比较显然
  • d=1d=1,此时f(1,n)=n+1f(1,n)=n+1,直观来讲,就是n个点可以将一条线切成n+1段 ,这个结果也可以表示为
    f(1,n)=f(1,n−1)+f(0,n)

    f(1,n)=f(1,n-1)+f(0,n)

  • d=2d=2,此时我们假设已经切了n-1刀,最多已经形成了f(2,n−1)f(2,n-1)个小平面。为了能够让第n条割线割出最多的小平面,我们应当让第n条直线与之前的n-1条直线都有交点。
    如下:是一个正方形平面已经被4条(黑色)直线最大化分割后,添加第5条(蓝色)直线的方法:

    黄色区域是产生新平面的区域,我们可以将黄色区域抽象化为一条直线段,那4条黑色的直线将这条线段分割成了f(1,4)=4f(1,4)=4段,我们第5条线将这条小平面构成的抽象线段的每一小段都分成了两份,所以平面增加数为:f(1,4)f(1,4)。
    以此类推,我们就得到了d=2d=2情况下的最大分割数的递推公式:

    f(2,n)=f(2,n−1)+f(1,n−1)

    f(2,n)=f(2,n-1)+f(1,n-1)

  • d=3d=3时,我们同样假设已经有n-1个平面已经将一个立方体最大化分割了,这时我们要加入第n个平面,这种情况下,我们也可以让第n个平面穿过其余的n-1个平面,其路径上的小立体都会被分割成两块,所以增加的数量就是f(2,n−1)f(2,n-1),
    由此,我们得到了d=3d=3情况下的最大分割数递推公式:

    f(3,n)=f(3,n−1)+f(2,n−1)

    f(3,n)=f(3,n-1)+f(2,n-1)

  • ⋯\cdots
  • 那么类比得到的递推式是:
    f(d,n)=f(d,n−1)+f(d−1,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,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)=f(d,0)+\Sigma_{x=1}^{n}[f(d,x)-f(d,x-1)]=1+\Sigma_{x=1}^{n-1}f(d-1,x)

在德安城的回答中,他设了f(d,n)=Σdk=0ad,k∗nk−f(d,n)=\Sigma_{k=0}^{d}a_{d,k}*n^{\underline k},这一步非常巧妙,直接导致了最后解出来的ad,ka_{d,k}非常简洁,我还没有参透。
所以上式可以化为:

f(d,n)=1+Σn−1x=1Σd−1k=0ad−1,k∗xk−

f(d,n)=1+\Sigma_{x=1}^{n-1}\Sigma_{k=0}^{d-1}a_{d-1,k}*x^{\underline k}

f(d,n)=1+Σd−1k=0(ad−1,k∗Σn−1x=1xk−)

f(d,n)=1+\Sigma_{k=0}^{d-1}(a_{d-1,k}*\Sigma_{x=1}^{n-1}x^{\underline k})
在上面的引理中已经证明了

Σn−1x=1xk−=nk+1−−−k+1

\Sigma_{x=1}^{n-1}x^{\underline k}=\frac{n^{\underline {k+1}}}{k+1}
所以

f(d,n)=1+Σd−1k=0ad−1,k∗nk+1−−−k+1

f(d,n)=1+\Sigma_{k=0}^{d-1}a_{d-1,k}*\frac{n^{\underline {k+1}}}{k+1}

f(d,n)=1+Σdk=1ad−1,k−1∗nk−k

f(d,n)=1+\Sigma_{k=1}^{d}a_{d-1,k-1}*\frac{n^{\underline {k}}}{k}
又因之前设了:

f(d,n)=Σdk=0ad,k∗nk−=1+Σdk=1ad−1,k−1∗nk−

f(d,n)=\Sigma_{k=0}^{d}a_{d,k}*n^{\underline k}=1+\Sigma_{k=1}^{d}a_{d-1,k-1}*n^{\underline k}
比较得:

ad,k=ad−1,k−1k=ad−2,k−2k(k−1)=⋯=1k!

a_{d,k}=\frac{a_{d-1,k-1}}{k}=\frac{a_{d-2,k-2}}{k(k-1)}=\cdots=\frac{1}{k!}
所以

f(d,n)=Σdk=0nk−k!=Σdk=0Ckn

f(d,n)=\Sigma_{k=0}^{d}\frac{n^{\underline k}}{k!}=\Sigma_{k=0}^{d} C_{n}^{k}

关于立体图形切n刀最多切多少块的结论及推导相关推荐

  1. 切蛋糕能最多切多少块的问题

    本文只说明垂直桌面切的水平情况,不讨论空间问题. Problem Description 一个人在吃蛋糕前都会随机决定要切几刀,而且保证切完之后得到最多块蛋糕(只能垂直于底面切).有时候切得太多他自己 ...

  2. n刀切蛋糕问题(最多切多少块c语言)

    分析:第一刀两块每切一刀多i块 //n刀切蛋糕问题,最多多少块 #include<stdio.h> int main(){int n,i;//i刀int cake;printf(" ...

  3. 【每周一算】一张大饼切n刀,最多可以切多少块?

    这是无意中在一个录音中听到的一个题目:一张很大很大的饼,给你一把足够长的刀,切n刀,最多可以得多少块? 这个问题听起来很简单,还是用程序记录一下吧. 解题:一刀都不切,有1块饼: 切第一刀,得2块饼: ...

  4. 切蛋糕n刀最多切成几分

    这道题要一步一步来的: (1) n条直线最多分平面问题 题目大致如:n条直线,最多可以把平面分为多少个区域. 析:可能你以前就见过这题目,这充其量是一道初中的思考题.但一个类型的题目还是从简单的入手, ...

  5. c语言 一张圆薄饼,切100刀,最多能切成多少块 c语言,甜甜圈上切两刀,最多能切成多少块?...

    作者:卜辰璟 所属院系 数学科学系 关键词:甜甜圈切块 几何 摘要 在甜甜圈上切两刀,最多能切成多少块? 这是一个有趣的问题,但是寻找答案的过程体现了解决数学问题的一般流程:通过直觉猜想出可能的方法和 ...

  6. java 圆类 圆锥类_以圆类 Circle 及立体图形类 Solid 为基础设计圆锥类 Cone

    学习内容:以圆类 Circle 及立体图形类 Solid 为基础设计圆锥类 Cone 代码示例: import java.util.Scanner; class Point4{ private dou ...

  7. 利用PCL库做简单的三维立体图形

    利用PCL库画简单的三维立体图形需要知道各种图形的参数方程,然后给每个参数赋值便可以. 圆柱面的参数方程为:x = R*cos(θ); y = R*sin(θ); z = z;其中 θ范围是[-2*P ...

  8. java 图形_java 画立体图形

    参数: xPoints - x 坐标数组. yPoints - y 坐标数组. nPoints - 点的总数. 下面是我的demo程序: import java.awt.Color; import j ...

  9. Java实验项目三——平面图形和立体图形抽象类

    Program:按照下面要求完成类的设计 (1)设计一个平面图形抽象类和一个立体图形抽象类,提供该类对象公共的方法和属性. (2)修改项目三中第2题中所设计的球类.圆柱类,圆锥类.矩形类.三角形类.圆 ...

最新文章

  1. 关于OpenCV中常见函数用法总结
  2. 自己动手写C语言编译器(5)
  3. golang 函数结束后 goroutine退出机制
  4. linux module原理,NodeJS的模块原理
  5. [python 学习] requests 库的使用
  6. oracle 分区字符转换,Oracle 普通表与分区表转换
  7. unittest Module中的常用6种断言方法
  8. python统计行号_用Python实现两个文件的不同行的编号
  9. python变量的数据类型
  10. 监控服务器系统密码忘了怎么办,监控服务器登录密码忘记了怎么办
  11. 【二十六】redis之事务、事务特性、与pipeline比较,与Lua脚本比较
  12. 1236. Find All Numbers Disappeared in an Array
  13. uci2019计算机录取,美国加州大学这九所分校2019最新录取数据
  14. 【实战总结】根据地图经纬度及范围查询坐标点信息
  15. Html HBuilder封装APP
  16. 关于安装cmd命令行安装pyinstaller库失败的解决方法
  17. 被高通裁员两次,清华毕业华裔工程师跳楼身亡!中年IT男,为何这么难?
  18. CDR X7 限时3折618年中大促,是时候出手了!
  19. 家里宽带都200M了,为什么网速这么慢?简单设置一下
  20. 【工具】批量修改文件名

热门文章

  1. Maven系列学习(2)——java project的创建
  2. 阿里云服务器申请流程
  3. android sdk引入 微信分享_Android分享 ShareSDK微信分享详解
  4. 空间几何变换 之 齐次坐标
  5. C primer plus(第六版)第五章源代码
  6. 注解和注解处理器APT
  7. ArcGIS使用(二)ArcGIS加载天地图
  8. non-compatible bean definition of same name and class [com.echo.util.FileUploadDispatcher]
  9. BASNet: Boundary-Aware Salient Object Detection论文学习
  10. 一分二网线连接器正确使用方法