如何在 sage 中创建可变数量集合的笛卡尔积?
例如,如果 A 是长度为 n 的整数列表,我们要创建笛卡尔积,其第i个集合是集合 {1,...,A[i-1]} 的所有排列的集合;
def PermProd(A):
n=len(A)
X=Permutations(A[0]) * Permutations(A[1]) * ... * Permutations(A[n-1])
return X
其中 * 表示笛卡尔积运算符。
如何在 sage 中创建可变数量集合的笛卡尔积?
例如,如果 A 是长度为 n 的整数列表,我们要创建笛卡尔积,其第i个集合是集合 {1,...,A[i-1]} 的所有排列的集合;
def PermProd(A):
n=len(A)
X=Permutations(A[0]) * Permutations(A[1]) * ... * Permutations(A[n-1])
return X
其中 * 表示笛卡尔积运算符。
CartesianProduct
接受可变数量的参数,每个参数必须是可迭代的。因此,如果您A
是排列组的列表,CartesianProduct(*A)
请执行您想要的操作。这是一个例子:
sage: list(CartesianProduct(*(Permutations(i) for i in range(4))))
[[[], [1], [1, 2], [1, 2, 3]],
[[], [1], [1, 2], [1, 3, 2]],
[[], [1], [1, 2], [2, 1, 3]],
[[], [1], [1, 2], [2, 3, 1]],
[[], [1], [1, 2], [3, 1, 2]],
[[], [1], [1, 2], [3, 2, 1]],
[[], [1], [2, 1], [1, 2, 3]],
[[], [1], [2, 1], [1, 3, 2]],
[[], [1], [2, 1], [2, 1, 3]],
[[], [1], [2, 1], [2, 3, 1]],
[[], [1], [2, 1], [3, 1, 2]],
[[], [1], [2, 1], [3, 2, 1]]]