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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[学习笔记] 如果你愿意学那么你是可以看的懂的 —— 群论与 burnside 引理和 polya 定理

發布時間:2023/12/3 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [学习笔记] 如果你愿意学那么你是可以看的懂的 —— 群论与 burnside 引理和 polya 定理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

群與子群

<G,op><G,op><G,op> 是一個群需要滿足以下條件:

  • opopop 是一個滿足結合律的二元運算,如 *,+。
  • GGG 是一個集合,存在單位元 eee
  • GGG 中所有元素都有逆元。
  • GGGopopop 運算封閉,封閉簡單理解就是元素的逆元也在里面,有單位元,任意兩個數二元運算結果也在里面。

這里的單位元,逆元,結合律按照一般的意思來理解即可。

雖然沒有要求滿足交換律,但還是定義逆元是 xx?1=x?1x=exx^{-1}=x^{-1}x=exx?1=x?1x=e

如果還滿足交換律就叫做交換群。

群內元素只有“乘法”這一種運算規則,這個“乘法”指的就是 opopop 運算。

例如,op='+',那么 xy=x+y,xx?1=x+x?1=exy=x+y,xx^{-1}=x+x^{-1}=exy=x+y,xx?1=x+x?1=e

<H,op><H,op><H,op><G,op><G,op><G,op> 的子群,滿足兩個條件:

  • HHHGGG 的子集。
  • <H,op><H,op><H,op> 是個群。

群元素個數有窮時,階就等于元素個數。

置換群

映射:兩個集合之間元素的對應關系,可能一對多,多對一,一對一等。

置換:有限集合到自身的雙射,即一一對應。

S={a1,a2,...,an}S=\{a_1,a_2,...,a_n\}S={a1?,a2?,...,an?} 的一個置換 f=(a1a2…anap1ap2…apn)f=\begin{pmatrix}a_1\quad a_2\quad\dots\quad a_n\\a_{p_1}\quad a_{p_2}\quad\dots\quad a_{p_n}\end{pmatrix}f=(a1?a2?an?ap1??ap2??apn???)

表示:將 aia_iai? 映射成 apia_{p_i}api??,即 ai=apia_i=a_{p_i}ai?=api??。其中 p1,...,pnp_1,...,p_np1?,...,pn? 是一個 nnn 元排列。

顯然 SSS 上所有的置換個數為 n!n!n!

置換的乘法:即函數的合成。

對于兩個置換 f=(a1a2…anap1ap2…apn),g=(ap1ap2…apnaq1aq2…aqn)f=\begin{pmatrix}a_1\quad a_2\quad\dots\quad a_n\\a_{p_1}\quad a_{p_2}\quad\dots\quad a_{p_n}\end{pmatrix},g=\begin{pmatrix}a_{p_1}\quad a_{p_2}\quad\dots\quad a_{p_n}\\a_{q_1}\quad a_{q_2}\quad\dots\quad a_{q_n}\\\end{pmatrix}f=(a1?a2?an?ap1??ap2??apn???),g=(ap1??ap2??apn??aq1??aq2??aqn???)fffggg 的乘積記為 f°g=(a1a2…anaq1aq2…aqn)f\circ g=\begin{pmatrix}a_1\quad a_2\quad\dots\quad a_n\\a_{q_1}\quad a_{q_2}\quad\dots\quad a_{q_n}\\\end{pmatrix}f°g=(a1?a2?an?aq1??aq2??aqn???)

即先做 fff 的映射再做 ggg 的映射。

定義 Sn={S_n=\{Sn?={ 所有的 nnn 元排列 }\}}。裝備了乘法opopopSnS_nSn? 的子群叫做 nnn 元置換群。

循環置換

循環置換是一類特殊的置換,表示為 (a1,a2,...,am)=(a1,a2,...,am?1,ama2,a3,...,am,a1)(a_1,a_2,...,a_m)=\begin{pmatrix}a_1,a_2,...,a_{m-1},a_m\\a_2,a_3,...,a_m,a_1\end{pmatrix}(a1?,a2?,...,am?)=(a1?,a2?,...,am?1?,am?a2?,a3?,...,am?,a1??)

若兩個置換不含有相同的元素,則稱它們是不相交的。

舉個例子 A=(a1,a2a2,a1),B=(a4,a5,a6a5,a4,a6)A=\begin{pmatrix}a_1,a_2\\a_2,a_1\end{pmatrix},B=\begin{pmatrix}a_4,a_5,a_6\\a_5,a_4,a_6\end{pmatrix}A=(a1?,a2?a2?,a1??),B=(a4?,a5?,a6?a5?,a4?,a6??),則 A,BA,BA,B 就是不相交的,所含元素集合的交為空。

任何一個置換都可以分解成若干個(≥1\ge 11)不相交的循環置換的乘積。

舉個例子,(a1,a2,a3,a4,a5,a6a2,a1,a3,a6,a4,a5)=(a1,a2)°(a3)°(a5,a6,a4)\begin{pmatrix}a_1,a_2,a_3,a_4,a_5,a_6\\a_2,a_1,a_3,a_6,a_4,a_5\end{pmatrix}=(a_1,a_2)\circ(a_3)\circ(a_5,a_6,a_4)(a1?,a2?,a3?,a4?,a5?,a6?a2?,a1?,a3?,a6?,a4?,a5??)=(a1?,a2?)°(a3?)°(a5?,a6?,a4?)

證明:很簡單,將元素看作點,映射關系當成邊,則每個節點的入度和出度都為 111。形成的圖形必然是若干個環集合,而一個環就代表一個循環置換。

群的陪集分解

GGG 是群,HHHGGG 的子群,a∈Ga\in GaG

定義 Ha={h∣ha∈H}Ha=\{h\mid ha\in H\}Ha={hhaH}。(這里的 hahaha 做乘法,是群的運算符號,即 h(op)ah(op)ah(op)a

HaHaHa 是子群 HHH 的在 GGG 中的一個右陪集。

顯然 He=H,a∈HaH_e=H,a\in HaHe?=H,aHa

?a∈G\forall a\in G?aGH,HaH,HaH,Ha 等勢。(集合大小相同)

證明:構造從 H→HaH\rightarrow HaHHa 的雙射,只需讓 f(h)=haf(h)=haf(h)=ha 即可。

這說明在有限集的情況,HHHHaHaHa 的階相同。

?a,b∈G,a∈Hb\forall a,b\in G,a\in Hb?a,bG,aHb 等價于 ab?1∈Hab^{-1}\in Hab?1H 等價于 Ha=HbHa=HbHa=Hb

證明:a∈Hb?ab?1∈H?Hab?1∈Ha\in Hb\Rightarrow ab^{-1}\in H\Rightarrow Hab^{-1}\in HaHb?ab?1H?Hab?1HHHH 是群,對內部元素是封閉的)?Ha∈Hb\Rightarrow Ha\in Hb?HaHb

基于此,我們可以定義等價類關系并進行等價類分解。

定義等價類關系,?a,b∈G,ab?1∈H\forall a,b\in G,ab^{-1}\in H?a,bG,ab?1H,則將 a,ba,ba,b 劃分在同一個等價類里面。(以 HHH 為判定條件劃分 GGG 這個群空間)

同時得到 lagrange定理。

拉格朗日定理:設 GGG 是有限群,HHHGGG 的子群,則 GGG 的階一定是 HHH 階的倍數,具體是多少倍看能分出多少個等價類來。

GGG 劃分成 Ha,Hb,...,HHa,Hb,...,HHa,Hb,...,H,任意兩個 ab?1∈?Hab^{-1}\not\in Hab?1?H,而上面又證明了 ∣Ha∣=∣H∣=∣Hb∣=...|Ha|=|H|=|Hb|=...Ha=H=Hb=...

每個等價類的大小是一樣的。

左陪集 aHaHaH 與右陪集完全一樣,不再贅述。

軌道-穩定子集定理

GGG 是集合 Ω\OmegaΩ 上的有窮置換群。a∈Ωa\in \OmegaaΩ

定義 Ga={g∣g∈G∧g(a)=a}G^a=\{g\mid g\in G\wedge g(a)=a\}Ga={ggGg(a)=a},稱 GaG^aGaaaa 的穩定子群。

解釋:aaa 是一個數,ggg 是一個置換,GaG^aGa 是所有置換 ggg 滿足 ggg 作用于 aaa 后仍是 aaa 不變的集合。

舉個例子,一個置換 g=(1234553241)g=\begin{pmatrix}1\ 2\ 3\ 4\ 5\\5\ 3\ 2\ 4\ 1\end{pmatrix}g=(1?2?3?4?55?3?2?4?1?),那么 G4G^4G4 就會含有這個 ggg

定義 G(a)={g(a)∣g∈G}G(a)=\{g(a)\mid g\in G\}G(a)={g(a)gG},稱 G(a)G(a)G(a)aaa 的軌道。

解釋:aaa 是一個數,ggg 是一個置換,g(a)g(a)g(a)ggg 作用于 aaa 后的值,G(a)G(a)G(a) 是這些值的集合。

GGG 中所有置換作用于 aaa 后可能的值的集合。

舉個例子,一個置換 g∈G,g=(1234553241)g\in G,g=\begin{pmatrix}1\ 2\ 3\ 4\ 5\\5\ 3\ 2\ 4\ 1\end{pmatrix}gG,g=(1?2?3?4?55?3?2?4?1?),那么 G(1)G(1)G(1) 就會含有 555G(2)G(2)G(2) 就會含有 333

軌道-穩定子集定理:∣G∣=∣G(a)∣∣Ga∣\big|G\big|=\big|G(a)\big|\big|G^a\big|?G?=?G(a)??Ga?

證明:

首先顯然 GaG^aGaGGG 的子群,GaG^aGa 對置換作用在置換上的這個二元運算封閉。

考慮陪集分解,任取兩個置換 x,y∈G,x(a)=y(a)?x?1(x(a))=a=x?1(y(a))?x?1y∈Ga?xGa=yGax,y\in G,x(a)=y(a)\Leftrightarrow x^{-1}(x(a))=a=x^{-1}(y(a))\Leftrightarrow x^{-1}y\in G^a\Leftrightarrow xG^a=yG^ax,yG,x(a)=y(a)?x?1(x(a))=a=x?1(y(a))?x?1yGa?xGa=yGa

這說明 xxxyyyGGG 關于 GaG^aGa 的陪集分解的同一個等價類中,當且僅當 x(a)=y(a)x(a)=y(a)x(a)=y(a)

也就是說 ∣G(a)∣|G(a)|G(a)GGG 關于 GaG^aGa 的陪集分解的等價類的個數。

由拉格朗日定理知,等價類的個數也就是 GGG 的階是 GaG^aGa 的階的倍數。

得證。

burnside 引理

A,BA,BA,B 為有限集合。

GGGAAA 上的置換群;ggg∈G\in GG 的一個置換。

X:X:X: 一些從 AAABBB 的映射集合,且 XXXGGG 下封閉。

X/G:GX/G:GX/G:G 作用在 XXX 上產生的所有等價類集合。

(若 XXX 的兩個映射經過 GGG 的置換作用后相同,則在同一個等價類中)

C(g)C(g)C(g)ggg 作用在元素后不變的元素集合大小,即 C(g)=∣Xg∣,Xg={a∣g(a)=a}C(g)=|X^g|,X^g=\{a\mid g(a)=a\}C(g)=Xg,Xg={ag(a)=a}
∣X/G∣=1∣G∣∑g∈GC(g)=∑a∈A1∣G(a)∣|X/G|=\frac{1}{|G|}\sum_{g\in G}C(g)=\sum_{a\in A}\frac 1{|G(a)|} X/G=G1?gG?C(g)=aA?G(a)1?

證明:
∑g∈GC(g)=∑a∈A∣Ga∣=∑a∈A∣G∣∣G(a)∣=∣G∣∑a∈A1∣G(a)∣?1∣G∣∑g∈GC(g)=∑a∈A1∣G(a)∣=∣X/G∣\sum_{g\in G}C(g)=\sum_{a\in A} |G^a|=\sum_{a\in A}\frac{|G|}{|G(a)|}=|G|\sum_{a\in A}\frac{1}{|G(a)|}\Rightarrow \frac{1}{|G|}\sum_{g\in G}C(g)=\sum_{a\in A}\frac{1}{|G(a)|}=|X/G| gG?C(g)=aA?Ga=aA?G(a)G?=GaA?G(a)1??G1?gG?C(g)=aA?G(a)1?=X/G
∑g∈GC(g):\sum_{g\in G}C(g):gG?C(g): 枚舉置換,然后累和每個置換中不動點的個數。

∑a∣Ga∣:\sum_a|G^a|:a?Ga: 枚舉數,然后累和滿足 aaa 為不動點的置換個數。

二者只是枚舉出發方向不同,但結果是相同的。

∑a1∣G(a)∣:\sum_a\frac 1{|G(a)|}:a?G(a)1?: 由軌道-穩定子集定理,我們知道以 aaa 為分解參照, G(a)G(a)G(a) 內的所有元素構成一個等價類。

由陪集分解知,GGG 是一個群,無論 aaa 是什么,所有等價類都是大小一樣的。

那么假設 ∣G(a)∣=x|G(a)|=xG(a)=x,即所有等價類的大小均為 xxx,每個數都會貢獻 1x\frac{1}{x}x1?∣G∣?1x|G|*\frac{1}{x}G?x1? 得到的就是等價類的個數,即 ∣X/G∣|X/G|X/G

polya 定理

定義加強 X:X:X: 所有 AAABBB 的映射;定義 c(g):c(g):c(g): 置換 ggg 能拆分成的不相交的循環置換的個數。即環的個數。
∣X/G∣=1∣G∣∑g∈G∣B∣c(g)|X/G|=\frac{1}{|G|}\sum_{g\in G}|B|^{c(g)} X/G=G1?gG?Bc(g)
例如:對于有 nnn 個點形成的環 mmm 種顏色的染色問題,A={1,2,...,n},B={1,2,...,m}A=\{1,2,...,n\},B=\{1,2,...,m\}A={1,2,...,n},B={1,2,...,m}∣Xg∣=mc(g)|X^g|=m^{c(g)}Xg=mc(g)

將置換看作圖上的一條有向邊,若置換后 u→vu\rightarrow vuv,就連一條有向邊。那么就形成若干個環,環中元素的顏色一定相同。


OIOIOI 中一般求本質不同的方案數,本質不同就是不再同一個等價類,換言之一般考察的問題答案就是等價類個數 ∣X/G∣|X/G|X/G

經典例題:poj2154

∣X/G∣=1∣G∣∑g∈Gmc(g)?ans=1n∑i=1nn(n,i)|X/G|=\frac{1}{|G|}\sum_{g\in G}m^{c(g)}\Rightarrow ans=\frac{1}{n}\sum_{i=1}^nn^{(n,i)}X/G=G1?gG?mc(g)?ans=n1?i=1n?n(n,i)

iii 種置換的循環節個數為 gcd?(n,i)\gcd(n,i)gcd(n,i)

這個環只能順時針/逆時針轉動,不妨考慮順時針,那么轉 0~n?10\sim n-10n?1 個元素就對應不同的置換,共 nnn 種。

假設當前環的開頭為 xxx,在第 iii 種置換下有 x→x+i→x+2i→?→xx\rightarrow x+i\rightarrow x+2i\rightarrow\dots\rightarrow xxx+ix+2i?x

假設在 x+kix+kix+ki 回到開頭,則 x≡x+ki(modn)?ki≡0(modn)?k=ngcd?(n,i)x\equiv x+ki\pmod n\Rightarrow ki\equiv 0\pmod n\Rightarrow k=\frac{n}{\gcd(n,i)}xx+ki(modn)?ki0(modn)?k=gcd(n,i)n?

這個 kkk 恰好就是環長度,所以個數為 n/k=gcd?(i,n)n/k=\gcd(i,n)n/k=gcd(i,n)
1n∑i=1nn(n,i)=1n∑d=1n∑i=1nnd[(n,i)=d]=∑d∣n∑i=1nnd?1φ(nd)\frac{1}{n}\sum_{i=1}^nn^{(n,i)}=\frac{1}{n}\sum_{d=1}^n\sum_{i=1}^nn^ozvdkddzhkzd[(n,i)=d]=\sum_{d\mid n}\sum_{i=1}^nn^{d-1}\varphi(\frac nd) n1?i=1n?n(n,i)=n1?d=1n?i=1n?nd[(n,i)=d]=dn?i=1n?nd?1φ(dn?)
可以在 O(n)O(\sqrt n)O(n?) 時間內枚舉所有因數 ddd

預處理 1e61e61e6 以內的 φ\varphiφ,后面的就 n\sqrt{n}n? 暴力算。

#include <cstdio> #define maxn 1000005 int mod, cnt; bool vis[maxn]; int prime[maxn], phi[maxn];void sieve( int n = 1e6 ) {phi[1] = 1;for( int i = 2;i <= n;i ++ ) {if( ! vis[i] ) prime[++ cnt] = i, phi[i] = ( i - 1 );for( int j = 1;j <= cnt and 1ll * i * prime[j] <= n;j ++ ) {vis[i * prime[j]] = 1;if( i % prime[j] == 0 ) {phi[i * prime[j]] = phi[i] * prime[j];break;}else phi[i * prime[j]] = phi[i] * phi[prime[j]];}} }int qkpow( int x, int y ) {x %= mod;int ans = 1;while( y ) {if( y & 1 ) ans = ans * x % mod;x = x * x % mod;y >>= 1;}return ans; }int PHI( int x ) {if( x <= 1e6 ) return phi[x] % mod;int ans = x;for( int i = 2;i * i <= x;i ++ )if( x % i == 0 ) {ans = ans / i * ( i - 1 );while( x % i == 0 ) x /= i;}if( x ^ 1 ) ans = ans / x * ( x - 1 );return ans % mod; }int main() {sieve();int T, n;scanf( "%d", &T );while( T -- ) {scanf( "%d %d", &n, &mod );long long ans = 0;for( int i = 1;i * i <= n;i ++ ) {if( n % i ) continue;if( i * i == n ) (ans += qkpow(n, i - 1) * PHI(n / i) % mod) %= mod;else(ans += qkpow(n, i - 1) * PHI(n / i) % mod + qkpow(n, n / i - 1) * PHI(i) % mod) %= mod;}printf( "%lld\n", ans );}return 0; }

總結

以上是生活随笔為你收集整理的[学习笔记] 如果你愿意学那么你是可以看的懂的 —— 群论与 burnside 引理和 polya 定理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。