一尘不染

如何生成一个多集的所有排列?

algorithm

多重集是其中所有元素可能都不唯一的集合。如何枚举集合元素中所有可能的排列?


阅读 208

收藏
2020-07-28

共1个答案

一尘不染

生成所有可能的排列,然后丢弃重复的排列,效率极低。存在各种算法以按字典顺序或其他类型的顺序直接生成多集的排列。Takaoka的算法是一个很好的例子,但也许Aaron
Williams的算法更好

http://webhome.csc.uvic.ca/~haron/CoolMulti.pdf

此外,它已在R包“ multicool”中实现。

顺便说一句,如果您只想要不同排列的总数,答案就是多项式系数:例如,如果您有n_a个元素“ a”,n_b个元素“ b”,n_c个元素“
c”,那么不同的排列是(n_a + n_b + n_c)!/(n_a!n_b!n_c!)

2020-07-28