2 つのリストで重複するすべての範囲を効率的に見つけるのに問題があります。この問題はこの質問に
似ていますが、入力が異なります。
2 つの入力ファイルがあります。1 つは範囲とデータのペアの多くの行を含み、もう 1 つは交点を見つけるための範囲のリストを含みます。
データ ファイルから読み取り、範囲とデータのペアのリストを保持するオブジェクトを一度に 1 つずつ返すファイル リーダー クラスを既に作成しましたが、2 つの範囲リストの重複を見つけようとすると問題が発生します。
現在私が行っているのは、データ リスト内のすべての範囲を共通部分リスト内の他のすべての範囲と比較するブルート フォースですが、データ ファイルが非常に大きいため、時間がかかります。
サンプル オブジェクト:
これは、データ リスト内のオブジェクトです。
public DataModel {
private int start; {set; get;}
private int end; {set; get;}
//Other Data
}
モデルの範囲は、対になった整数 (開始、終了) の単なるリストです。
while (fileParser.hasNext()) {
dataList = fileParser.next();
for (DataModel data : dataList)
for (RangeModel range : rangeList)
if(overlaps(data, range))
print(range.getString + " " + data.getString);
}
わかりやすくするために編集します。
DataModel は、さまざまな長さの同様の範囲の小さなパケットで提供されますが、ほとんどが 20 未満であるため、比較は同じ RangeModel とそれぞれの新しい DataModel で繰り返し実行されます。すべてのデータの合計範囲は約 20 億ですが、実際には問題ではありません。助けてくれてありがとう。