📜  SymPy | Python中的 Permutation.rank_trotterjohnson()(1)

📅  最后修改于: 2023-12-03 15:35:13.422000             🧑  作者: Mango

SymPy | Python中的 Permutation.rank_trotterjohnson()

SymPy是一个基于Python的数学计算库,其中的Permutation模块提供了用于操作置换的功能。其中,rank_trotterjohnson()方法可以计算置换在Trotter-Johnson编码下的秩。

1. 知识前置

在介绍rank_trotterjohnson()方法之前,先来了解一下以下概念:

置换

置换是指对有限集合进行重新排列的过程。置换可以表示为一个数列,数列中的每个元素表示集合中的一个元素在排列后的位置上。

例如,对于集合{1,2,3},它的一个置换可以表示为(1 2 3),表示原本在第一个位置上的元素1现在排在第一个位置上,元素2和3依次排在第二、三个位置上。

在组合数学中,秩是一种根据排列顺序对置换进行编码的方式。例如,(1 2 3)在秩编码下对应的编码为3,(1 3 2)在秩编码下对应的编码为5。

Trotter-Johnson编码

Trotter-Johnson编码是一种用于对置换进行秩编码的方式。它将置换拆分成多个独立的循环,并对每一个循环进行编码,最终将每个循环的编码合并得到整个置换的秩编码。

2. rank_trotterjohnson()方法基本用法

rank_trotterjohnson()方法可以在Permutation模块中调用。

from sympy.combinatorics import Permutation

p = Permutation([1,2,3])
rank = p.rank_trotterjohnson()

上述代码中,我们创建了一个置换[1,2,3],并计算了它在Trotter-Johnson编码下的秩。在这个例子中,置换在Trotter-Johnson编码下的秩为5。

3. rank_trotterjohnson()方法详解
方法定义
def rank_trotterjohnson(self, signed=False):

rank_trotterjohnson()方法有一个可选参数signed,默认为False。当signed=True时,方法会返回置换在带符号Trotter-Johnson编码下的秩。

方法实现

rank_trotterjohnson()方法实现了Trotter-Johnson编码的过程,其具体流程如下:

  1. 将置换拆分为若干个循环,对于这些循环进行以下操作:

  2. 将循环元素按照从小到大的顺序排列,得到一个新的序列。

  3. 将新的序列中的元素依次替换为它在旧序列中的位置。

  4. 将旧序列中第一个元素从序列中删除,重复步骤2-3,直到旧序列为空。

  5. 将处理后的循环结果拼接起来,作为最终的Trotter-Johnson编码。

  6. 如果signed=True,则在最后的编码中添加符号位。该符号位的求法为将置换减去其的逆置换后的循环个数的奇偶性。

方法返回值

rank_trotterjohnson()方法返回一个整数,表示置换在Trotter-Johnson编码下的秩。

当signed=True时,返回一个元组,包含在带符号Trotter-Johnson编码下的秩以及该秩对应的符号位。

4. 总结

rank_trotterjohnson()方法是SymPy Permutation模块中的一个功能,可以用于计算置换在Trotter-Johnson编码下的秩。Trotter-Johnson编码是一种根据循环序列对置换进行编码的方式,具有良好的数学性质。

在使用rank_trotterjohnson()方法时,需要注意参数signed的取值(默认为False),该参数确定了编码所使用的符号类型。方法返回的结果是一个整数或元组,前者表示无符号编码下的秩,后者表示带符号编码下的秩和符号位。