概述

Burnside引理(又称Burnside’s Lemma或Cauchy-Frobenius引理)是组合计数中处理对称性的重要工具。1

核心思想:在计数有限集合的轨道数时,可以按”保持元素不动”的方式统计,而非枚举轨道。

基本概念

群作用(Group Action)

是一个有限群, 是一个集合。群 上的作用是一个映射:

满足:

  • (单位元)
  • (结合律)

轨道与稳定子群

  • 轨道(Orbit) 的轨道是 作用下所有能到达的元素集合
  • 稳定子群(Stabilizer):使 不动的元素集合

不动点

对于 ,记 不动点集合。

Burnside引理

设有限群 作用在有限集合 上,则 的轨道数为:

即:轨道数等于各元素不动点数目的平均值

证明思路

由轨道-稳定子群定理:,对每个轨道求和可得。

Polya计数定理

Polya定理是Burnside引理的推广,用置换群共轭类来简化计算。

置换的轮换表示

的置换写成轮换分解形式,如 包含:

  • 1个1-轮换
  • 1个2-轮换
  • 1个3-轮换

为置换 -轮换的个数。

Polya定理

设置换群 作用于 个对象,用 种颜色染色,则染色方案数为:

其中 是置换 的轮换总数。

应用示例

例1:项链旋转计数

问题:用 种颜色给 颗珠子的项链染色,考虑旋转但不考虑翻转,有多少种方案?

分析:旋转群 ,其中旋转 将第 颗珠子移到第 颗。

旋转 的不动点要求所有珠子颜色相同,因此:

  • (恒等旋转): 个不动点
  • :若 互质,轮换数为 (每个珠子单独一轮换);否则轮换数为

由Burnside引理:

例2:正方形旋转群染色

问题:用 种颜色给正方形的四个顶点染色,考虑旋转但不考虑翻转,有多少种方案?

分析:旋转群

旋转角度轮换结构不动点个数
(恒等)4个1-轮换
1个4-轮换
2个2-轮换
1个4-轮换

答案:

例3:立方体染色(考虑翻转)

立方体的12个面转动,包括:

  • 恒等:1个, 不动点
  • 90°面中心旋转:6个,各 不动点
  • 180°面中心旋转:3个,各 不动点
  • 120°顶点旋转:8个,各 不动点

由Polya定理可得总方案数。

代码实现

#include <bits/stdc++.h>
using namespace std;
 
long long mod_pow(long long a, long long e) {
    long long r = 1;
    while (e) {
        if (e & 1) r = r * a % MOD;
        a = a * a % MOD;
        e >>= 1;
    }
    return r;
}
 
// 计算置换的轮换数
int count_cycles(int n, const vector<int>& perm) {
    vector<int> vis(n, 0);
    int cycles = 0;
    for (int i = 0; i < n; i++) {
        if (!vis[i]) {
            cycles++;
            int j = i;
            while (!vis[j]) {
                vis[j] = 1;
                j = perm[j];
            }
        }
    }
    return cycles;
}
 
// Burnside引理:计算轨道数
long long burnside(int n, const vector<vector<int>>& group) {
    long long sum = 0;
    for (const auto& perm : group) {
        sum += mod_pow(m, count_cycles(n, perm));
    }
    return sum / group.size() % MOD;
}

常见置换群

对象数置换类型轮换结构
项链旋转旋转 个轮换
项链翻转翻转 为奇数: 个2-轮换; 为偶数: 个2-轮换
正方形翻转4沿对角线/中线2个1-轮换+1个2-轮换,或2个2-轮换
立方体旋转6面面中心/顶点旋转多种结构

参考


Last updated: 2026-04-06

Footnotes

  1. 本内容参考 OI-Wiki Burnside引理与Polya计数,内容经过验证和扩展。