ユニバーサルハッシュには「優れたハッシュ関数」などはありません(「はい、「ユニバーサルハッシュ」などがあることは知っていますが、それは私が意図したものではありません)。コンテキストに応じて、異なる基準がハッシュの品質を決定します。すでに2人がSHAについて言及しています。これは暗号化ハッシュであり、おそらくあなたが意味するハッシュテーブルにはまったく適していません。
ハッシュテーブルには、非常に異なる要件があります。しかし、それでも、データ型が異なるとハッシュ可能な情報が異なるため、優れたハッシュ関数を普遍的に見つけることは困難です。経験則として、型が等しく保持するすべての情報を考慮することは良いことです。これは常に簡単であるとは限りません。統計(および衝突)の理由から、問題の空間、つまりすべての可能なオブジェクトにわたって適切な広がりを生成することも重要です。つまり、100から1050までの数値をハッシュする場合、オブジェクトの90%以下ではこの数字が0になるため、最上位の数字がハッシュで大きな役割を果たすことは良くありません。最後の3つの数字を数字はハッシュを決定します。
同様に、文字列をハッシュするときは、すべての文字を考慮することが重要です。ただし、すべての文字列の最初の3文字が同じであることが事前にわかっている場合は除きます。これらを考えると無駄です。
これは、実際には、Art of Computer Programming、vol。3.別の読み物として、Julienne WalkerのThe Art of Hashingがあります。