多重集是其中所有元素可能都不唯一的集合。如何枚举集合元素中所有可能的排列?
生成所有可能的排列,然后丢弃重复的排列,效率极低。存在各种算法以按字典顺序或其他类型的顺序直接生成多集的排列。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!)