图 1:本文封面,单位正方形里的两块青色可行区域就是答案的形状。
先说明属性:这是一篇经典题解析,题目出自本地历史面试资料,与任何公司的当前招聘无关。一条长为 1 的线段,独立均匀地随机切两刀,得到的三段能拼成三角形的概率是多少?答案是 1/4。但面试官要的不是这个数字,而是你如何把「概率」一步步翻译成「面积」。
第一步:把「能拼成三角形」翻译成不等式。
三段能构成三角形,当且仅当任意两段之和大于第三段,也就是著名的三角形不等式。设三段长度为 a、b、c,总和 a+b+c=1。把条件 a+b>c 代入 c=1−a−b,得到 a+b>1/2,两边再代入总和关系一化简,等价于 c<1/2。另外两个不等式同理。于是一个对称又好记的结论浮出来:总和为 1 的三段能成三角形,当且仅当每一段都小于 1/2。直觉上也说得通——只要有一段超过一半,另外两段加起来都不够它长,肯定围不拢。
第二步:把随机试验画进单位正方形。
两个切点 X、Y 独立均匀分布在 [0,1] 上,所有可能的结果正好是平面上的点 (x, y),铺满一个单位正方形——这就是几何概型的样本空间。由于取点是均匀的,某个事件的概率就等于它对应区域的面积占正方形总面积的比例;总面积是 1,概率就直接等于面积。问题从「算概率」变成了「量面积」。
第三步:三条约束线一夹,可行域自己浮出来。
先看对角线 y=x 上方的半个正方形,即 x<y 的情形,此时三段长度依次是 x、y−x、1−y。逐条施加「每段小于 1/2」:x<1/2 把可行点压到竖直线 x=1/2 左侧;y−x<1/2 把可行点压到直线 y=x+1/2 下方;1−y<1/2 即 y>1/2 把可行点抬到水平线 y=1/2 上方。三条线围出一个直角边为 1/2 的小直角三角形,顶点在 (0, 1/2)、(1/2, 1/2)、(1/2, 1),面积是 1/2×1/2×1/2=1/8。
剩下半个正方形(x>y)由对称性完全镜像——把 x、y 角色互换,约束一模一样,又贡献一个面积 1/8 的三角形。两块合计 1/4,对角线本身面积为零不影响结果。答案收工。
第四步:让电脑掷一百万次骰子交叉验证。
解析推导再漂亮,也值得用蒙特卡洛模拟复核一次:随机撒点,统计三段都小于 1/2 的频率。
// node triangle.js(Node.js 22 实测)
function trial() {
const x = Math.random(), y = Math.random();
const a = Math.min(x, y), b = Math.max(x, y);
const segs = [a, b - a, 1 - b];
return segs.every(s => s < 0.5); // 三段都小于 1/2 才能成三角形
}
const N = 1_000_000;
let hit = 0;
for (let i = 0; i < N; i++) if (trial()) hit++;
console.log('频率:', hit / N, '解析解:', 0.25);
实测输出:频率 0.2497,与解析解 1/4 吻合到小数点后三位。大数定律在给几何推导背书,这也顺手展示了工程里验证概率结论的标准动作。
图 2:五步推导卡与样本空间里两块各 1/8 的可行区域。
这类题为什么值得准备。
「把随机试验映射成几何区域、用面积比求概率」是几何概型的通用套路,约会等待、随机取点、Buffon 投针类的题目都是同一个模子。它的工程延伸也不小:采样算法的置信度、随机化测试的覆盖率估算,本质都是在高维空间里度量「可行区域的占比」,低维直觉是高维分析的起点。
回到面试现场,建议的答题结构:先报答案 1/4,再按「翻译成不等式 → 画出样本空间 → 约束围出可行域 → 面积比求概率」四步推导,最后主动补一句可以用蒙特卡洛模拟验证。完整讲出推导链条,远比背出数字值钱。如果把题目改成「切三刀、四段能围成四边形」,你会怎么把这个思路推广到三维空间?欢迎聊聊你的想法。