【发布时间】:2018-06-27 05:48:55
【问题描述】:
我正在尝试在三个位置生成 A、B、C、D、E 的所有组合:
A,A,A
A,A,B
C,A,E
C,B,A
C,B,B
etc...
我已经了解了阶乘数字系统和组合数字系统,但我仍然无法找到正确的实现。一般过去我都使用递归来解决这个问题,但是在这种情况下我不想生成整个列表来找到一个值,所以我需要一个编码。
理想情况下,我对组合有一个整数编码,所以我可以简单地调用一个带有迭代整数的函数来生成正确的排列。
还有这叫什么,我如何才能更多地了解方法的变化?我见过的一些类似的解决方案只生成不重复的组合(ABC,ABD),而其他的则不重用值。
根据我过去的递归方法,我的猜测是permutation(0) 将导致aaa 和permutation(100) 将导致adw。
【问题讨论】:
-
这些被称为Combinations with repetition。那里有很多很好的实现可以帮助您入门。
-
事实上,这里有post 为您的情况提供解决方案。
-
感谢@Emil,链接是我正在寻找的解决方案!我认为“n Multichoose r”版本是我需要的。我在哪里可以了解有关此类问题的更多信息?我想我可能在这里找到了一些东西:cis.upenn.edu/~cis160/current/files/lecture/ln05.pdf
-
您在寻找组合还是排列?如果
A,A,B与B,A,A不同,那么您正在寻找permutations with repetition
标签: algorithm combinations permutation combinatorics