プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

多次元検索構造としてのBSPツリー


空間検索構造は、人の名前のリストなどの幾何学的データとは対照的に、シンボリックデータの大規模なセットを迅速に処理する問題を解決するために60年代と70年代にコンピュータサイエンスで発明されたものと同じアイデアに基づいています。最初に名前のリストをアルファベット順に並べ替え、並べ替えたリストを配列に格納することで、n / 2ではなく、バイナリ検索アルゴリズムを使用して、log2n操作で新しい名前がすでにリストにあるかどうかを計算できることが発明されました。順次検索の助けを借りて必要とされる予想される操作。これは、名前のリストに存在する構造(アルファベット順)を抽出し、後続の操作(名前の検索)でその構造を利用して計算を減らす良い例です。

ただし、ソートされたリストを維持しながら名前の追加と削除を許可したい場合は、動的なデータ構造、つまりポインタを実装するものが必要です。このようなデータ構造の最も一般的な例の1つは、二分探索木に他なりません。

二分探索木の場合、実数直線上にあるA ={1、2、5、6、7、9}などの整数のセットを表すために実装されています。数値/ポイントがすでにツリーにあるかどうかを計算するには、ポイントをツリーに挿入し、ポイントで構成されるネストされた間隔のシーケンスに対応するパスをたどることができます。バランスの取れたツリーの場合、このプロセスはO(log n)ステップしか消費しません。実際、バイナリ検索を実行しましたが、配列ではなくツリーを実装しています。これで、検索が進む順序を決定するため、ツリー自体が検索アルゴリズムの一部をエンコードできるようになりました。

これでパーティショニングツリーに戻ります。これらは、2分探索木の一般化として1を超える次元、つまり多次元(1Dでは本質的に同じ)に扱われます。実際、パーティショニングツリーの構築は、クイックソートの幾何学的バージョンとして想像することができます。

変更(削除と挿入)は、マージソートでソートされたリストをマージするのと同様に、ツリーをマージすることによって実現されます。

ただし、ポイントは1を超える次元のスペースを分割しないため、細分割するポイントではなく超平面を実装する必要があります。

超平面は、寸法に関係なく、常に領域を2つの半空間に分割または分割します。


  1. データ構造の範囲ツリー

    範囲ツリーは、ポイントのリストを保持するための順序付けられたツリーデータ構造として定義されます。これにより、特定の範囲内のすべてのポイントを効率的に取得でき、通常は2次元以上で実装されます。 O(log d のクエリ時間が速いことを除いて、kdツリーと同じです。 n + k)が、O(n log d-1 のストレージが悪い n)、dはスペースの次元を示し、nはツリー内のポイントの数を示し、kは特定のクエリで取得されたポイントの数を示します。範囲ツリーは、間隔ツリーで区別できます。ポイントを格納して特定の範囲内のポイントを効率的に取得できるようにする代わりに、間隔ツリーは間隔を保存し、特定のポ

  2. 多方向ツリー

    マルチウェイツリーは、3つ以上の子を持つことができるツリーとして定義されます。マルチウェイツリーが最大m個の子を持つことができる場合、このツリーは次数mのマルチウェイツリー(またはmウェイツリー)と呼ばれます。 調査された他のツリーと同様に、m-wayツリーのノードはm-1キーフィールドと子へのポインタで構成されます。 次数5の多元ツリー m-wayツリーの処理を容易にするために、ある種の制約または順序が各ノード内のキーに課され、順序mの多方向検索ツリー(またはm-way検索ツリー)が生成されます。定義上、m-way探索木は、次の条件を満たす必要があるm-wayツリーです- 各ノ