長方形の封じ込めのための効率的なアルゴリズム


7

一連の n 行に間隔があり、 O(nlogn)他の区間に含まれる区間を見つけるアルゴリズム(たとえば、Manber、「アルゴリズムを設計するための誘導の使用」、1988)。ありますかO(nlogn) 高次元の軸整列長方形のアルゴリズム?

私はインターネットで検索して自分で考えようとしましたが、より高い次元の一般化を見つけることができませんでした。たとえば、n 平面上の軸に沿った長方形の場合、タスクは、他の長方形に含まれる長方形を見つけることです。


2
n + 1次元の問題の解を導き出す1つのアプローチは、関連する空間をn次元の「平面」を「スイープ」することです。もう1つは、後者をそのような平面で細分割し、分割平面と交差しないオブジェクトの問題と再帰的に交差するオブジェクトの問題を再帰的に解決し、結果をまとめることです。
greybeard 2015年

@vznとDW:質問を編集しました。また、最初の(greybeardの)コメントは効率的なアルゴリズム(長方形との交差が「分岐点」で長方形の構造変化を起こす垂直「スイープライン」、つまり長方形の垂直側面の投影)につながるようにも思えます。
John Donn

@vznこれはあなたが考えていた「自然な一般化」ですか?そうでない場合は、おそらく回答を投稿できます。
John Donn、2015年

「また、最初の(greybeardの)コメントが効率的なアルゴリズムにつながるように思えます。」-試しても、垂直スイープラインと長方形の交差を維持するのに適切なデータ構造を見つけることができませんでした(必要な全体的な操作はlittle_o(n ** 2))です。
John Donn、2015

回答:


2

多次元インデックスを検討しましたか?それらは通常、重なり合う長方形や含まれる長方形を見つけるのに非常に効率的です。

私は一種のプレフィックス共有バイナリ四分木を個人的に書きました:Javaソース 四角形のためのAPIがあり、別の四角形に含まれる四角形を検索するための特別なメソッドがありますPhTreeSolidF.queryInclude()

複雑さはわかりませんが、ツリーを構築するためのO(n * k * log n)の順に、クエリごとにO(k * log n)の順になります(kは次元数です)。強くクラスター化されたデータセットの場合、クエリごとにO(1)で何かが失われる可能性もあります(n = 10.000.000および2 <= k <= 15でこれをテストしました)。


-1

軸に沿った長方形と高次元の超立方体の範囲検索の自然な拡張/一般化があります。

問題は、各軸の範囲包含を個別にチェックし、各1-d範囲包含を「所有する」長方形または超立方体の交点を見つけることへと減少します。k * O(f(n))が必要です。ここで、f(n)は単一の次元をチェックする時間であり、kは次元数です。これは、軸に整列した長方形/ハイパーキューブの場合、ハイパーキューブは別のハイパーキューブにあり、その個別の辺もすべてであるという単純な考えに基づいています。同様のアルゴリズムで可能ですが、これは単に軸が整列した長方形/超立方体を重ね合わせるだけではありません。

文献でこれが公開されていることは認識していませんが、複雑ではなく、少なくともどこかで引用されていると思われます。この主題に関する文献は、一般にKdツリーまたは四分木(2dケース)で機能し、データベース範囲クエリ/検索の一般的なカテゴリに分類されます。そこにあるアプローチは一般に、ポリゴンなどの一般的な幾何学的オブジェクトを定義できるようにし、ポリゴンが重複するKd内のすべてのノードを見つけ、ポリゴンのすべてのノードに対して範囲計算を行って交差を決定します。


1
あなたが説明しているような気がします O(kn2)ここでアルゴリズム。これはOPが求めているものよりも悪いです。重要な点は、各次元でのチェックの結果が何であるかです。それは何かで覆われいるエントリをマークするだけですか、それともどのエントリがどのエントリをカバーしているかの記録ですか?前者だと、各次元の結果を組み合わせるには情報が足りないと思います。カバーするエントリのアイデンティティを知る必要があります。カバーするエントリのIDを記録する後者のバージョンでは、かかる時間はO(n2)私が思うように、各Dについて。
Apiwat Chantawibul 2015年

複雑さの分析は簡単ではなく、詳細も記入もされていませんが、「近い」と考えています。1d範囲の包含は、「A inside B」という関係のツリーとして表すことができます。Rubyでコードを書き上げる可能性があります。は、時間のある人なら誰でもComputer Science Chatで詳細を明確にできる
vzn '19
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.