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

piy*_*ukr 9 string algorithm combinations combinatorics backtracking

多集是一个集合,其中所有元素可能不唯一.如何枚举集合元素中的所有可能的排列?

小智 13

生成所有可能的排列然后丢弃重复的排列是非常低效的.存在各种算法以按字典顺序或其他种类的顺序直接生成多集的排列.高冈的算法是一个很好的例子,但可能是亚伦威廉姆斯的算法更好

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!)

  • 该链接现已损坏。具有多种语言实现的算法现在位于[此链接](https://github.com/ekg/multipermute)。 (2认同)