n维空间切k刀

1. 引

今天做了一道题:

有一个大西瓜, 用水果刀平整地切, 总共切9刀, 最多能切成多少份, 最少能切成多少份?

最少很好求,就是 10 份呗。关键是最多是多少。

这个问题可以一般化为一个很经典的数学问题:

k 个超平面可以把 n 维空间最多分为多少部分?

我们定义 \(f(n,\ k)\) 表示该问题的解,首先我们会给出这个解的递推公式,然后给出其通项公式。

2. 递推公式

首先考虑平凡问题解:

  1. k 个点可以最多把一条直线分成几个部分?
    \(k + 1\)

  2. 1 个超平面可以最多把 n 维空间分成几个部分?
    2 个

所以: \[ \begin{cases} f(n,\ 1) = 2\\ f(1,\ k) = k + 1 \end{cases} \]

再考虑一般情况 \(f(n,\ k)\)。我们把它分成两个部分来看:

  1. 前面 \(k - 1\) 刀把空间分成了几份?

我们不知道,但是我们可以用 \(f(n,\ k - 1)\) 来表示。

  1. \(k\) 刀给空间多划分了几份?

这个问题就比较关键了。为了方便理解,我们可以从最简单的二维世界开始讲。如果我们已经在平面上划了 \(k - 1\) 条线,现在划第 \(k\) 条线,且需要尽可能多的分割平面应该怎么做呢?

显然,稍加思考就会发现这是一个贪心问题,可以贪心的求解:只需要让新的一条线同之前所有的线都相交就可以了。原本的 \(k - 1\) 条线会把新的线分割成 \(k\) 个部分,然后新增出 \(k\) 个空间出来。

如下图所示,原本三条直线把空间分为 7 个部分,新增了一条线后,一下子多出来了 4 个空间。

同样的道理扩展到 n 维空间也是一样的。原本已经有了 \(f(n,\ k - 1)\) 个部分,多了一个超平面后,原本的超平面把新的超平面分割为 \(f(n - 1,\ k - 1)\) 个部分,因此也会多处同样数量的子空间出来

综上所述,我们有:

\[ \begin{cases} f(n,\ 1) = 2\\ f(1,\ k) = k + 1\\ f(n,\ k) = f(n,\ k - 1) + f(n - 1,\ k - 1) & n \geqslant 2 \end{cases} \]

3. 通项公式

通项公式的具体推导很复杂,具体可以见 这里

这里直接给出结论:

\[ f(n,\ k) = \sum_{i = 0}^{n}\large C_k^i \]

比如在三维空间里,9 个平面最多可以把空间分为:

\[ \large C_9^0 + C_9^1 + C_9^2 + C_9^3 = 130 \]

即 130 个部分。