1

如何在 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

其中 * 表示笛卡尔积运算符。

4

1 回答 1

1

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]]]
于 2013-10-31T17:31:32.670 回答