Как сохранить небольшой коэффициент загрузки в моей хеш-таблице?

Я изучаю хеш-таблицы и, в частности, квадратичное зондирование. Я читал, что если коэффициент загрузки ‹= 0,5, а размер таблицы простой, квадратичное зондирование всегда будет находить пустой слот, и к ключу не будет обращаться несколько раз. Далее говорится, что для обеспечения эффективной вставки я всегда должен поддерживать коэффициент загрузки ‹ = 0,5. Что это значит? Конечно, если мы будем продолжать добавлять элементы, коэффициент загрузки будет увеличиваться до тех пор, пока не станет равным 1, хотим мы этого или нет. Так что же подразумевается, когда мой учебник говорит, что я должен поддерживать небольшой коэффициент нагрузки?


person aidandeno    schedule 31.05.2015    source источник


Ответы (1)


Подразумевается, что в какой-то момент (когда в этом случае вы превысите коэффициент загрузки 0,5) вам придется выделить новую таблицу (которая больше в какой-то раз, может быть, в 1,5 или 2, а затем округлить до ближайшее простое число) и скопируйте в нее все элементы из старой таблицы (это не прямая копия, новая позиция элемента обычно будет отличаться от старой позиции).

person harold    schedule 31.05.2015
comment
Эффективно ли это делать? Не лучше ли было бы в самом начале просто иметь большой стол? И есть ли какой-либо жаргон, связанный с этим значением? - person aidandeno; 31.05.2015
comment
@aidandeno неэффективно, когда он должен расти, но амортизированная стоимость добавления элемента по-прежнему составляет O (1) (по той же причине, что и со списками массивов). Если вы начнете с очень большой таблицы, рост будет меньше, но что, если вы все равно достигнете ее предела? И, конечно, это потенциально тратит впустую много места. Это действие по созданию новой таблицы большего размера называется перефразированием. - person harold; 31.05.2015
comment
@aidandeno Также, возможно, стоит отметить, что, хотя гигантская разреженная таблица, которая более чем вмещает все заранее, кажется меньшей работой по обработке, она может быть еще медленнее просто из-за меньшей пространственной локальности. Пространство и время не обязательно являются взаимоисключающими понятиями. - person ; 31.05.2015