Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 用重复值编码置换_Algorithm_Combinations_Permutation_Combinatorics - Fatal编程技术网

Algorithm 用重复值编码置换

Algorithm 用重复值编码置换,algorithm,combinations,permutation,combinatorics,Algorithm,Combinations,Permutation,Combinatorics,我试图在三个位置生成A、B、C、D、E的所有组合: A,A,A A,A,B C,A,E C,B,A C,B,B etc... 我已经学习了阶乘数系统和组合数系统,但我仍然在寻找正确的实现。通常在过去,我使用递归来解决这个问题,但是在这种情况下,我不想生成整个列表来找到一个值,所以我需要一个编码 理想情况下,我有一个整数编码的组合,所以我可以简单地调用一个函数与迭代整数生成正确的排列 这又叫什么?我怎样才能更多地了解方法的变化?我见过的一些类似的解决方案只生成非重复的组合(ABC、ABD),其他

我试图在三个位置生成A、B、C、D、E的所有组合:

A,A,A
A,A,B
C,A,E
C,B,A
C,B,B
etc...
我已经学习了阶乘数系统和组合数系统,但我仍然在寻找正确的实现。通常在过去,我使用递归来解决这个问题,但是在这种情况下,我不想生成整个列表来找到一个值,所以我需要一个编码

理想情况下,我有一个整数编码的组合,所以我可以简单地调用一个函数与迭代整数生成正确的排列

这又叫什么?我怎样才能更多地了解方法的变化?我见过的一些类似的解决方案只生成非重复的组合(ABC、ABD),其他的则不重用值


根据我过去的递归方法,我猜测
置换(0)
将导致
aaa
置换(100)
将导致
adw
,您寻找的特定组合似乎只是“每个位置上的A、B、C、D、E中的任何一个”。 在本例中,它们非常类似于“五角星”(基数5):您有三个数字,每个数字可以分别为0(a)、1(B)、2(C)、3(D)或4(E)。 将它们编码为整数也是如此:只需将它们从0到53-1进行编号

对于数字k,“组合”是(k div 52)mod 5,(k div 51)mod 5,(k div 50)mod 5,其中
ABCDE
分别编码为
01234


对于像“xyz”这样的“组合”“,首先将字母
ABCDE
映射到数字
01234
作为x、y和z,然后编码号是x*52+y*51+z*50。

这些被调用。有很多好的实现可以让你开始。事实上,这里有一个适合你的解决方案。可能重复的感谢@Emil链接是我正在寻找的解决方案!我认为“n Multichose r”版本正是我所需要的。我在哪里可以进一步了解这类问题?我想我可能在这里找到了一些东西:你是在寻找组合还是排列?如果
A,A,B
B,A,A
不同,那么您要查找的是用于排列的。一组5个选择3个的组合的数量在一次只能返回35个结果。@Emil给出的例子不是组合意义上的组合。参见
A,A,B
C,A,E
。同意,但现在似乎我们需要更多clarification@Blaine. 不需要。如果你想要重复的组合(“多少个B”很重要,“哪里是B”不重要),就用你链接的答案。如果职位也很重要(“ABB”不同于“BBA”),请按照我的回答回答。谢谢你的帮助!下面是我写的解决方案: