Как лучше реализовать идеальную хэш-функцию для приложения для iOS? - PullRequest
1 голос
/ 26 марта 2012

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

Спасибо!

1 Ответ

1 голос
/ 26 марта 2012

Я использую 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;
}

Но в конечном итоге ваш выбор функции хеширования зависит от компромисса между качеством и скоростью.

...