目的: 2 つの整数キー (unsigned int キャストを使用して整数に変換されたポインター、はい、これは機能します) を取り、それを単一の値にマップするハッシュ マップを作成します。
試みられた解決策:だから私はすでに単一のキーを取り、それを値にうまくマップするハッシュマップを持っています。「ペアリング機能」を使用して2つのキーを取るように拡張しました。そこで、2 つのキーを取得し、Cantor ペアリング関数を使用してそれらをペアにし、この結合されたキーをハッシュします。
ボトルネック:したがって、2 つのキーの問題は、cantor ペアリング関数が整数オーバーフローを引き起こす乗算を実行するため、数学的に想定されているように、一意の出力が得られないことです。
質問:
- 多くのハッシュ関数が乗算を行うことがわかります。整数オーバーフローはハッシュの通常のことですか、それともこれは悪いことですか?
- また、あるキーを別のキーに追加して、新しい 64 ビット整数にすることも考えています。aaaaaaaabbbbbbbbb のようにして、それをハッシュ マップに渡します。しかし、これにより、浮動小数点表現が原因で NaN などの異常な数値が発生する可能性があり、これが悪い可能性があるのではないかと心配しています。
- より良いアイデアは大歓迎です。
不明な部分があれば教えてください。