一連の 行に間隔があり、 他の区間に含まれる区間を見つけるアルゴリズム(たとえば、Manber、「アルゴリズムを設計するための誘導の使用」、1988)。ありますか 高次元の軸整列長方形のアルゴリズム?
私はインターネットで検索して自分で考えようとしましたが、より高い次元の一般化を見つけることができませんでした。たとえば、 平面上の軸に沿った長方形の場合、タスクは、他の長方形に含まれる長方形を見つけることです。
一連の 行に間隔があり、 他の区間に含まれる区間を見つけるアルゴリズム(たとえば、Manber、「アルゴリズムを設計するための誘導の使用」、1988)。ありますか 高次元の軸整列長方形のアルゴリズム?
私はインターネットで検索して自分で考えようとしましたが、より高い次元の一般化を見つけることができませんでした。たとえば、 平面上の軸に沿った長方形の場合、タスクは、他の長方形に含まれる長方形を見つけることです。
回答:
多次元インデックスを検討しましたか?それらは通常、重なり合う長方形や含まれる長方形を見つけるのに非常に効率的です。
私は一種のプレフィックス共有バイナリ四分木を個人的に書きました:Javaソース
四角形のためのAPIがあり、別の四角形に含まれる四角形を検索するための特別なメソッドがありますPhTreeSolidF.queryInclude()
。
複雑さはわかりませんが、ツリーを構築するためのO(n * k * log n)の順に、クエリごとにO(k * log n)の順になります(kは次元数です)。強くクラスター化されたデータセットの場合、クエリごとにO(1)で何かが失われる可能性もあります(n = 10.000.000および2 <= k <= 15でこれをテストしました)。
軸に沿った長方形と高次元の超立方体の範囲検索の自然な拡張/一般化があります。
問題は、各軸の範囲包含を個別にチェックし、各1-d範囲包含を「所有する」長方形または超立方体の交点を見つけることへと減少します。k * O(f(n))が必要です。ここで、f(n)は単一の次元をチェックする時間であり、kは次元数です。これは、軸に整列した長方形/ハイパーキューブの場合、ハイパーキューブは別のハイパーキューブにあり、その個別の辺もすべてであるという単純な考えに基づいています。同様のアルゴリズムで可能ですが、これは単に軸が整列した長方形/超立方体を重ね合わせるだけではありません。
文献でこれが公開されていることは認識していませんが、複雑ではなく、少なくともどこかで引用されていると思われます。この主題に関する文献は、一般にKdツリーまたは四分木(2dケース)で機能し、データベース範囲クエリ/検索の一般的なカテゴリに分類されます。そこにあるアプローチは一般に、ポリゴンなどの一般的な幾何学的オブジェクトを定義できるようにし、ポリゴンが重複するKd内のすべてのノードを見つけ、ポリゴンのすべてのノードに対して範囲計算を行って交差を決定します。