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