Люди говорят, что он амортизирует O (1), чтобы положить в хеш-таблицу. Следовательно, положить n элементов должно быть O (n). Однако это не верно для больших n, поскольку, как сказал ответчик: «Все, что вам нужно для удовлетворения ожидаемого амортизированного O (1), - это расширение таблицы и перепрофилирование всего с помощью новой случайной хэш-функции в любое время столкновения».Время выполнения для вставки n элементов в пустую хеш-таблицу
Итак: каково среднее время выполнения вставки n элементов в хеш-таблицу? Я понимаю, что это, вероятно, зависит от реализации, поэтому укажите, о какой типе реализации вы говорите.
Например, если есть (журнал N) равномерно распределенных столкновений, и каждое столкновение происходит O (к), чтобы решить, где к текущий размер хеш-таблицы, то вы бы это рекуррентное соотношение:
T(n) = T(n/2) + n/2 + n/2
(то есть вы тратите время на вставку n/2 элементов, тогда у вас есть столкновение, принимающее n/2 для разрешения, тогда вы делаете оставшиеся n/2 вставки без столкновения). Это все еще заканчивается O (n), поэтому yay. Но разве это разумно?
Обратите внимание, что во многих реализациях вы можете указать ожидаемый размер полной хэш-карты. Поэтому, если n известно до того, как вы начнете заполнять карту, ожидаемое время выполнения все равно O (1). – gnud
@gnud, это был мой точный момент; переименование необходимо только в том случае, если вы ошиблись в исходном размере (или получите следующий размер неправильно и вам нужно снова перефразировать и т. д.). –
Да, я знаю - вы писали об оценке размера во второй раз. Я думал, что должен упомянуть, что часто можно указать размер в первый раз =) – gnud