我有大小为 N 的数组,我需要从这个数组中生成大小为 K 的所有排列变体。变体 [1 2 3] 和 [3 1 2] 是不同的。我发现的标准解决方案是
1)只是排列,在那里我获得与数组相同大小的所有重新排序。
2)只是组合,我从大小为 N 的数组中获得大小为 K 的所有组合,但对于这些算法 [1 2 6] 和 [6 1 2] 是相同的,而我需要它们不同。
你能帮我找到一个有效的解决方案吗?
我应该在 Matlab 上实现它,但我希望我能够从其他语言翻译您的解决方案。
基本上,在任何可以从 1:N 生成大小为 K 的所有无序子集,并且可以生成 1:K 的所有排列的任何语言中,获取所有有序子集就像迭代子集并使用每个 K-排列。
在 Julia 语言中:
using Combinatorics, Iterators, Base.Iterators
N = 4
K = 2
collect(flatten(permutations(subset) for subset in subsets(1:N,K)))
给出:
12-element Array{Array{Int64,1},1}:
[1, 2]
[2, 1]
[1, 3]
[3, 1]
[1, 4]
[4, 1]
[2, 3]
[3, 2]
[2, 4]
[4, 2]
[3, 4]
[4, 3]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句