堂前燕
数学 · 初中 /高中 · 分形 · 迭代 · 概率 · 杨辉三角 · 维数

谢尔宾斯基三角 · 三条不同的路,走到同一个图形

递归挖洞、随机投点、杨辉三角涂奇数——三种毫不相干的做法,画出的是同一个图形。面积趋于 0,点却处处都在;维数 log3/log2 ≈ 1.585。

挖洞:一变三

取一个等边三角形,连三边中点,它被分成四个小三角形。把中间那个挖掉,对剩下的三个重复同样的动作。

nn 层剩下 3n3^n 个小三角形,每个面积是上一层的 1/41/4。所以剩余面积

An=3n(14)n=(34)nn0.A_n = 3^n \cdot \left(\tfrac{1}{4}\right)^n = \left(\tfrac{3}{4}\right)^n \xrightarrow[n\to\infty]{} 0 .

面积趋于 0,但没有任何一个点被”挖光”:三角形的三个顶点、每一层的中点,永远留在图里,而且留下的点有不可数无穷多个。一个面积为零、却密密麻麻处处是点的集合。

混沌游戏:随机也能画出确定的图

换个做法,完全不提”挖洞”:

  1. 记下三角形的三个顶点 A,B,CA, B, C
  2. 随便选一个起点;
  3. 随机挑一个顶点,走到当前点与它的中点,把落点画上;
  4. 重复第 3 步几万次。

每一步都靠掷骰子,可落点拼出来的偏偏是同一个谢尔宾斯基三角。切到「混沌游戏」看着它一点点浮现;把速度滑到最慢,就能一步一步看清楚:空心圈是三个顶点,实心的那个是这次抽中的,虚线指向它,红点走到一半,走过的路留下一道渐淡的残影。

为什么?因为”取中点”这个动作把整个平面缩小到一半,再平移到某个顶点附近。三个顶点对应三个这样的映射 fA,fB,fCf_A, f_B, f_C。谢尔宾斯基三角 SS 恰好满足

S=fA(S)fB(S)fC(S),S = f_A(S) \cup f_B(S) \cup f_C(S),

它是这三个映射唯一的”不动集”。不管从哪儿出发、按什么顺序掷骰子,点都会被越吸越近——这类系统叫迭代函数系统SS 是它的吸引子。

杨辉三角:把奇数涂黑

第三条路和几何毫无关系。写出杨辉三角,把组合数 (nk)\binom{n}{k}奇数的位置涂黑、偶数留白,行数越多,图案越像那个三角形。

判断奇偶不必真去算阶乘。库默尔定理给了一个二进制判据:

(nk) 是奇数    k 的二进制中每个 1,n 在同一位上也是 1.\binom{n}{k} \text{ 是奇数} \iff k \text{ 的二进制中每个 1,} n \text{ 在同一位上也是 1}.

写成一行代码就是 (k & ~n) === 0——这也正是这个演示里用的判断。

于是第 nn 行的奇数个数是 2s(n)2^{s(n)},其中 s(n)s(n)nn 的二进制里 1 的个数。前 2m2^m 行的奇数总数是 3m3^m——又出现了 3 的幂,和挖洞那条路对上了。

维数:1 和 2 之间

把图形放大 2 倍,看到 3 个和原来一样的副本。设维数为 DD,则 2D=32^D = 3

D=log3log21.585.D = \frac{\log 3}{\log 2} \approx 1.585 .

比线(1 维)多,比面(2 维)少。也难怪:它的面积是 0(所以不到 2 维),但又稠密得不像一条曲线(所以超过 1 维)。

一类问题的通用识别

  • 看到”放大 aa 倍出现 bb 个副本”,就可以写 aD=ba^D = b,维数 D=logb/logaD = \log b / \log a
  • 看到”每一步个数 ×3、尺寸 ×1/2”,总量就是等比数列,敛散只看公比。
  • 看到随机过程画出确定图形,找那几个”缩小 + 平移”的映射,图形就是它们的不动集。

顺手对照一下科赫雪花:那边周长发散、面积收敛;这边面积收敛到 0、点却处处都在。两者的算法都是”等比数列 + 自相似”这一招。