Tag: 置换

C中数字的排列

我正在尝试编写一个C函数来列出一组数字的所有排列,以五个为一组,包括重复数字: 15-11-49-43-5 2-30-34-6-11 所以编写一个函数来获取一个数字集的所有排列并将它们抛出是很容易的,但是映射到某个组大小,我有点卡住..

重复排列:避免溢出

背景: 鉴于n球,使得: ‘a’ balls are of colour GREEN ‘b’ balls are of colour BLUE ‘c’ balls are of colour RED … (当然a + b + c + … = n ) 可以安排这些球的排列数量由下式给出: perm = n! / (a! b! c! ..) 问题1:我如何“优雅地”计算perm以尽可能避免整数溢出,并确保当我完成计算时,我要么具有正确的perm值,要么我知道最终结果会溢出吗? 基本上,我想避免使用像GNU GMP这样的东西。 可选地,问题2:这是一个非常糟糕的主意,我应该继续使用GMP吗?

列出所有排列的代码的时间复杂度?

例如,如果输入字符串是“ABC”,则输出应为“ABC,ACB,BAC,BCA,CAB,CBA”。 这是我的方法: #include #include #include void print(char str[],int visited[],int index,char temp[],int len) { if(index==len) { temp[index]=’\0′; printf(“\n%s”,temp); return; } for(int i=0;i<len;i++) { if(!visited[str[i]-'A']) { visited[str[i]-'A']=1; temp[index]=str[i]; print(str,visited,index+1,temp,len); visited[str[i]-'A']=0; } } } int main() { int visited[20]={0}; char temp[20]; char str[] = "ABCD"; int len=strlen(str); print(str,visited,0,temp,len); getch(); return 0; } 我已经使用了一个访问过的数组来避免重复字符。 这段代码的复杂性是什么?

如何获得xPy的所有排列?

我想计算一组大小为X的大小Y的所有排列。即如果我有(1,2,3)并且想要所有大小为2,3P2的排列,那么它将是(1,2)( 1,3)(2,1)(2,3)(3,1)(3,2)。 GSL和C ++ STL都只提供我能看到的xPx。 有人能指出我在C / C ++库中可以做到这一点,还是拼出一个快速且内存有效的算法? 我正在尝试解决一个非常短的密码。 我发现了两封信并决定进行蛮力攻击。 我有“ouglg ouyakl”,正在检查每个排列对一本非常好的字典。 我已经删除了2个字母,因此它的24P7或1,744,364,160种可能性并不是那么糟糕。 我现在有一个Perl程序在运行,所以这将是编程时间+运行时间总效率的有趣测试。 🙂 (不,我不只是想要密码的答案。)

字符串的排列:如何删除重复的排列?

这是一个打印字符串字符排列的标准函数: void permute(char *a, int i, int n) { int j; if (i == n) printf(“%s\n”, a); else { for (j = i; j < n; j++) //check till end of string { swap((a+i), (a+j)); permute(a, i+1, n); swap((a+i), (a+j)); //backtrack } } } void swap (char *x, char *y) { char temp; temp = […]

生成子序列

我有一个像“0189”这样的字符串,我需要生成所有子序列,但必须保留各个字符的顺序,即这里9不应该在0,1或8之前。例如:0,018,01 ,09,0189,18,19,019等 另一个例子是“10292”,子序列将是:1,10,202,02,09,29,92等。你可能已经注意到’02’两次,因为’2’在给定的字符串中出现两次。 但是,21,11,91之类的东西也是无效的,因为要维持秩序。 任何算法或伪代码,可以用C / C ++实现,将不胜感激!

所有不相交的对的集合

给定{1,2,3,4,5…n} n元素的{1,2,3,4,5…n}组,我们需要找到所有不相交的对。 例如,如果n = 4,则输出为 {(1,2),(3,4)}, {(1,3),(2,4)}, {(1,4),(2,3)} 我甚至无法弄清楚如何开始。 我希望有人可以给我一个关于使用哪种算法的建议,以及可能的一些实现细节。