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

データ構造におけるオーバーフロー処理


新しいペア(キー、要素)のホームバケットがいっぱいになると、オーバーフローが発生します。

オーバーフローに対処する可能性があります

ハッシュテーブルを体系的に検索して、いっぱいになっていないバケットを探します。

  • 線形プロービング(線形オープンアドレス法)。
  • 二次プロービング。
  • ランダムプロービング。

各バケットがホームバケットであるすべてのペアのリストを保持できるようにすることで、オーバーフローを排除します。

  • 配列線形リスト。
  • チェーン。

オープンアドレス法は、すべての要素がハッシュテーブルに直接格納されるようにするために実行されるため、さまざまなメソッドを実装して衝突を解決しようとします。

線形プロービングは、データをテーブルの次の空きスロットに配置することによって衝突を解決するために実行されます。

線形プロービングのパフォーマンス

  • 最悪の場合の検索/挿入/消去時間はθ(m)です。ここで、mはテーブル内のペアの数として扱われます。
  • これは、すべてのペアが同じクラスターにある場合に発生します。

線形プロービングの問題

  • 識別子は一緒にクラスター化する傾向があります
  • 隣接するクラスターは合体する傾向があります
  • 検索時間を延長または強化

二次プロービング

線形プロービングはバケットを検索します(H(x)+ i2)%b; H(x)はxのハッシュ関数を示します

二次プロービングは、増分としてiの二次関数を実装します

バケットH(x)、(H(x)+ i2)%b、(H(x)-i2)%bを調べ、1 <=i <=(b-1)/ 2

bは4j+3の形式の素数として示され、jは整数です

ランダムプロービング

ランダムプロービングは、乱数を組み込んで実行します。

H(x):= (H’(x) + S[i]) % b
S[i] is a table along with size b-1
S[i] is indicated as a random permutation of integers [1, b-1].

  1. データ構造のB+ツリー

    ここでは、B+ツリーとは何かを確認します。 B +ツリーは、Bツリーの拡張バージョンです。このツリーは、Bツリーのより良い挿入、削除、および検索をサポートします。 Bツリー、キー、およびレコード値は、内部ノードとリーフノードに格納されます。 B +ツリーレコードでは、リーフノードに保存できます。内部ノードはキー値のみを保存します。 B+ツリーのリーフノードもリンクリストのようにリンクされています B+ツリーの例 − これは、検索、挿入、削除などの基本的な操作をサポートします。各ノードで、アイテムが並べ替えられます。位置iの要素には、その前後に子があります。したがって、以前に痛んだ

  2. ハーフエッジデータ構造

    はじめに テンプレートパラメータまたはハーフエッジデータ構造(HalfedgeDSと略記)のHDSは、平面マップ、多面体、またはその他の方向付け可能な2次元など、頂点、エッジ、および面の入射情報を維持できるエッジ中心のデータ構造として定義されます。ランダムな次元に埋め込まれたサーフェス。各エッジは、反対方向の2つのハーフエッジに分割されます。各ハーフエッジには、1つの入射面と1つの入射頂点が格納されます。各面と各頂点に1つの入射ハーフエッジが格納されます。ハーフエッジデータ構造のバリエーションを減らすと、面のハーフエッジポインタや面の保存など、この情報の一部を削除できます。 ハーフエッジデ