如何找到所有排列总和为 n 的 k 个正数的所有分区

How to find all partitions of k positive numbers that sum to n with all permutations

提问人:zdm 提问时间:10/25/2023 最后编辑:zdm 更新时间:11/17/2023 访问量:96

问:

对于 和 ,我们有k=4n=6

1 + 1 + 1 + 3 = 6
1 + 1 + 2 + 2 = 6

可以从分区号的三角形中获得。

但是我们可以有更多的排列(总共 4 个),如下所示:1 + 1 + 1 + 33

1 + 1 + 1 + 3
1 + 1 + 3 + 1
1 + 3 + 1 + 1
3 + 1 + 1 + 1

对于我们还可以有更多的排列(总共 6 个),如下所示:1 + 1 + 2 + 25

1 + 1 + 2 + 2
1 + 2 + 1 + 2
1 + 2 + 2 + 1
2 + 1 + 2 + 1
2 + 1 + 1 + 2
2 + 2 + 1 + 1

我认为总的来说,对于每个可能的分区。binomial(n, n - k)

如何在 Python 或 Julia 中找到所有这些分区?

在 Julia 中,我的尝试如下,我认为这是正确的,但不是最佳的,因为我正在生成所有排列,然后应用 unique 来删除重复的排列。

using Combinatorics
n, k = 6, 4
comb = []
for partition in partitions(n, k)
    permuted_partition = permutations(partition)
    unique_permuted_partition = unique(permuted_partition)
    append!(comb, unique_permuted_partition)
end
算法 数学 组合 分区

评论

0赞 XxJames07- 10/25/2023
这是 stackoverflow.com/questions/10035752/ 的复制品吗......
1赞 zdm 10/25/2023
问题不在于整数分区。整数分区是一种将 n 写为正整数之和的方法。我想将 n 划分为 k 个数字的总和,并进一步找到所有排列。
0赞 Joseph Wood 10/25/2023
这些组合称为整数组合
0赞 Joseph Wood 10/25/2023
你能告诉我们你的尝试吗?

答:

0赞 zdm 11/17/2023 #1

在 Julia 中,以下内容回答了这个问题,但我认为这不是最佳选择,因为我正在生成所有排列,然后应用 unique 来删除重复的排列。

using Combinatorics
n, k = 6, 4
comb = []
for partition in partitions(n, k)
    permuted_partition = permutations(partition)
    unique_permuted_partition = unique(permuted_partition)
    append!(comb, unique_permuted_partition)
end