-
データ構造の深化
Deapは、ルートノードに要素またはキー値を持たないデータ構造として定義されます。これは、次のルールを実装することによって形成されます- ルートノードが空であることを示す要素がルートノードにありません。 deapの左側のサブツリーは、最小ヒープを示します。 deapの右側のサブツリーは、最大ヒープを示します。 したがって、次のステートメントの正しさは、深層構造によって数学的に提供できます- 特定のノードの左側のサブツリーと右側のサブツリーが空ではなく、対応するノードをそれぞれ「a」と「b」で表すことができる場合、- a.KeyValue <=b.KeyValue
-
最小-最大ヒープ
min-maxヒープは、最小(または偶数)レベルと最大(または奇数)レベルが交互に含まれる完全なバイナリツリーとして定義されます。偶数レベルは、たとえば0、2、4などとして示され、奇数レベルは1、3、5などとして示されます。 次のポイントでは、ルート要素が最初のレベル、つまり0にあると見なします。 最小-最大ヒープの例 最小-最大ヒープの機能 最小最大ヒープ内の各ノードは、最小最大ヒープ内のノードの順序を計算するために値が実装されているデータメンバー(通常はキーと呼ばれます)に関連付けられています。 ルート要素は、最小-最大ヒープの最小要素です。 2番目のレベルの2つの要素の1つ
-
Deapsへの要素の挿入
deapデータ構造に要素を挿入するには、以下に示すように最小値と最大値を計算する手順が必要になる場合があります- プロシージャmin_value(m)://deapの最小値を計算します。 m-2 logを返します 2 ((m-1); プロシージャmax_value(m)://deapの最大値を計算します。 m + 2 logを返します 2 (m-1); deapデータ構造への挿入操作は、次の方法で実行できます- ヒープb[]については、mが最大ヒープ内の位置であるかどうかを確認する必要があります。 次に、最小値と最大値をdeapで計算します。 これで、左側のサブツリーと
-
Deapsから最小要素を削除する
次に、deapデータ構造のmin要素を削除する手法について説明します。削除中に、deapsから最小値を削除する主なターゲット。ツリーの高さは常にlognであるため、lognのオーダーの時間がかかります。削除操作については、次のように説明できます- Procedure deap_deletion(b[],m): if(m<2) return; //There are no elements. min=b[2]; //Minimum value is saved for (i=2;2*i<=m;b[i]=b[k],i=k){ k=i*
-
DEPQのジェネリックメソッド
デュアルヒープ remove(aNode)操作の効率的な実装も提供するシングルエンド優先キュー(PQ)データ構造から効率的なDEPQ(ダブルエンド優先キュー)データ構造に到達するための一般的な方法の存在(この操作はノードaNodeをPQ)。これらの方法の中で最も単純な二重構造法は、同じ要素を構成する最小PQと最大PQのノード間の対応ポインターに関連付けられたすべてのDEPQ要素の最小PQと最大PQの両方を追跡します。 図Aは、要素7、8、3、6、5のデュアルヒープ構造を示しています。対応ポインターは赤い矢印で表示されます。 図A:デュアルヒープ この図は、最小ヒープと最大ヒープの
-
デュアルプライオリティキュー
remove(bNode)操作の効率的な実装も提供するシングルエンド優先キュー(PQ)データ構造から効率的なDEPQ(Double Ended Priority Queue)データ構造に到達するための一般的な方法の存在(この操作はノードbNodeをPQ)。これらの最も単純な方法である二重構造法は、同じ要素を構成する最小PQと最大PQのノード間の対応ポインターに関連付けられたすべてのDEPQ要素の最小PQと最大PQの両方を維持します。 図Dは、要素7、8、3、6、5のデュアルヒープ構造を示しています。対応ポインターは赤い矢印で表示されます。 図D:デュアルヒープ この図は、最小ヒープ
-
通信ベースのデータ構造
トータルとリーフの対応は、より洗練された対応手法です。これらの手法の両方で、要素の半分は最小PQに配置され、残りの半分は最大PQに配置されます。要素数が奇数の場合、1つの要素がバッファに格納されます。このバッファリングされた要素は、どちらのPQのメンバーでもありません。トータルコレスポンデンス手法では、最小PQの各要素xは、最大PQの個別の要素yとペアになります。 (x、y)は、priority(x)<=priority(y)。のような対応する要素のペアです。 図Eは、11個の要素3、4、5、5、6、6、7、8、9、10、11の合計対応ヒープを示しています。要素10はバッファー内にあります。
-
溶融可能なDEPQ
メルダブルDEPQ(MDEPQ)は、上記のDEPQ操作に加えて、操作meld(p、q)...を含むDEPQ(Double Ended Priority Queue)として定義されます。単一のDEPQ。ダブルエンド優先キューpとqをマージした結果は、pとqのすべての要素を含む単一のダブルエンド優先キューになります。メルド操作は、メルドに続いて、pとqが独立したDEPQとして残っていないという点で破壊的です。 2つのDEPQを線形時間未満でマージするには、DEPQを、(ヒープの配列表現のような暗黙的なポインターではなく)明示的なポインターを実装して表現する必要があります。最初の場所から最後の場所
-
静的パーフェクトハッシュ
完全なハッシュの定義 完全なハッシュは、n個の要素の任意のセットを同じサイズのハッシュテーブルに格納でき、一定時間でルックアップを実行できるハッシュのモデルとして定義されます。これは、Fredman、Komlos、およびSzemeredi(1984)によって特別に発明され、議論されたため、「FKSハッシュ」と呼ばれています。 静的ハッシュの定義 静的ハッシュは、ユーザーが最終的な辞書セットでルックアップを実行できるようにする別の形式のハッシュ問題を定義します(つまり、辞書内のすべてのオブジェクトが最終的であり、変更されないことを意味します)。 アプリケーション 静的ハッシュではデータベー
-
ダイナミックパーフェクトハッシュ
定義 動的完全ハッシュは、ハッシュテーブルデータ構造の衝突を解決するためのプログラミング方法として定義されています。 アプリケーション この方法は、対応するハッシュテーブルよりもメモリを大量に消費しますが、大量の要素セットに対して高速なクエリ、挿入、および削除を実行する必要がある状況に最適です。 実装 ディーツフェルビンガー他動的ディクショナリアルゴリズムを説明します。m個のアイテムのセットがディクショナリに段階的に追加されると、メンバーシップクエリは常に一定の時間を消費するため、最悪の場合はO(1)であり、必要なストレージの合計はO(m)(線形)です。 O(1)予想される償却挿入および
-
多肢選択式ハッシュ
複数選択ハッシュは、複数のハッシュ関数の実装を採用しているため、名前が付けられています。 大まかに言えば、複数のハッシュ関数がある場合、各アイテムは複数のバケットにマップされるため、Algorithmdesignerはそれらのアイテムのどれにアイテムを配置するかを自由に選択できます。 この自由により、単一のハッシュ関数を実装するよりもはるかにバランスの取れた割り当てを取得するアルゴリズムが可能になります。 これらのアルゴリズムが生成する割り当ての限界を証明するために実装されている、主要なアルゴリズムのアイデアと主要な数学ツールを紹介します。 分析は、基本モデルの変動に耐えるのに十分強力であるこ
-
ブルームフィルター
ブルームフィルターは、セット内の要素の存在を迅速かつメモリ効率の高い方法で識別するように設計されたデータ構造として定義されます。 確率的データ構造という名前の特定のデータ構造 ブルームフィルターとして実装されています。このデータ構造は、要素がセットに存在するか存在しないかを識別するのに役立ちます。 ビットベクトルは基本データ構造として実装されます。 これが説明に使用する小さなものです 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 そのテーブルの各空のセルは、ビットとその下の番号をそのインデ
-
パフォーマンスメトリクス
ブルームフィルターには、計算時間または実行時間(ハッシュ関数の数kに対応)、フィルターのサイズ(ビット数mに対応)、エラーの確率(に対応)の3つのパフォーマンスメトリックがあります。偽陽性率 f =(1 − p)k) ブルームフィルター(BF)は、ルックアップパフォーマンスとスペース効率を向上させるためのエラートレランスを導入します。ブルームフィルターはtrueまたはfalseを返します。したがって、ブルームフィルターの結果は、真陽性、偽陽性、真陰性、および偽陰性のいずれかのクラスに分類されます。ブルームフィルターに含まれる誤検知の最大数。誤検知と誤検知は、システムにオーバーヘッドを引き起
-
ブルームフィルターを数える
基本概念 カウントブルームフィルターは、要素のシーケンスが指定されたときに、指定された要素のカウント数が指定されたしきい値よりも小さいかどうかをテストするために実装されるブルームフィルターの一般化されたデータ構造として定義されます。ブルームフィルターの一般化された形式として、誤検知の一致の可能性はありますが、誤検知の可能性はありません。つまり、クエリは「おそらくしきい値以上」または「間違いなくしきい値未満」のいずれかを返します。 アルゴリズムの説明 ブルームフィルターのカウントで使用されるパラメーターのほとんどは、n、kなどのブルームフィルターと同じように定義されます。 mは、カウントブル
-
カウンターサイズとカウンターオーバーフロー
カウンターサイズ オーバーフローを回避するのに十分な大きさのカウンターを選択する必要があります。 サイズは、ポアソン近似によって提案された4ビット/カウンターです。 k =(ln 2)m/nカウンターを実装する平均負荷はln2です。 カウンターの負荷が最小16:≈e -ln2である確率 (ln 2) 16 / 16!≈6.78E-17 比較のために4ビット/カウンターを検討します。 カウンターオーバーフロー カウンターがオーバーフローすると、最大値に達する可能性があります。 この状況は、カウンターがゼロ以外のままであるはずのときに、最終的にカウンターが0に下がった場合にのみ、後でフォ
-
ブロックされたブルームフィルター
最初にメモリブロックを選択します。 次に、各ブロック内のローカルブルームフィルターを選択します。 メモリブロック間の不均衡を引き起こす可能性があります このフィルターは効率的ですが、偽陽性率(FPR)が低くなります。 最初に、ブロックされたブルームフィルターは、同じサイズの標準のブルームフィルターと同じFPR(偽陽性率)を持つ必要があります。 ブロックブルームフィルターは、標準のブルームフィルター(ブルームフィルターブロック)よりも比較的少ないブロックbのシーケンスで構成され、各ブロックは1つのキャッシュラインに収まります。 ブロックブルームフィルタースキームは、各ビットが異なるブロックに挿入
-
リバランスアルゴリズム
リバランスアルゴリズムは、次の方法で実行できます- Day-Stout-Warrenアルゴリズム Day-Stout-Warrenアルゴリズムを使用して、実際にリバランス方法を実装できます。ノード数は線形です。 以下は、擬似コードでの基本的なDSWアルゴリズムのプレゼンテーションです。 「疑似ルート」と呼ばれるノードが割り当てられ、ツリーの実際のルートが疑似ルートの正しい子になります。 引数として疑似ルートを使用してツリーをソートされたリンクリストに変換するために、tree-to-vine関数を呼び出します。 vine-to-tree関数を呼び出して、ソートされたリンクリストをツリーに
-
多次元二分探索木
基本概念 多次元二分探索木(略してk-d木)は、マルチキーレコードを格納するためのデータ構造として定義されます。この構造は、統計およびデータ分析における多くの「幾何学的」問題を解決するために実装されました。 k-dツリー(k次元ツリーの略)は、k次元空間内のポイントを編成するための空間分割データ構造として定義されます。データ構造のk-dツリーは、多次元検索キーを含む検索(範囲検索や最近傍検索など)など、いくつかのアプリケーションに実装されます。 k-d木は、バイナリ空間分割ツリーの特殊なケースとして扱われます。 非公式の説明 k-dツリーは、すべてのリーフノードがk次元の点として扱われる
-
多方向ツリー
マルチウェイツリーは、3つ以上の子を持つことができるツリーとして定義されます。マルチウェイツリーが最大m個の子を持つことができる場合、このツリーは次数mのマルチウェイツリー(またはmウェイツリー)と呼ばれます。 調査された他のツリーと同様に、m-wayツリーのノードはm-1キーフィールドと子へのポインタで構成されます。 次数5の多元ツリー m-wayツリーの処理を容易にするために、ある種の制約または順序が各ノード内のキーに課され、順序mの多方向検索ツリー(またはm-way検索ツリー)が生成されます。定義上、m-way探索木は、次の条件を満たす必要があるm-wayツリーです- 各ノ
-
データ構造での指検索
データ構造のフィンガー検索は、構造がサポートする検索操作の拡張として定義され、データ構造内の要素への参照(フィンガー)がクエリとともに指定されます。要素の検索時間は、データ構造内の要素数の関数として最も頻繁に示されますが、指の検索時間は、要素と指の間の距離の関数として扱われます。 √nの場合、フィンガーサーチは遅くなります。したがって、指の検索は、ターゲットが実際に指に近いと合理的に予想できる場合にのみ実装する必要があります。 実装 一部の一般的なデータ構造は、実際の構造に追加の変更を加えることなく、フィンガー検索をサポートしています。要素aの検索が、aを見つけることができる間隔を絞り込むこ