私はIncognito k-anonymization algorithmをJavaで実装しようとしています。 このアルゴリズムの一部は、指定されたテーブルの頻度セット構成です。テーブルのカラムは毎回変わるので、テーブルをObject []のArrayListとして表現することにしました。ここで、Object [] sizeはカラムの数です。このオブジェクトでは、各列の各行の値を格納します。ArrayListのオブジェクトの頻度テーブルの作成<Object[]>
私は、以下の方法を用いて周波数テーブルを構築しよう:
ArrayList<Object[]> table = new ArrayList<Object[]>();
....// table filling//.....
ArrayList<Object[]> frequencySet = new ArrayList<Object[]>();
for(int i=0;i<table.size();i++)
{
Integer count = 1;
int j = 0;
for(j=i+1;j<table.size();j++)
{
if(Arrays.equals(table.get(i), table.get(j)))
{
//System.out.println(i+" equals to "+j);
count++;
table.remove(j);
j = j-1;
}
}
int size = arguments.size()+1;
Object[] anObject = new Object[size];
System.arraycopy(table.get(i), 0, anObject, 0, arguments.size());
anObject[size-1] = count;
frequencySet.add(anObject);
}
問題は、アルゴリズムが非常に遅いことである、と私はほとんどの時間をこの方法で消費されていることを考え出しました。 (100.000データの場合、実行するのに13分必要です - これが正常かどうかわかりません)。頻度表を作成するためのより速い方法がありますか?
最後の要素として列番号がある場合は、すべての列が異なり、列の詳細コピーを取ることができます。 –