2012-03-26 3 views
1

Мне нужно создать идеальный хеш для списка строковых идентификаторов, поэтому прежде чем начать с этой реализации (я никогда не делал этого раньше), я хочу знать, есть ли хорошая структура или хороший учебник, который может быть полезен?Каков лучший способ реализовать идеальную хеш-функцию для приложения iOS?

Спасибо!

+1

попробуйте google it;) – Adrian

+1

'man gperf', а затем используйте его. – michex

ответ

1

Я использую MurmurHash написанного Остина Эпплби:

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, если вы распространяете свой код. Чтобы найти правильное авторское право, вы можете выполнить поиск Google на Murmur Hash. – Cthutu

Смежные вопросы