ユークリッド距離による並べ替え


17

は平面上の点の集合です。ランダム点 X Sは、同一平面上に与えられます。タスクは、すべてのソートすることである Y Sとの間のユークリッド距離で X及び YSxSySxy

無脳のアプローチは、間の距離を計算することでYのすべてのためのy S、その後ソートそれらがどの高速アルゴリズムを使用します。xyyS

を保存または前処理して、ソート処理を高速化する方法はありますか?S


1
適切なサイズのグリッドを考慮し、対応する正方形ごとにポイントをグループ化します(たとえば、ハッシュテーブルを使用)。次に、特定の正方形のペアについて、ある正方形のすべての点が別の正方形のすべての点よりもから遠いことを推測できます。実際には助けになると思います。x
イリヤラス

あなたが述べた「脳のないアプローチ」は、O(n log n)時間で実行されます。ここで、nはSのポイント数であり、実際にはかなり速いと思います。log nファクターを排除したいですか、それとも外部ソートなど他のものが必要ですか?
伊藤剛

ポイントは、ポイントのセットを準備する時間は事実上無制限であることですが、それらをソートする時間は非常に限られています。そうは言っても、標準のソートの高速化は高く評価されます。たとえ同じO(n log n)であっても、最悪の場合(または最高の場合など)は高速です。
アレックスK。11年

たとえば、Sを2次元ツリーとして保存すると、O(log n)時間で最も近い隣人を見つけることができます。たぶん私の仕事のために同様の解決策があるでしょう。私は空間データ構造の専門家ではありません-そしてそれらの多くがあります-私はそれを簡単に見逃す可能性があります。
アレックスK。11年

回答:


13

解決策1:点のペア間の垂直二等分線を見つけ、これらの線の配置を作成します。配列にはΘ n 4セルがあり、そのセル内ではソートされた順序は一定です。そのため、配置のポイント位置データ構造を構築し、各セルを、そのセル内のポイントに対して返されるソート順で装飾します。隣接するセル間の並べ替え順序は単一の転置でのみ異なるため、永続的なデータ構造を使用して、これらの並べ替え順序の表現でスペースを共有できます。合計スペースはO n 4)で、クエリ時間はOですΘ(n2)Θ(n4)O(n4)O(logn)

解決策2:これらの同じ垂直二等分線ののランダムサンプルを選択し、配置を構築し、2つのサンプリングされた線の各交差を通る垂直線セグメントで各配置セルを分割します。結果のパーティションにはΘ n 2セルがあり、各セルにはO n 非サンプリング二等分線が交差する可能性が高くなります。セル内の一部のxから見たポイントの有効な並べ替え順序でパーティションの各セルを装飾します。合計スペースはO n 3です。Θ(n)Θ(n2)O(n)O(n3)

ここで、クエリを実行するには、パーティション内のクエリポイントを見つけ、パーティションセルに格納されている順序を検索し、この格納された順序で始まるLevcopoulos&Petersson(1989)のデカルトツリー比較ソートアルゴリズムを使用します。このステップの時間は、に比例します。ここで、k iは、点y iとの順序が乱れている点の数です。しかし、i O 1 + log k iiO(1+logki)kiyi O n (各サンプリングされていない二等分線は、最大で1つの順序の異なる点のペアを引き起こす)であるため、クエリ時間kiO(n)iO(1+logki)です。O(n)


1
PSは、ここでは単純なクエリアルゴリズムのために、より複雑な前処理アルゴリズムをオフに同じスペースと、クエリの時間が、取引を使用して溶液2の代わりの変種です:11011110.livejournal.com/233793.html
デイビット・エップスタイン

なぜ、前処理は、すべての並べ替えができn個のポイントを開始するO nは2対数N 時間と空間を使用してハッシュテーブルに結果を格納O N 2、一定のルックアップのために?n4nO(n2logn)O(n2)
デイブ

Θ n 2ではなく、異なるソート順序の開始点があるためです。Θ(n4)Θ(n2)
デビッドエップシュタイン

1

おそらく、時間をスライスする方法から逃れることはできないでしょう。すべての可能な並べ替え順序に対応する事前計算領域でさえ、O n 領域をもたらす可能性があります(したがって、意味のある検索手法で「your」領域を見つけるには、O log n = O n log n 時間。(編集:nlog(n)O(n!)O(log(n!))=O(nlog(n))これは絶対に間違っています。詳細については、David Eppsteinの優れた回答を参照してください!)一方、複雑さを軽減する1つの便利な方法-特に、一度にフルソートを行う必要はないが、kをランダムに取り出す必要がある場合k番目の最近傍その場で-高次ボロノイ図によるかもしれません:標準ボロノイセルの拡張そのk近傍検索、上収容最近傍が、第二最寄りなどのフランク・デヌの紙だけでなく、のhttp://people.scs .carleton.ca /〜dehne / publications / 2-02.pdfは標準的な参照のようです。http://www.dehne.carleton.ca/publicationsにある彼のホームページには、Voronoiダイアグラムに関する他の多くの論文があります。


3
Θ(n4)O(n!)Θ(n2)

@Davidこれを答えにするべきだと思います。
ジェームズキング

出向-n!私はそれを書いていたので間違っていると感じましたが、私は反対のケースを見ることができませんでした。それを修正するために、すぐに答えを修正しますが、私はもっと直接情報を得たものを見たいです。ありがとうございました!
スティーブンスタドニッキー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.