【发布时间】:2012-10-22 11:30:17
【问题描述】:
我想写一个算法来打印给定“”对的所有可能组合,我试图开发一种算法来解决这个问题,但我认为这是不正确的,因为我确实意识到了这个问题与排列 [nPr] 相关,假设给定输入为 5,它应该创建 120 个组合(5P5=120),但我的代码只生成 81 个。
In my code have tried to generate all possible combinations by placing every element at every place one by one, but now I am little confused about how correct this approach is?
事情很可能无法掌握“制作子集/组合/排列”的真正概念(尽管理论上我知道它们是什么以及如何计算它们)
我不是在寻找一个完整的最终“勺式代码”,而是可以解释我“我应该做什么”的东西,我可以从中提取步骤,理解概念并开发自己的。
If possible something extending or tweaking my current coding to achieve the right result would be easier for me to understand.
void permute()
{
string str=”<><><>”;
char buck=' ';
for(int a=0;a<str.length()-1;a++)
{
for(int b=0;b<str.length()-1;b++){
cout<<str<<endl;
buck=str[b];
str[b]=str[b+1];
str[b+1]=buck;
}
}
}
我一直在努力了解我应该做什么,但我仍在苦苦挣扎,任何帮助或指导都会非常有帮助。 谢谢你
From 'all combinations' i mean printing out all the possible ways given set of characters can be arranged, lets say for 2 pairs '<><>' it should be like: <><>,><<>,><<>,><><,<<>>,>><< ... ... ...
【问题讨论】:
-
您可能想看看cs.sunysb.edu/~algorith/files/generating-permutations.shtml 以及“递归生成排列”。
-
你能举例说明 n=2 吗?我不确定 的所有组合到底是什么意思
-
排列和组合是不同的东西,需要不同的算法。你应该明确你想要哪一个。
-
><><><是有效的解决方案吗?如果不是 - 你有Cn(n/2)的可能性,其中Cn表示Catalan number -
@Maven:那么您要求的是标准排列。那里有很多细节。您的编辑澄清了它与加泰罗尼亚语编号无关。
标签: c++ algorithm set permutation combinations