私のアルゴリズムは、数値 0...n の順列を生成します。ここで、n は 1 から 9 までの任意の数値です。1 から 8 までの数値に対しては完全に機能します。ただし、9 で実行すると、しばらく実行されます。その後、突然プロセスを中止して終了します...エラーメッセージなどはありません! 私はかなり長い間Javaでコーディングしてきましたが、このエラーを経験したことはありません.
私のアルゴリズム:-
package utils;
import java.util.ArrayList;
class Lexicography {
static ArrayList<Long> perms = new ArrayList<Long>();
public static void main(String[] args){
long time = System.currentTimeMillis();
getPermutations(Integer.valueOf(args[0]));
System.out.println("\nSize:-"+perms.size()+"\nTime:-"+(System.currentTimeMillis()-time));
//This println is never printed... java aborts before that
}
public static ArrayList<Long> getPermutations(int num){
int[] n = new int[num+1];
for(int i=0; i<=num; i++) n[i]=i;
perms.add(getLong(n));
for(int i=num; i>=0; i--) permutate(n[i],n);
return perms;
}
private static void permutate(int k, int[] n){
if(k>n.length) return;
int p=0;
for(int i:n){ if(i==k) break; p++;}
for(int i=0; i<n.length; i++){
if(i==p || n[i]<k) continue;
n=swap(p,i,n);
perms.add(getLong(n));
System.out.println("i:"+(i+1)+" k:"+k+" n:"+getLong(n));//this prints all permutations till the last one and then poof!
for(int j=k-1; j>=0; j--) permutate(j,n);
n=swap(p,i,n);
}
}
private static int[] swap(int i, int f, int[] a){
int t=a[f];
a[f]=a[i]; a[i]=t;
return a;
}
private static long getLong(int[] n){
long ten=1, num=0;
for(int i=n.length-1; i>=0; i--){
num+=n[i]*ten; ten*=10;
}
return num;
}
}
print ステートメントがない場合、これは 8 までの数値に対してかなり高速に実行されます (8 の場合、280 ミリ秒未満で実行されます)。しかし、9の場合、最後の順列を印刷した後、突然停止します。誰か助けてくれませんか?ありがとうございました!