Похоже, что хэш-таблицы могут достигать O (1), но это никогда не имело для меня смысла. Может кто-нибудь объяснить это? Вот две ситуации, которые приходят на ум:
а. Значение int меньше размера хэш-таблицы. Поэтому значение представляет собой собственный хеш, поэтому нет хеш-таблицы. Но если бы это было, это было бы O (1) и все еще было бы неэффективным.
В. Вы должны вычислить хэш значения. В этой ситуации порядок O (n) для размера просматриваемых данных. Поиск может быть O (1) после того, как вы выполняете O (n), но это все еще выходит на O (n) в моих глазах.
И если у вас нет идеального хэша или большой хеш-таблицы, возможно, есть несколько элементов на ведро. Таким образом, в какой-то момент он переходит в небольшой линейный поиск.
Я считаю, что хеш-таблицы потрясающие, но я не получаю обозначение O (1), если только он не должен быть теоретическим.
Wikipedia статья для хэш-таблиц постоянно ссылается на постоянное время поиска и полностью игнорирует стоимость хэш-функции. Это действительно справедливая мера?
Изменить: Подводя итог тому, что я узнал:
-
Это технически верно, потому что хеш-функция не требуется использовать всю информацию в ключе и поэтому может быть постоянным временем, а потому, что достаточно большая таблица может привести к столкновениям до почти постоянного времени.
-
Это верно на практике, потому что со временем он просто работает, пока хеш-функция и размер таблицы выбраны для минимизации конфликтов, хотя это часто означает отсутствие использования хэш-функции с постоянным временем.