置换列表

处理置换的一个可能途径是把它们与一个列表的元素的重新排列相联系. 这是用于置换的组合方法中的一个标准观点,该观点将着眼点转向被置换的表达式,而不是置换本身. 这一向是 Mathematica 中对置换列表(permutation lists) 的隐性解释,即是对 Range[n] 的重新排列,其中,n 是某非负整数. Mathematica 中的一些函数可以对置换列表进行基本的操作. 现在又增加了另外一些函数应用于置换列表,并把它们转化到它们的不相交轮换的形式.

PermutationListQ激活一个整数的列表,作为 的重新排列
PermutationSupport被一个置换移动了的点

置换列表的基本功能.

这是一个10个整数的列表.
In[1]:=
Click for copyable input
Out[1]=
验证它确实是始于1的相连整数的一个重新排列.
In[2]:=
Click for copyable input
Out[2]=
置换列表的支撑是不在其自然位置的点的列表.
In[3]:=
Click for copyable input
Out[3]=
如果整数的列表是有序的,则它的支撑是空的.
In[4]:=
Click for copyable input
Out[4]=

置换列表可以和不相交轮换形式相互转换. 这和改进形式的 Combinatorica 程序包中的函数 ToCyclesFromCycles 相似.

PermutationCycles将置换转换为不相交轮换形式
PermutationList将置换转换为置换列表

与轮换形式的相互转换.

采用一个置换列表.
In[5]:=
Click for copyable input
Out[5]=
构建置换列表的轮换形式,默认情况下,单元集被剔除了.
In[6]:=
Click for copyable input
Out[6]=
选择任何其它头部将保留单元集.
In[7]:=
Click for copyable input
Out[7]=
与以下作一比较.
In[8]:=
Click for copyable input
In[9]:=
Click for copyable input
Out[9]=
反过来,也可以将一个轮换对象( cyclic object)转化成任意长度的置换列表.
In[10]:=
Click for copyable input
Out[10]=
默认时,长度取轮换中出现的最大整数.
In[11]:=
Click for copyable input
Out[11]=
上面这个函数容许改变置换列表的长度而保持它的支撑不变.
In[12]:=
Click for copyable input
Out[12]=
In[13]:=
Click for copyable input
Out[13]=

应用函数 PartPermute,置换列表可以用来置换一个表达式的某些部分. 这两个函数有两点不同:首先,根据置换列表的长度,Part 可能会改变表达式参数的个数,而 Permute 永远不会该变个数. 第二,PartPermute 对置换的诠释方法不同.

Part返回一个子表达式,并有可能对其元素重新排序
Permute按照一个置换所给顺序对一个表达式的元素进行置换
FindPermutation计算把第一个列表挪到第二的置换

对表达式的置换.

采用一个表达式和一个置换列表.
In[14]:=
Click for copyable input
Permute 对元素进行重新排序:第一个元素进到第四个元素的位置,以此类推. 元素的数目不改.
In[15]:=
Click for copyable input
Out[15]=
Part 提取子表达式,可能改变结果的长度. 为了获取等价结果,需要逆转置换列.
In[16]:=
Click for copyable input
Out[16]=
Permute 的第二个参量也可以采用轮换式标记.
In[17]:=
Click for copyable input
Out[17]=
也可以用一个置换群,它被解释为一个置换的集合.
In[18]:=
Click for copyable input
Out[18]=
In[19]:=
Click for copyable input
Out[19]=
In[20]:=
Click for copyable input
Out[20]=
Permute 的作用能够用 FindPermutation 反过来, FindPermutation 返回轮换式标记.
In[21]:=
Click for copyable input
Out[21]=
In[22]:=
Click for copyable input
Out[22]=
如果将参量反转,可以得到一个逆置换.
In[23]:=
Click for copyable input
Out[23]=
In[24]:=
Click for copyable input
Out[24]=

可以应用 Mathematica 的标准命令,用置换列表进行置换运算.

Part置换列表积
Ordering置换列表逆
Range恒等置换列表
RandomSample置换列表的准随机生成

针对置换列表重新解释的标准命令.

采用两个长度相同的置换列表.
In[25]:=
Click for copyable input
这是它们的成绩,从左至右:
In[26]:=
Click for copyable input
Out[26]=
Part,逆转参数的顺序,可以获得相同的结果.
In[27]:=
Click for copyable input
Out[27]=
置换列表的逆可以通过 InversePermutation 或者 Ordering 计算得到.
In[28]:=
Click for copyable input
Out[28]=
In[29]:=
Click for copyable input
Out[29]=
这两个置换列表的积给出了恒等置换列表.
In[30]:=
Click for copyable input
Out[30]=
任何长度的恒等置换列表都可以用 Range 来表示.
In[31]:=
Click for copyable input
Out[31]=
恒等列表的随机重新排序都是有效的置换列表.
In[32]:=
Click for copyable input
Out[32]=

置换列表中的另一个重要用途是使用 Transpose 对数组进行转置,这一般会导致一个不同置换尺寸的数组.

以尺寸不等的矩形数组为例:
In[33]:=
Click for copyable input
Out[33]=
In[34]:=
Click for copyable input
Out[34]=
转置后的数组具有置换尺寸:
In[35]:=
Click for copyable input
Out[35]=
In[36]:=
Click for copyable input
Out[36]=
New to Mathematica? Find your learning path »
Have a question? Ask support »