シーケンスに加えて、セットをハッシュすることもできます。つまり、順序のないオブジェクトのセットです。次の計算式に従って計算されます
。
hash(A) = \(\sum_{a \in A} p^{ord(a)}\) <- すべてを剰余として数えます
ord は、セットのオブジェクトに、考えられるすべてのオブジェクトの中の絶対的な序数を割り当てる関数です (たとえば、オブジェクトが自然数の場合は ord(x) = x、小文字のラテン文字の場合は ord(& #39;a' ;) = 1、ord('b') = 2 など)
つまり、オブジェクトごとに、このオブジェクトの数の基数乗に等しい値を関連付け、セット全体のハッシュを取得するためにこれらの値をすべて合計します。式から明らかなように、要素がセットに追加またはセットから削除された場合、ハッシュは簡単に再計算されます (必要な値を加算または減算するだけです)。同じロジックです。 単一の要素が追加または削除されるのではなく、他のセットが追加または削除される場合(ハッシュを加算または減算するだけです)。
すでに理解されているように、単一の要素はサイズ 1 のセットとみなされ、ハッシュを計算できます。そして、より大きなセットは単にそのような単一セットの結合であり、セットを結合することでハッシュを追加します。
実際、これは同じ多項式ハッシュですが、pm の係数の前に、次の値がありました。 n - m - 1 (n はシーケンスの長さ) のシーケンス要素の数です。これは、絶対序数が m に等しいセット内の要素の数です。
このようなハッシュでは、絶対順序数 m を持つ p 個のオブジェクトのセットが絶対順序数 m を持つ 1 つのオブジェクトのセットと同じハッシュを持つ状況を避けるために、十分に大きなベース (セットの最大サイズより大きい) を取るか、二重ハッシュを使用する必要があります。序数 m+1。