圆桌这事儿,有时候真挺带感的,但算起来也就是个数学题。大量人一听“圆桌排列”,第一反应就是 $n!/n$,认定 $n$ 个东西挤在一起,不管如何转,结局都一样,故此只除一个。
这就好比你在开会,大家围成一圈聊完天,椅子转个圈,哪位还是哪位,仿佛没啥变化。但在实际搞事件的时候,这个“转圈圈”往往意味着身份要么顺序变了。
比如你是组长,好不好办轮到你,结局你坐下后,出于椅子旋转了 20 度,你原本的“首位”变成了旁边那个同事,这在逻辑上绝对不中,务必得重新排。 这就引出了圆桌排列最核心的逻辑:旋转对称。
本质上,圆桌上没人有绝对的“第一”,大家站成一组,只要整体不动,内部顺序随意指定。
比如三兄弟 A、B、C,摆成一排 A-B-C,换个顺序变成 A-C-B,只要整体没变,实际上本质是一样的。
这就是为啥在圆桌上做难题,一般会把其中一个位置设为“主席位”要么“特殊点”。一旦有了这个固定点,剩下的 $n-1$ 个人就要在剩下的 $n-1$ 个位置上全排列,也就是 $(n-1)!$。 举个最好办的例子,假设三兄弟 A、B、C 要坐圆桌,要是只看整体,ABC 和 BCA 是一样的。
要是规定 A 是固定的,那 B 和 C 的排列就只剩一种了(AB 或 AC 代表一种相对顺序,AB 和 BA 在圆桌上实际上是一样的)。
要是你强行把 AB 和 BA 算作两种,那就是把旋转对称给算重了。
故此标准解法就是:固定一个人或一个特定点,算剩下大家的相对顺序,那就是 $(n-1)!$。 要是不想定哪位当主席,那就要寻思旋转不变性。
这时候模型略微复杂点,实际上就是把每一个点作为“原点”来算。想象一下在圆周上打点,每个点都是旋转轴,每个轴对应一个排列。一共有 $n$ 个点,每个点都能作为中心旋转,故此算下来就是 $n$ 个 $(n-1)!$。把这些加起来,总方案数就是 $n times (n-1)!$。
不过这个数据在现实里往往会被除以 $n$,出于整个圆转动 360 度要么任意角度,大家都被视为同一个集合。最终公式就稳了:$n(n-1)!$。 数据上,这个公式挺有意思。
要是只有三个人,$3 times 2! = 6$ 种坐法。
要是扩展到四个人,$4 times 3! = 4 times 6 = 24$ 种。
这个增长速度实际上挺慢的,跟线性排列一样,都是指数级。
不过一旦到了百人以上,计算量就爆炸了。
比如 10 个人,就是 $10 times 9!$,这个数字大到无法用一般/平平笔算,得靠计算器要么程序。 这也让我们明白,为啥圆桌难题在计算机领域时常被拿来测试算法。
一般/平平的线性排列,代码量可能只要几行,逻辑也好办:写个循环,$sum$ 加上某个值。但圆桌上,要是你有人能想到把大家分成 $(n/2) times 2$ 这种对数组,要么利用矩阵置换的思想,复杂度就能降下来。
比如 100 个人不用迭代几千次,可能只需求几次乘加运算。
这就是数学公式背后的算力红利,也是它比线性排列更“漂亮”的缘由。 还有个有趣的点,就是它和握手难题的联系。握手难题里,两个人握一下手算一种,圆桌上这种“相对握手”和“绝对握手”的转换,也是同样的数学结构。在编程面试里,时常遇到这种题,坑主要在“哪位固定”和“旋转是否等效”上。大量人死磕 $n!$,结局错了;要么死磕 $(n-1)!$,又忽略了旋转对称。
这时候就得把 $(n-1)! times n$ 这个公式当成一个“黑盒”直接利用,别自己想它是如何来的,直接套公式就行。 最终还得提一下,别看数学上挺完美,但现实里“圆桌”往往是个笑话。物理上圆是凸的,没法无限转;逻辑上,圆桌确实消除了绝对顺序,但一旦引入了“会议主席”、“轮值发言”要么“顺时针优先”这种隐含规则,它就瞬间从纯数学难题变成了社交陷阱。大家坐在一起,光靠公式解不出哪位该先讲话,还得靠情商和圆滑。
故此,别总想着用 $n times (n-1)!$ 去算哪位该先开口,要不就你确定自己就是那个不被动的观察者。