2016-07-29 5 views
0

機能文字列(クエリやタイトルなど)でハッシュ関数を使用して、疎機能IDを生成します。このハッシュ関数は効率的で、uint64またはuint32上で良好な分布を持つ必要があります。誰かが私にいくつかの推奨事項を与えることができます 私はjavaで2つのメソッドをテストしました。 最初はjavaのhashCodeです。私はそれが同じようなgeohashの文字列に多くの衝突を持っていることがわかった。 2番目が吹く。それはhashCodeより多くの衝突を持っています。疎機械学習でuint64またはuint32機能IDを生成するための良好なハッシュ関数

public static long gene(String s) { 
     long hash = 5381; 
     int c; 
     for (int i = 0; i < s.length(); i++) { 
      c = s.charAt(i); 
      hash = ((hash << 5) + hash) + c; 
     } 
     return hash; 
    } 

(JavaのlongおよびC++ UINTの違いを無視してください。すべての罰金)

+0

ジオハッシュが減少アルファベットを使用してみてください。一般的なハッシュ関数は非常にしばしば文字の使用の均等分布を仮定します。そのため多くの衝突が予想される。私はgeohash文字列をハッシュする前にバイナリ文字列に変換します。 – Oncaphillis

答えて

3

あなたはMurmurhashcityhash

+0

このライブラリはこれらのハッシュをサポートしています。さらに、いくつかのhttps://github.com/OpenHFT/Zero-Allocation-Hashing –

+0

をサポートしています。ありがとう。 – formath