Mathematica有三个函数可以干类似的事,根据同一个元素能否重复取,以及列表是否有序分类来看的话:
Tuples 可重复取 有顺序
Permutations 不可重复取 有顺序
Subsets 不可重复取 无顺序
那这样来看的话,好像缺少一个函数,可重复取,无顺序
例如对于 f[{1, 2, 3}, {3}] 应该给出
{{1, 1, 1}, {1, 1, 2}, {1, 1, 3}, {1, 2, 2}, {1, 2, 3}, {1, 3, 3}, {2, 2, 2}, {2, 2, 3}, {2, 3, 3}, {3, 3, 3}}
我能想到的办法是
Union@Subsets[{1, 1, 1, 2, 2, 2, 3, 3, 3}, {3}]
或者
Union[Sort /@ Tuples[{1, 2, 3}, {3}]]
但是这两个方法对于比较大的列表,中间结果就会很占内存,有什么更好的办法吗?
Tuples 可重复取 有顺序
Permutations 不可重复取 有顺序
Subsets 不可重复取 无顺序
那这样来看的话,好像缺少一个函数,可重复取,无顺序
例如对于 f[{1, 2, 3}, {3}] 应该给出
{{1, 1, 1}, {1, 1, 2}, {1, 1, 3}, {1, 2, 2}, {1, 2, 3}, {1, 3, 3}, {2, 2, 2}, {2, 2, 3}, {2, 3, 3}, {3, 3, 3}}
我能想到的办法是
Union@Subsets[{1, 1, 1, 2, 2, 2, 3, 3, 3}, {3}]
或者
Union[Sort /@ Tuples[{1, 2, 3}, {3}]]
但是这两个方法对于比较大的列表,中间结果就会很占内存,有什么更好的办法吗?