网站后台需求,做二手货的网站,网站标题优化 英文,做电影网站考什么文章目录 简介置换的复合置换群 简介
所谓置换#xff0c;简单地说就是交换两个元素的位置。例如#xff0c;给定一组元素 a 0 , a 1 , a 2 a_0, a_1, a_2 a0,a1,a2#xff0c;那么通过置换之后#xff0c;这组元素可以变成 a 0 , a 2 , a 1 a_0, a_2, a_1 a0,a2… 文章目录 简介置换的复合置换群 简介
所谓置换简单地说就是交换两个元素的位置。例如给定一组元素 a 0 , a 1 , a 2 a_0, a_1, a_2 a0,a1,a2那么通过置换之后这组元素可以变成 a 0 , a 2 , a 1 a_0, a_2, a_1 a0,a2,a1即 a 1 a_1 a1和 a 2 a_2 a2的位置发生了变化此即置换。
置换也可以有另一种理解方式即集合内元素的一一映射那么这个置换过程可表述为 a 0 → a 0 a 1 → a 2 a 2 → a 1 a_0\to a_0\\ a_1\to a_2\\ a_2\to a_1\\ a0→a0a1→a2a2→a1
从下表的角度出发将 [ 0 , 1 , 2 ] [0,1,2] [0,1,2]变成了 [ 0 , 2 , 1 ] [0,2,1] [0,2,1]从而 [ 0 , 2 , 1 ] [0,2,1] [0,2,1]即可作为一种表述置换的方法。sympy中的置换类Permutation采用的就是这种方法示例如下
from sympy.combinatorics import Permutationp Permutation([0, 2, 1])
[i^p for i in range(p.size)]
# [0, 2, 1]Permutation重载了运算符^表示作用在某个元素上上面的代码的含义就是将置换p分别作用到0,1,2上得到结果0,2,1。
置换还有另外一种创建方式就是列举出不同元素的一一映射以 p p p为例其并未更改0的位置而只是对 1 , 2 1,2 1,2进行了置换操作从而其创建方式如下
p1 Permutation(1,2)
p1 p # True置换的复合
置换作为一种操作显然可以重复作用在某个元素上如果把关注点放在置换这种运算上那么相当于多次置换可以复合成一个新的置换。Permutation重载了运算符*即可实现此功能
q Permutation([2, 1, 0])
[i^p^q for i in range(3)]
# [2, 0, 1]
p*q
# Permutation(0, 2, 1)注意0,2,1没有方括号如上述代码所示p*q复合的结果是 0 , 2 , 1 0, 2, 1 0,2,1其置换逻辑是 0 → 2 , 2 → 1 0\to2, 2\to1 0→2,2→1剩下的 1 → 0 1\to0 1→0则省略掉了这与上面的计算结果是相符的。
一般来说置换操作是不可交换的即p*q和q*p并不相等
q*p
# Permutation(0, 1, 2)置换操作在创建时也可以将这种符合方式考虑进去
Permutation(1,2)(0,2)
# Permutation(0, 2, 1)置换群
群是一种定义了二元运算的简单的代数系统当这个二元运算是置换时就是置换群。考虑到群中二元运算的封闭性所以当对所有元素进行这种置换之后群中的元素只有位置发生了变化而不会出现增减。故而也可将这种置换理解为集合 Ω \Omega Ω到其自身的映射。
在Sympy中提供了PermutationGroup类用于构造一个置换群。下面以p和q作为生成元来构造一个置换群可得到群的阶数为6。
from sympy.combinatorics import PermutationGroup
G PermutationGroup(p, q)
G.order()
# 6置换群的一个很常见的应用就是描述几何图形的对称性在sympy的组合学工具中也提供了多面体类。多面体类可为置换群添加顶点然后通过rotate来进行置换。
from sympy.combinatorics import Polyhedron
P Polyhedron(list(ABC), pgroupG)
P.corners
# (A, B, C)
P.rotate(0)
# P.corners
(A, C, B)