私は次元720x90の二次元配列を持っています。 RとCの行を列としましょう。 R1 = {C1、...、C90}2次元配列の削除ノードの最適化
....
R720 = {C1、...、C90}今
、Iは、データのいずれかどうかを確認しますいずれかの行は他の行のどこにでも表示されます。たとえば、行470と列67のデータが行672と列34の複製であるとします。この場合、データセットから行470と行672の両方を削除してチェックを継続します。私はすべての行をチェックした後、残っている行のインデックスだけを出力したい。私はこれのbrute-forceメソッドを書いています。しかし、このコードを実行すると、決して返されず、私はなぜそれを診断することができません。また、これを行うより効率的な方法がありますか?
//check all the subsets of the interleaved data
public static int checkSubsets(String[][] subsets){
List subset = new ArrayList();
for(int i = 0; i< 720; i++){
for(int j = 0; j < 90; j++)
subset.add(subsets[i][j]);
}
Object duplicate;
Iterator itr = subset.iterator();
while(itr.hasNext()){
duplicate = itr.next();
while(itr.hasNext()){
subset.remove(duplicate);
itr=subset.iterator(); //to avoid concurrent modification
itr.next();
}
}
return subset.size();
}
説明:マトリックスの各値を調べながら繰り返しています。私はR1 C1(行1 - 列1)の最初の値を取る。私はこれらの値が12,346,123,356行のどこかにあることを知ります。それから私は行列からすべての行を削除します。だから行列は5行小さくなります。私は行1を今すぐ停止し、行2に移動します。行12,346,123、および356をスキップし続けます。したがって、一意の行(すべて90の値が一意です)の後です。
誤ったイテレータを使用しています(内部whileループは無限です)、正しく使用しても、言葉で説明したロジックと実装したロジックとの間の接続はありません。 – Eran
私はあなたが解決しようとしていることをかなり得ていません。行10の場合、行11の数字でcol1が複製され、行10のcol2が行12の別の数字と重複している場合、行10と11のみが検査から除外され、行10と12の複製が見落とされますか? –
申し訳ありませんが、私はそれをより明確にすべきでした。私はすべての行を削除したい。あ、はい。行12を含めて。 –