По сути, вы пытаетесь достичь с помощью хэш-функции, чтобы дать всем битам в хэш-коде примерно 50% шанс быть выключенным или включенным для конкретного элемента, который нужно хешировать. Таким образом, не имеет значения, сколько «сегментов» имеется в вашей хеш-таблице (или, другими словами, сколько младших битов вы берете для определения номера сегмента) - если каждые бит является настолько случайным, насколько это возможно, тогда элемент всегда будет назначен практически случайному сегменту.
Теперь в реальной жизни многие люди используют хеш-функции, которые не так хороши. Они имеют некоторую случайность в некоторых битах, но не во всех. Например, представьте, что у вас есть хеш-функция, у которой биты 6-7 смещены - скажем, в типичном хеш-коде объекта, у них есть 75% шанс быть установленным. В этом вымышленном примере, если наша хеш-таблица имеет 256 сегментов (т. Е. Номер сегмента берется из битов 0-7 хэш-кода), то мы отбрасываем случайность, которая существует в битах 8-31, и меньшую часть сегментов будет стремиться заполниться (т. е. те, чьи номера имеют биты 6 и 7).
Дополнительная хеш-функция в основном пытается распространить любую случайность, которая есть в хеш-кодах, на большее количество битов. Таким образом, в нашем гипотетическом примере идея будет состоять в том, что некоторая случайность из битов 8-31 будет смешана с младшими битами и уменьшит смещение битов 6-7. Это все еще не будет идеально, но лучше, чем раньше.