日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Burnside引理和Polya定理学习笔记

發(fā)布時間:2024/4/11 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Burnside引理和Polya定理学习笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

求·······的方案數(shù)
循環(huán)同構(gòu)算一種
一臉懵逼
(于是我覺得系統(tǒng)的學(xué)一遍Burnside引理和Polya定理)

正文

置換

置換的概念

對于一個排列aia_iai?
我們想成iii輸進(jìn)去會出來一個aia_iai?
那么我們?nèi)绻斎胍粋€排列,將能得到一個排列
就比如我們輸入的排列是111nnn有序的,那么這個置換就是
(123???na1a2a3???an)\begin{pmatrix} 1&2&3&···&n \\ a_1&a_2&a_3&···&a_n \end{pmatrix}(1a1??2a2??3a3?????????nan??)
當(dāng)然我們?nèi)绻S便輸入一個排列bib_ibi?,并且得到一個新的排列,那么這個置換就是
(b1b2b3???bnab1ab2ab3???abn)\begin{pmatrix} b_1&b_2&b_3&···&b_n \\ a_{b_1}&a_{b_2}&a_{b_3}&···&a_{b_n} \end{pmatrix}(b1?ab1???b2?ab2???b3?ab3??????????bn?abn???)
只要排列aia_iai?相同,無論輸入什么排列bib_ibi?生成的置換都是一樣的
即置換與橫向位置無關(guān),只與縱向的對應(yīng)關(guān)系有關(guān)
我們設(shè)A={a1,a2???an}A=\{a_1,a_2···a_n\}A={a1?,a2????an?},即∣A∣=n|A|=nA=n,我們稱上面的那些置換為AAA上的nnn次置換
不難發(fā)現(xiàn),本質(zhì)不同的nnn次置換一共有n!n!n!

置換的乘積形式

我們發(fā)現(xiàn),對于一個置換,一個位置的數(shù)如果是iii,進(jìn)行若干次置換后,這個位置的數(shù)會變回iii
比如一個置換
(123456231654)\begin{pmatrix} 1&2&3&4&5&6 \\ 2&3&1&6&5&4 \end{pmatrix}(12?23?31?46?55?64?)
一個數(shù)111其變化是1→2→3→11\rightarrow2\rightarrow3\rightarrow11231
那么我們可以寫成(2,3,1)(2,3,1)(2,3,1)
所有的循環(huán)的乘積就是這個置換的不相交循環(huán)的乘積寫法
比如剛剛這個置換就是(2,3,1)(6,4)(5)(2,3,1)(6,4)(5)(2,3,1)(6,4)(5)
我們發(fā)現(xiàn)555這個位置無論進(jìn)行幾次置換值都是555,對于這些位置我們稱其為不動點(diǎn)

置換群

是一種群,里面每個元素都是置換
然后滿足群的一些性質(zhì)
對于一個nnn,在n!n!n!種本質(zhì)不同的nnn次置換中選xxx個(x≥1x\ge1x1)置換作為元素的群被稱為xxxnnn次置換群,特殊的,當(dāng)x=n!x=n!x=n!時,其被稱為nnn次對稱群
對于一個nnn次置換群,我們發(fā)現(xiàn)其元素中必有置換
(a1a2a3???ana1a2a3???an)\begin{pmatrix} a_1&a_2&a_3&···&a_n \\ a_1&a_2&a_3&···&a_n \end{pmatrix}(a1?a1??a2?a2??a3?a3?????????an?an??)
另外,若其元素中有置換
(b1b2b3???bnab1ab2ab3???abn)\begin{pmatrix} b_1&b_2&b_3&···&b_n \\ a_{b_1}&a_{b_2}&a_{b_3}&···&a_{b_n} \end{pmatrix}(b1?ab1???b2?ab2???b3?ab3??????????bn?abn???)
則其元素中也必有
(ab1ab2ab3???abnb1b2b3???bn)\begin{pmatrix} a_{b_1}&a_{b_2}&a_{b_3}&···&a_{b_n} \\ b_1&b_2&b_3&···&b_n \end{pmatrix}(ab1??b1??ab2??b2??ab3??b3?????????abn??bn??)
以上就差不多是一些定義了
百度百科鏈接,群
良好并且完整的置換群課件,鏈接

Burnside引理

設(shè)G={a1,a2,…ag}G=\{a_1,a_2,…a_g\}G={a1?,a2?,ag?}aaa是置換)是目標(biāo)集[1,n][1,n][1,n]上的置換群。每個置換都寫成不相交循環(huán)的乘積。c1(ak)c_1(a_k)c1?(ak?)是在置換aka_kak?的作用下不動點(diǎn)的個數(shù),也就是長度為111的循環(huán)的個數(shù)。通過上述置換的變換操作后可以相等的元素屬于同一個等價類。若GGG[1,n][1,n][1,n]劃分成lll個等價類,則:
l=1∣G∣[c1(a1)+c1(a2)+???+c1(a∣G∣)]l=\frac{1}{|G|}[c_1(a_1)+c_1(a_2)+···+c_1(a_{|G|})]l=G1?[c1?(a1?)+c1?(a2?)+???+c1?(aG?)]


證明:
對于一個置換aaa,將其寫成不相交循環(huán)的乘積
我們設(shè)χa(x)={0x不是不動點(diǎn)1x是不動點(diǎn)\chi_a(x)=\begin{cases}0&x不是不動點(diǎn)\\1&x是不動點(diǎn)\end{cases}χa?(x)={01?x點(diǎn)x點(diǎn)?
根據(jù)定義,我們展開
∑ai∈Gc1(ai)=∑ai∈G∑1≤j≤nχai(j)=∑1≤j≤n∑ai∈Gχai(j)\sum_{a_i\in G}c_1(a_i)=\sum_{a_i\in G}\sum_{1\le j\le n}\chi_{a_i}(j)=\sum_{1\le j\le n}\sum_{a_i\in G}\chi_{a_i}(j)ai?G?c1?(ai?)=ai?G?1jn?χai??(j)=1jn?ai?G?χai??(j)
我們設(shè)Z(x)\Zeta(x)Z(x)為滿足xxx是不動點(diǎn)的置換集合,我們發(fā)現(xiàn)上式的后半部分可以直接套入
∑1≤j≤n∑ai∈Gχai(j)=∑1≤j≤n∣Z(j)∣\sum_{1\le j\le n}\sum_{a_i\in G}\chi_{a_i}(j)=\sum_{1\le j\le n}|\Zeta(j)|1jn?ai?G?χai??(j)=1jn?Z(j)
我們發(fā)現(xiàn),對于同一個等價類里的元素x1,x2x_1,x_2x1?,x2?,一定滿足Z(x1)=Z(x2)Z(x_1)=Z(x_2)Z(x1?)=Z(x2?),原因是Z(x)Z(x)Z(x)集合是一個置換群元素集合的子集
這樣我們設(shè)CCC為一個等價類元素集合,設(shè)c=?x∈Cc=\forall x\in Cc=?xC,那么無論ccc的取值,Z(c)Z(c)Z(c)的值都是一樣的
那么繼續(xù)上式
∑1≤j≤n∣Z(j)∣=∑C∣C∣?Z(c)=∣G∣∑C1=∣G∣?∣C∣=∣G∣l\sum_{1\le j\le n}|\Zeta(j)|=\sum_{C}|C|*Z(c)=|G|\sum_{C}1=|G|·|C|=|G|l1jn?Z(j)=C?C?Z(c)=GC?1=G?C=Gl
對于第二個等號,可能你會感到疑惑
這里用到了∣C∣?Z(c)=∣G∣|C|*\Zeta(c)=|G|C?Z(c)=G,即“軌道-穩(wěn)定集定理”,這里就不展開了,因?yàn)檫@個的證明還需要拉格朗日定理等群論基本知識,有興趣的可以看這篇博客,里面有一些基本概念的介紹,另外,據(jù)說具體證明可以參照 《組合數(shù)學(xué)》(第5版)P181 定理4-11(暫未考證)
綜上l=1∣G∣∑ai∈Gc1(ai)l=\frac{1}{|G|}\sum_{a_i\in G}c_1(a_i)l=G1?ai?G?c1?(ai?)


這篇博客里有比較清楚的例子,我這里就不舉例了
我們發(fā)現(xiàn),在染色問題循環(huán)同構(gòu)的題中,∣G∣|G|G是旋轉(zhuǎn)方式數(shù),∣A∣|A|A是所有染色種類數(shù),算法的復(fù)雜度是O(∣G∣∣A∣)\mathcal O(|G||A|)O(GA)的,而后者很容易變得很大,這個時候就需要用到Polya定理
(也正因?yàn)槿绱嗽贠I中應(yīng)用不多)

Polya定理

前提條件:如果將[1,n][1,n][1,n]kkk種顏色進(jìn)行染色
我們定義λ(ai)\lambda(a_i)λ(ai?)為置換aia_iai?的循環(huán)數(shù)量
Polya定理:
l=1∣G∣∑ai∈Gkλ(ai)l=\frac{1}{|G|}\sum_{a_i\in G}k^{\lambda(a_i)}l=G1?ai?G?kλ(ai?)
Polya定理其實(shí)就是一種Burnside引理的具體化,就是把上面的c1(ai)c_1(a_i)c1?(ai?)算出來了

例題

[poj1286]Necklace of Beads
題目大意:現(xiàn)在有333種顏色的珠子,問有多少種長度為nnn的環(huán),旋轉(zhuǎn)、軸對稱同構(gòu)算一種
題解: 我們發(fā)現(xiàn)對于一個nnn的置換只有2?n2*n2?n種,直接套polya定理求環(huán)數(shù)量即可,復(fù)雜度O(n2)\mathcal O(n^2)O(n2)

#include<cstdio> #include<cctype> #include<cstring> #include<algorithm> typedef long long ll; #define rg register template <typename T> inline void read(T&x){char cu=getchar();x=0;bool fla=0;while(!isdigit(cu)){if(cu=='-')fla=1;cu=getchar();}while(isdigit(cu))x=x*10+cu-'0',cu=getchar();if(fla)x=-x;} template <typename T> inline void printe(const T x){if(x>=10)printe(x/10);putchar(x%10+'0');} template <typename T> inline void print(const T x){if(x<0)putchar('-'),printe(-x);else printe(x);} ll n,ans[24]; int a[24]; bool vis[24]; ll pow(ll x,ll y) {ll res=1;for(;y;y>>=1,x=x*x)if(y&1)res*=x;return res; } void dfs(const int x) {if(vis[x])return;vis[x]=1;dfs(a[x]); } void calc() {memset(vis,0,sizeof(vis));int k=0;for(rg int i=0;i<n;i++)if(!vis[i])dfs(i),k++;ans[n]+=pow(3,k); } int main() {for(n=1;n<24;n++){for(rg int i=0;i<n;i++){for(rg int j=0;j<n;j++)a[j]=(i+j)%n;calc();for(rg int j=0;j<n-j-1;j++)std::swap(a[j],a[n-j-1]);calc();}ans[n]/=2*n;}while(1){read(n);if(n==-1)break;print(ans[n]),putchar('\n');}return 0; } 超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的Burnside引理和Polya定理学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。