Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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
Java中一组数据的排列_Java_Algorithm_Permutation - Fatal编程技术网

Java中一组数据的排列

Java中一组数据的排列,java,algorithm,permutation,Java,Algorithm,Permutation,我一套有10000件物品,每件物品都必须做成三位一体。 我需要一个算法来有效地找到每个三元组 例如: {A,B,C,D,…} 1.AAA 2.AAB 3.AAC 4.AAD 一直到ZZY,ZZZ 我使用的方法效率非常低,我创建了一个3的嵌套forloop,它遍历一个数组,运行时为O(N^3),性能非常差。哪种算法和数据结构更适合这种情况?多谢各位 函数用于打印一组n个字符中K长度的所有排列 重复字符: static void printKLengthPerm(char[]集,字符串前缀,int

我一套有10000件物品,每件物品都必须做成三位一体。 我需要一个算法来有效地找到每个三元组

例如:

{A,B,C,D,…}

1.AAA 2.AAB 3.AAC 4.AAD

一直到ZZY,ZZZ

我使用的方法效率非常低,我创建了一个3的嵌套forloop,它遍历一个数组,运行时为O(N^3),性能非常差。哪种算法和数据结构更适合这种情况?多谢各位

函数用于打印一组n个字符中K长度的所有排列 重复字符:

static void printKLengthPerm(char[]集,字符串前缀,int n,int k)
{ 
如果(k==0)
{ 
System.out.println(前缀);
返回;
} 
对于(int i=0;i
调用函数打印一组全大写英文字母中3个长度的所有排列:

char[]set=新字符[26];
对于(int i=0;i<26;i++)
设置[i]=(字符)(i+65);
int n=设置长度;
打印长度(设置“”,n,3);

请显示您的代码(即使效率很低)。生成了多少个三元组?这是最有效的方法。可能的置换量为
n^k
,在您的情况下为10000^3=10^12,并且您需要为每个置换至少进行一次插入。这与问题中的置换具有相同的立方时间复杂性,而且这具有O(k)递归导致的空间复杂性,这意味着总体性能更差,因为OPs代码具有恒定的空间compl。
static void printKLengthPerm(char[] set, String prefix, int n, int k) 
{ 
    if (k == 0) 
    { 
        System.out.println(prefix); 
        return; 
    } 

    for (int i = 0; i < n; i++) 
    { 
        String newPrefix = prefix + set[i]; 
        printKLengthPerm(set, newPrefix, n, k - 1); 
    } 
}
char[] set = new char[26]; 
for(int i = 0; i < 26; i++)
  set[i] = (char)(i+65);
int n = set.length; 
printKLengthPerm(set, "", n, 3);