Algorithm 生成大小为n的k个字符组合的算法
我需要一个算法来生成大小为n的k个字符的所有组合 例如,如果我有n=1和k={a,b},结果应该是: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(
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)