Warning: session_start(): open(/tmp/sess_0e4511d960eb92bac42b4b6299681a3d, O_RDWR) failed: No space left on device (28) in /data/wiki/inc/init.php on line 239

Warning: session_start(): Failed to read session data: files (path: ) in /data/wiki/inc/init.php on line 239

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/auth.php on line 430

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/actions.php on line 38

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/lib/tpl/dokuwiki/main.php on line 12
2020-2021:teams:wangzai_milk:wzx27:combinatorial_mathematics:permutaitiongroup [CVBB ACM Team]

用户工具

站点工具


2020-2021:teams:wangzai_milk:wzx27:combinatorial_mathematics:permutaitiongroup

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
2020-2021:teams:wangzai_milk:wzx27:combinatorial_mathematics:permutaitiongroup [2020/05/29 01:48]
wzx27
2020-2021:teams:wangzai_milk:wzx27:combinatorial_mathematics:permutaitiongroup [2020/05/29 02:34] (当前版本)
wzx27
行 56: 行 56:
 求出置换中所有的循环,考虑每个循环中交换的花费。记某个循环中所有下标对应最小的值为$mi$,循环长度为$len$,该循环中所有下标对应值的和为$sum$,所有序列中的最小值为$low$,则每个循环的最小花费为$$min\{sum+mi\times (len-2),\; sum+mi+low\times (len+1)\}$$ 求出置换中所有的循环,考虑每个循环中交换的花费。记某个循环中所有下标对应最小的值为$mi$,循环长度为$len$,该循环中所有下标对应值的和为$sum$,所有序列中的最小值为$low$,则每个循环的最小花费为$$min\{sum+mi\times (len-2),\; sum+mi+low\times (len+1)\}$$
 其含义为:每个循环中的最小元素分别去交换其他元素使得其他元素在合适位置,或者先让循环内的最小元素和全局的最小元素交换再分别交换循环内的其他元素,结束后重新交换回循环内的最小元素。正确性挺显然的(bushi 其含义为:每个循环中的最小元素分别去交换其他元素使得其他元素在合适位置,或者先让循环内的最小元素和全局的最小元素交换再分别交换循环内的其他元素,结束后重新交换回循环内的最小元素。正确性挺显然的(bushi
 +
 +[[https://​vjudge.net/​problem/​UVA-11077|uva11077 Find the Permutations]]
 +
 +问长度为n的所有排列里有多少种排列能在最少交换$m$次的情况下变成$1,​2,​...,​n$
 +
 +把每个排列都看出一个置换,最少交换次数的贡献来源于置换中的每个循环,交换次数=每个循环的长度-1的和
 +
 +定义$f[i][j]:​=长度为n的所有排列中,最少交换次数为j的排列个数$,于是有$f[i][j]=f[i-1][j]+f[i-1][j-1]*(i-1)$
 +
 +[[https://​vjudge.net/​problem/​POJ-3590|poj3590 The shuffle Problem]]
 +
 +问长度为$n$的置换$T$,使得$T^k=\iota$的最小正整数解$k$最大的$T$是什么
 +
 +有上述定理可知$T^k=\iota$的最小正整数解为$T$中所有循环的最小公倍数,这个显然能通过$\text{dp}$求得。记$f[i][j]:​=和为i的j个数的lcm$,于是$f[i][j]=max\{f[i-1][j-k]*k/​gcd(f[i-1][j-k],​k)\}$
 +
 +从而能得到长度为$n$的置换的解$\text{maxlcm}$,​并唯一分解得到$maxlcm=\prod p_i^{k_i}$且$\sum p_i^{k_i}\le n$,所以拆成大小为$p_i^{k_i}$的循环,剩下的都是长度为1的循环即可
  
 2、置换群的幂运算 2、置换群的幂运算
行 66: 行 82:
  
 又$2^t \equiv 1 \pmod l$在小于$l$的范围内一定有解,所以可以在$O(nlogn)$下求解 又$2^t \equiv 1 \pmod l$在小于$l$的范围内一定有解,所以可以在$O(nlogn)$下求解
 +
 +还有另一种思路是由$T^{(l+1)}=T$,所以$T^{\frac 12}=(T^{\frac 12})^{(l+1)}=T^{\frac{l+1}2}$,记$R=T^{2^s}$,则$T=(R^{\frac{l+1}2})^s$
  
2020-2021/teams/wangzai_milk/wzx27/combinatorial_mathematics/permutaitiongroup.1590688115.txt.gz · 最后更改: 2020/05/29 01:48 由 wzx27