2012-03-26 13 views
1

文字列識別子のリストのために完全なハッシュを作成する必要があるので、この実装を開始する前に(これまでにこれまでやったことがない)有用なフレームワークやチュートリアルがあるかどうかを知りたいですか?iOSアプリケーション用の完全なハッシュ関数を実装するより良い方法は何ですか?

ありがとうございます!

私はオースティン・アップルビーによって書かれMurmurHash使用
+1

google it;) – Adrian

+1

'man gperf'、それを使ってください。 – michex

答えて

1

unsigned int Hash (const char* buffer, size_t size, unsigned seed) 
{ 
    const unsigned int m = 0x5bd1e995; 
    const int r = 2; 
    unsigned int h = seed^(unsigned int)size; 
    const unsigned char* data = (const unsigned char*)buffer; 

    while(size >= 4) 
    { 
     unsigned int k; 

     k = data[0]; 
     k |= data[1] << 8; 
     k |= data[2] << 16; 
     k |= data[3] << 24; 

     k *= m; 
     k ^= k >> r; 
     k *= m; 

     h *= m; 
     h ^= k; 

     data += 4; 
     size -= 4; 
    } 

    switch(size) 
    { 
    case 3:   h ^= data[2] << 16; 
    case 2:   h ^= data[1] << 8; 
    case 1:   h ^= data[0]; 
     h *= m; 
    } 

    h ^= h >> 13; 
    h *= m; 
    h ^= h >> 15; 

    return h; 
} 

をしかし、最終的にはハッシュ関数の選択は、品質と速度のトレードオフに依存します。

+0

ありがとうございます、うまくいきます! – LuisEspinoza

+0

コードを配布する場合は、上記のコードをAustin Applebyに著作権を持つように注意してください。正しい著作権を見つけるには、Murmur Hashでgoogle検索を行うことができます。 – Cthutu

関連する問題