最近几天学习了群论及与其密切相关的burnside引理与polya定理,觉得并没有想象中的那么难。
群的定义见这里:http://baike.baidu.com/link?url=4TeuVkgLQvza-_fSdtr861Gm7j17R08k2CCZiS1XI6c1CFMOsqI4DLnz_i5ApbjgAHBMJLQFnp27ieHZ06J6IpvZvN8akwyk0dtTUX4r2My
置换的定义见这里:http://baike.baidu.com/link?url=68IFmbIQOaSgzXYsXVleZEAttqaohv5gnAvJMK-qKQddjMV6cGSvFEa6S9jgsY4HP2kKMd8Uxyb6HkBIzFiwOyQX_qpo5iPZptKyNfQJpluB-YT1EBUR5mvXvUd3sUnw
很多题目都是问你有多少不同的染色方案,如果一个方案能通过旋转等一系列操作得到另一个方案,那么这两个方案就是相同的方案。对于这类题目就需要burnside引理与polya定理了。
burnside引理:
设G ={a1, a2, a3 …, a|G|}是N={1, 2, 3 …, N}上的置换群,G在N上可引出不同的等价类,其不同的等价类个数为 .
这个引理求解在于求出在所有置换下,有多少种方案在此置换下不变,这样我们就需要遍历所有可能的情况,然后计算不变的方案数。
burnside引理的c很难求,那么能不能找到问题的本质?:即在此置换下不变的方案数?
polya定理:设G ={a1, a2, a3 …, a|G|}是N={1, 2, 3 …, N}上的置换群,现用m种颜色对这N个对象进行染色,其不同的染色方案为
注意这里是对这n个对象标号,然后考虑这些对象之间的置换,c表示这个置换中循环的个数,证明,要求不变的方案数,那么每个循环中一定要染成相同的颜色,有m种颜色,根据乘法原理就是m^c.
看几道例题:
zju1961 Let it Bead
题意:给定颜色种数m和环上的珠子总数n,问有多少种染色方案(通过旋转和翻转相同的算同一种)。
做法:该题一共有两种置换,先考虑旋转:
一共有n种旋转方式,分别为顺时针旋转1~n格,然后可以证明旋转i格所形成的循环个数为gcd(i,n)。
再考虑翻转:
分奇偶考虑:当n为奇数时,n条对称轴,循环个数都是(n+1)/2,当n为偶数时,也有n条对称轴,其中n/2条对应的置换形成的循环个数n/2,其余的形成n/2+1条。
这个题目直接计算即可。
再看一个例题:给定颜色数n和珠子数n,n<=10^9,通过旋转算一种,我们要求的就是sigam(n^(gcd(n,i)-1)),gcd只有根号n种,我们把gcd相同的一起计算即可,算是数论的优越性吧。