神題神題~~被他折磨了一下午,不過大大加深了我對 Pólya 和 Burnside 的理解。
初學 Pólya 和 Burnside 的時候發現數學太重口味了,背了個公式草草走人,今天爲了做這道題可是費了血本把組合數學的書翻出來看,哎,都怪組合數學課上YY去了。
花了1個小時的時間強啃,總算是有了些收穫,小小的總結下。
首先是幾個名詞:
1.着色方案;
2.置換,置換羣;
3.不動置換,對於某個着色方案,置換之後仍爲自己的置換,叫不動置換;
4.穩定核,對於某種着色方案的不動置換的集合。
對於所有着色方案,有些是同構的,而且同構是具有傳遞性的,比如a和b同構,b和c同構,那麼a和c是同構的。
一個比較直觀的想法:所有本質不同的着色方案=∑(1/和該方案同構的方案數)。
因此求出每個方案與之同構的方案數就是當前的任務。
定理:與方案同構的方案數=(置換羣個數)/(穩定核個數);
這是怎麼得出來的?
假設 f 爲一個置換,c 爲一個着色方案,g 爲 c 的一個不動置換。
∵g*c=c,f*c=f*c
∴ f*g*c=f*c
可以得,f 和 f*g 這兩個置換作用在 c 上的效果是一樣的。
所以和 f 置換效果一樣的置換一共有(c的穩定核個數)個,對於置換羣中每一個置換作用在 c 上產生的新着色方案,這些新着色方案與 c 同構,且每一個新着色方案都被重複計算了 (穩定核個數)次,所以
定理:與 c 的方案數=(置換羣個數)/(穩定核個數) 得證。
再一步步帶上去,可得
所有本質不同的着色方案=∑((穩定核個數)/(置換羣個數)){所有着色方案}。
一一計算每一個着色方案的穩定核個數是不可取的,相反的,考慮每一個置換會是多少個着色方案的不動置換,這樣就變成了我們最熟悉的式子:∑C(g)/|G|。
對於最普通的着色問題,式子就可以簡化成:∑MP(g)/|G|。
現在回到這道題:每個置換實際上相當於是把這個環平均分成很多份(鏈)然後相鄰的鏈相等就算同構。
我們需要計算的是每一個置換會是多少個着色方案的不動置換,因爲是不動置換,所以分成的很多鏈式相等的,因此我們只需要考慮一條短鏈的情況就可以了。
問題轉化成爲:一條長度爲L的鏈,相鄰兩個珠子顏色有限制,求方案數。
對於L很大的情況,這就是個經典的矩陣連乘的題目了。
因爲N比較大,考慮使用歐拉函數進行優化,枚舉置換的循環節個數L,那麼和他等價的置換羣一共有 phi(N/L)種,我們需要枚舉的僅僅是N的約數個數,算法複雜度爲 O(N0.5logNM3)。