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

データ構造におけるユニバーサルハッシュ


任意のハッシュ関数の場合、テーブルサイズmがユニバースサイズuよりもはるかに小さい場合、任意のハッシュ関数hの場合、同じUの大きなサブセットがいくつかあると言えます。ハッシュ値。

この問題を取り除くには、ハッシュ関数のセットが必要です。そこから、Sに適したものを選択できます。ほとんどのハッシュ関数がSに適している場合は、ランダムハッシュ関数を選択できます

ℌがハッシュ関数のセットであると仮定します。各x、y∈Uについて、h(x)=h(y)が最大で|ℌ| /𝑚となるようなh∈ℌの数である場合、ℌは普遍的であると言えます。言い換えれば、ℌからランダムに選択されたハッシュ関数hを使用すると、異なるキーxとyの間の衝突の可能性は、1/mの可能性にすぎないと言えます。 h(x)=h(y)の場合の衝突の割合は、集合{0、1 、.からランダムかつ独立して選択されました。 。 。、m –1}。

ハッシュ関数hを使用してSをハッシュテーブルに格納する場合、検索と削除の予想時間はO(1 +α)です。


  1. データ構造の連鎖によるハッシュ

    このセクションでは、連鎖によるハッシュとは何かを説明します。連鎖は、衝突解決手法の1つです。衝突を回避することはできませんが、衝突を減らし、同じハッシュ値に対して複数の要素を格納することを試みることはできます。 この手法では、0から6の範囲のハッシュ関数h(x)を想定しています。したがって、7つを超える要素の場合、同じ部屋内に配置されるいくつかの要素が必要です。そのために、それに応じてそれらを保存するためのリストを作成します。毎回、リストの先頭に追加して、O(1)時間で挿入を実行します より良いアイデアを得るために、次の例を見てみましょう。 {15、47、23、34、85、97、65、89

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

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