Я не уверен, что должен делать этот префикс хэш-метод? - PullRequest
2 голосов
/ 06 декабря 2011

Для чего используются префиксные хеш-функции?Я создал цепочки, квадратичные и линейные хеш-таблицы.Мне дали простые, префиксные и полноразмерные методы хеширования, которые я не уверен, для чего они используются ??

Вот код:

int HashTable_qp::preHash(string & key, int tableSize )
{
    string pad = "AA";
    //some words in the input are less than 3 letters
    //I choose to pad the string with A because all padded characters 
    //have same ascii val, which is low, and will hopefully alter the results less
    if (key.length() < 3)
    {
        key.append(pad);
    }
    return ( key[0] + 27 * key[1] + 729 * key[2] ) % tableSize;
}

Обнаружение столкновения:

while(i != DataArray.size())
{
    tStart = clock();

    if(QuadraticProbingHT.preHash(DataArray[i],101) == QuadraticProbingHT.preHash(DataArray[i],101) )
    {
        collision_count++;
    }
    tStop = clock();
    total_c += tStop - tStart;
    i++;
}

1 Ответ

3 голосов
/ 06 декабря 2011

Хеш-код префикса хеширует строку по его первым нескольким символам (префикс).

Обратите внимание, что в реализации, которую вы даете, она хэширует строку, используя первые три символа (если она существует; она дополняется AA, если необходимо). Таким образом, ass и associate имеют одно и то же значение хеша под этим конкретным префиксным хешем.

Хэш полной длины использует каждый символ в строке для определения значения хеша.

...