【发布时间】:2019-11-27 21:50:47
【问题描述】:
我正在使用来自Combinatorics 库的permutations,该列表具有许多重复值。我的问题是 permutations 正在创建 all 排列,导致溢出,即使 许多 排列是相同的。
julia> collect(permutations([1, 1, 2, 2], 4))
24-element Array{Array{Int64,1},1}:
[1, 1, 2, 2]
[1, 1, 2, 2]
[1, 2, 1, 2]
[1, 2, 2, 1]
[1, 2, 1, 2]
[1, 2, 2, 1]
[1, 1, 2, 2]
[1, 1, 2, 2]
[1, 2, 1, 2]
[1, 2, 2, 1]
[1, 2, 1, 2]
[1, 2, 2, 1]
[2, 1, 1, 2]
[2, 1, 2, 1]
[2, 1, 1, 2]
[2, 1, 2, 1]
[2, 2, 1, 1]
[2, 2, 1, 1]
[2, 1, 1, 2]
[2, 1, 2, 1]
[2, 1, 1, 2]
[2, 1, 2, 1]
[2, 2, 1, 1]
[2, 2, 1, 1]
许多相同的值。我真正想要的只是唯一的排列,而不需要首先生成所有排列:
julia> unique(collect(permutations([1, 1, 2, 2], 4)))
6-element Array{Array{Int64,1},1}:
[1, 1, 2, 2]
[1, 2, 1, 2]
[1, 2, 2, 1]
[2, 1, 1, 2]
[2, 1, 2, 1]
[2, 2, 1, 1]
我可以看到permutations 应该始终返回 all 排列的论点,无论是否唯一,但是有没有办法生成 only 唯一排列所以我不要内存不足?
【问题讨论】:
-
permutations返回一个迭代器,所以内存应该没有问题,除非你collect它。你真的需要这样做吗?你试过unique(permutations( -
unique(permutations(...))?
标签: julia permutation combinatorics