Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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 生成大小为n的k个字符组合的算法_Algorithm_Recursion - Fatal编程技术网

Algorithm 生成大小为n的k个字符组合的算法

Algorithm 生成大小为n的k个字符组合的算法,algorithm,recursion,Algorithm,Recursion,我需要一个算法来生成大小为n的k个字符的所有组合 例如,如果我有n=1和k={a,b},结果应该是: a b a a a a a b a b a a b b b a a b a b b b a b b b 如果n=3且k={a,b},则结果应为: a b a a a a a b a b a a b b b a a b a b b b a b b b 有人能提出一个实现这一点的算法吗 谢谢大家! k的长度与n的幂之比 在java中: int combinations = Math.pow(

我需要一个算法来生成大小为n的k个字符的所有组合

例如,如果我有n=1和k={a,b},结果应该是:

a
b
a a a
a a b
a b a
a b b
b a a
b a b
b b a
b b b
如果n=3且k={a,b},则结果应为:

a
b
a a a
a a b
a b a
a b b
b a a
b a b
b b a
b b b
有人能提出一个实现这一点的算法吗


谢谢大家!

k的长度与n的幂之比

在java中:

int combinations = Math.pow(k.length,n);

只需将解决方案映射到值0到(| k | ^n)-1即可。解决方案就是用基数| k |表示数字

e、 g.k={a,b,c}n=2
解为0,1,2,。。。3^2-1=8

decimal |  representation in base 3
--------+---------------------------
0       |   00
1       |   01
2       |   02
3       |   10
4       |   11
5       |   12
6       |   20
7       |   21
8       |   22
现在,将“0”替换为“a”,将“1”替换为“b”,将“2”替换为“c”,这样就得到了

aa
ab
ac
ba
bb
bc
ca
cb
cc
我就是这样做的。
这是直观的,我希望它能帮助你。 说明:选择一个字符并选择它旁边的内容。递归地执行此操作

 char availablechars[];//In your case this is {a,b}
 int availablechars_size;//This is 2
 void generate(int n,string res)
 {
   if(n==0)
   {
     cout<<"\n"<<res;
     return;
   }
   for(int i=0;i<availablechars_size;i++)
   {
    string t=res;
    t+=availablechars[i];
    t+=" ";
    generate(n-1,t);
   }
 }

将您尝试的
长度k
张贴到
n
可能重复的地方:-1个重复的作业question@fordprefect这不是一个家庭作业问题。我需要在我的代码中这样做,虽然问题和解决方案很简单,但我没有想到它们,我也无法通过搜索web找到解决方案。是的,这是想要的答案的大小,但生成组合是个问题。我真的很想看看你如何在k=10时做到这一点,n=100将数字表示转换为基数| n |是一个非常简单的算法,所以我没有在这里发布一个实现。@Nicolas Tyler:你说的
是什么意思对他的两个例子都不起作用?他的k={a,b}n=3示例导致数字0..2^3-1=7,对应于他发布的8个组合作为所需的解决方案。@icepack:从
0到10^100-1=
进行计数循环。当然,你需要一种能够表示如此大的数字的语言。如果你更擅长函数式编程,更多的内存使用和更慢的速度对你来说是没有问题的,你也可以使用递归方法,从n=1开始,然后递归扩展n乘以1。看到你的复杂度定义有点滑稽。复杂性通常是根据输入参数定义的,在这种情况下,它是
n
k
。除非通过
n
k
定义,否则
M
不会提供任何有用的信息。复杂性是
O(k^n)