約実行のコスト。スキップ四分木における最近傍探索


10

:質問は私の答えに修正再表示されている:我々は最低兄弟先祖を見つけることができる今と仮定すると、時間、ANNは本当にして行うことができるO ログN O(1)O(logn)


四分木は効率的な空間インデックスです。[2]で説明されているように、圧縮四分木構造での最近傍探索の実装に関するパズルがあります。(詳細については説明しませんが、検索はいわゆる等距離の四角形に沿ってトップダウンで行われ、等距離パスのテールノードで終わります。添付画像では、これは点で満たされた南東のノードのいずれかである可能性があります。)

それらのアルゴリズムが機能するためには、各ノード(少なくとも2つの空でない象限がある正方形)の4つの方向(北、西、南)のそれぞれの最下位(階層内で最も近い)の祖先ノードのポインターを維持する必要があります、東)。これらは、ノードの西向きの祖先の緑色の矢印で示されます(矢印は祖先の正方形の中心を指しています)。

この論文では、これらのポインタはポイントの挿入と削除中にO(1)で更新できると主張しています。ただし、緑のポイントの挿入を見ると、任意の数のポインター(この場合は6つ)を更新する必要があるようです。

私はこのポインタの更新を一定の時間で行うトリックを望んでいます。たぶん、悪用される可能性のある間接の形式があるのでしょうか?

ポイント挿入の前(左)と後(右)の四分木

編集:

論文の関連セクションは6.3で、「パスに曲がりがある場合、の最下位の祖先に加えて、方向ごとに最下位のルートも考慮する必要があります。その方向に向かう祖先[...] 各方向の最も近い祖先を指す各正方形に追加のポインターを関連付ける場合、からこれらの正方形を見つけることは、正方形あたり時間で実行できます。これらのポインタは、点の挿入または削除中に時間で更新することもできます。 "log(c/ε)q2dqqO(1)2dQ0O(1)

[2]:Eppstein、D。とGoodrich、MTとSun、JZ、「スキップ四分木:多次元データ用の単純な動的データ構造」、計算幾何学に関する第21回年次シンポジウムの議事録、pp。296—305 、2005年。


2
久しぶりなので正確には覚えていませんが、今朝(arxiv版とジャーナル版の両方)の論文を読み直したところ、必要とするポインターをどこに保存しているのかわかりませんでした。親子ポインターとクロスサンプルポインターのみを保持していると思いました。ですから、あなたはそれが何を言っているかを述べている論文のテキストをより正確に指すことができます。
David Eppstein、

2
こんにちはデビッド、見てくれてありがとう。ANN検索は最後のセクションです(6)。問題は図に示されています。7(b)これは、qが左下のどこかにある場合、上の図でグラフ化したものです。質問を編集して、セクション6.3のテキストの特定の部分を含めました。多分平衡化の定義でリラックスできる方法についていくつかのアイデアがありますが、代替カウントがターゲットのパフォーマンスに違反していないことを証明できるかどうかはわかりません...
0__

2
わかりました、それは問題のように見えます。私はGoodrichと話し合っています(詳細のほとんどをここで行ったSunとは連絡が取れなくなりました)。私たちの現在の感覚では、これらの追加のポインタは実際には必要ありません(おおよその範囲では必要ありません。おおよその近傍が異なる必要があるのはなぜですか。クエリアルゴリズムが、ポインタを使用して検索するのではなく、少し下に移動します)。
David Eppstein

2
ありがとうございます。文字数とレイアウトの理由から、私の「直感的なアイデア」をスケッチする回答を追加します。おそらくそれが出発点です。
0__

回答:


11

デビッドと同様に、ジョナサンが2 ^ dポインターについてその発言をした理由はわかりません。それらは必要ありません。Davidが前述したように、本質的なプロパティは、Q_0でリーフvへのポイントロケーションを行う場合、スキップクワッドツリーの兄弟ノード(およびそのボックス)を覚えておけば十分です。Pからのボックスを処理するとき、クエリポイントに最も近いリーフボックスのポイントロケーションを実行し、下に移動するときに兄弟ボックスを挿入します。これは多かれ少なかれあなたの答えと同じだと思われます。さらに、この手順は、たとえば、次の論文でおおよその点の位置がどのように行われるかと非常に似ています。 「近似最近傍探索固定次元の最適なアルゴリズム」、JACM、1998。


朗報です!ダウンステップ中に兄弟を追加することで、全体的な最悪のケースのコストの範囲が変わるかどうかはわかりませんでしたが、違います。Aryaらの論文を調べましたが、
Quadtree

5
うわー!cstheory.SEへようこそ!
Hsien-Chih Chang張惠之

5

スキップ四分木は、Zオーダーに従ってポイントを格納するデータ構造のスキップリスト実装と考えることができます。(おそらく)少なくとも概念的には単純です...

ここの第2章を参照してください:http : //goo.gl/pLiEO

そして、はい、一定の時間でいくつかの基本的なZオーダー演算を実行できると仮定すると、ANNは必ず対数時間で実行できます。前述の章では、圧縮された四分木が必要な場合に、奇妙な演算を回避する方法がないことも示しています。LCA操作は必要ないことに注意してください...


3
はい、そして決定論的バリアントは、同じzオーダーの2〜3の木によく似ています。
David Eppstein

リンクをありがとう、確かに私は以前にあなたの論文を見たことがあります。いずれにせよ、私は与えられたアルゴリズムで境界を経験的に検証することができませんでした。定理13のラウンド数を制限するために使用される補題7への参照は、一定の半径想定しているのに対し、無効である可能性があると感じています。一方、ANNの検索半径は徐々に変化し、重要な正方形のセット。r
0__ 2013

半径は、検索プロセス中に縮小します。私はその議論が正しいと合理的に楽観しています。
Sariel Har-Peled 2013

1

また、これらのポインターがなくても生活できると直感的に感じます。ある時点ですべてのノードをハードディスクに永続化する必要があるため、ポインターの削減は非常に大きくなります。

私の考えはおおよそ次のとおりです。最適な候補点(リーフ)除いて、各ラウンドでの最悪の距離も追跡します。最悪の距離は、が正方形の内部か外部かに関係なく、ノードすべてのコーナーからクエリポイントまでの距離の最大値になります。lbestrmaxdist(v,q)qvv

ラウンドは次のようなものですが空の場合は、返されます。それ以外の場合、delete-minはの現在のをます。を初期化し(最適な候補がまだ観察されていない場合は、設定します)。最初に、空でない子をそれぞれテストし。この子がリーフである場合、必要に応じておよび更新します。場合ノードで計算および、後者は、最良の距離である:ゼロか、もしPlbestp0Q0rmaxlbestp0Q0qlbestrmaxqdist(q,v)dist(q,v)v内にある、またはすべてのコーナーの最短距離に。qqv

場合、忘れ、そうでなければそれを維持します。保持されるノードの数が場合、それらのノードをプッシュします。ラウンドの終わり。dist(q,v)>rmaxq2P

それ以外の場合は、元の検索に似て進む:検索に対応するノード、可能な限り最高で、そしてそこから始まります。ここでも、代わりに前の手順に従って、テストのすべての子供たちに下降に等距離子を求めての、つまり、最適な距離がを超えるものをスキップします。このテストの後に子供が残っている場合は、子供に降りて繰り返します。子供が残っていない場合は、して繰り返します。テストがで実行された場合、ラウンドは終了します。qp0QjrmaxQj1Q0

現時点では、これがすべての可能なケースで最近傍を見つけることが保証されているかどうかも、元のアルゴリズムと同じように機能するかもわかりません。また、初期化で十分かどうか。そして、の優先順位は何ですか?それでも最良の距離は?rmaxP


編集(2013年4月)

このようなノードに降下しても現在のクエリ形状の範囲によってカバーされる領域が変化しないという特性に基づいて、ノードを等価にするのではなく、「等価」ノードの定義を使用する上記のアルゴリズムを明確化して、さらに実験を行いました。rmax

残念ながら、パフォーマンスがラウンドに低下する病理学的ケースを構築できます(下の画像を参照してください。クエリポイントは下中央です)。O(n)

ここに画像の説明を入力してください


0

定理13で主張されているラウンドの最大数を確認するために、最下位の兄弟の祖先がブルートフォースで検索される(O(1)バリアントを見つける前に)平衡化ベースのアルゴリズムを実装しました:。O(ϵ1d(logn+logϵ1))

以前の回答の「病理学的」例を使用しています。2次元の平方根の辺の長さは512で、中心座標は(256、256)です。座標は整数で与えられ、単純なます。ポイントは、ルート平方を横切って水平方向に等間隔で配置され、クエリポイントは(256、511)にあります(512は既にルート平方の外側にあることに注意してください)。ϵ=1v

以下の図では、完全なツリーが示され、この例のポイント数は16です。青い正方形の輪郭は、優先キューにプッシュされた対象の正方形を示し、中央の数字は、それらが押されます。発見された葉の点には、それらが説明された丸い番号も表示されます。3つの透明な青い円は、1回目、2回目、7回目のラウンド後の既知のNN半径を示します(最も近い隣人は最初に7回目のラウンドで見られます)。合計12ラウンドがあります(最後の6つだけがキューから正方形をポップしますが、新しい正方形は追加しません)。Q0

私はこの例を、一連のますます大きくなる平方根とポイントの数で実行しましたが、ポイントの間隔は同じままでした(32)。これにより、図からすでに直観的にわかるものが確認されました。アルゴリズムにはラウンドが必要ですが、および定理13 は、ラウンドのみが必要であると述べています。d=2ϵ=1OlognO(n)d=2ϵ=1O(logn)

したがって、重要なものが欠けていなければ、アルゴリズムは指定された速度を達成できません。コメントやアイデアはありますか?

トラバーサル

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.