В lamens условиях с некоторой стороны машет:
На одном полюсе, вы можете иметь хэш-карту, которая идеально распределенный с одним значением в ведре. В этом случае ваш поиск возвращает значение напрямую, а стоимость - 1 операция - или порядка одного, если хотите: O (1).
В реальном мире реализация часто предусматривает, что это происходит, расширяя размер таблицы и т. Д., Чтобы соответствовать требованиям данных. Когда у вас больше предметов, чем ведер, вы начинаете увеличивать сложность.
В худшем случае у вас есть одно ведро и n предметов в одном ковше. В этом случае это в основном похоже на поиск списка, линейно. И поэтому, если значение окажется последним, вам нужно выполнить n сравнений, чтобы найти его. Или, по порядку n: O (n).
Последний случай практически всегда/возможен/для заданного набора данных. Вот почему было так много исследований и усилий, которые придумали хорошие алгоритмы хэширования. Таким образом, теоретически возможно спроектировать набор данных, который вызовет столкновения. Таким образом, есть какой-то способ достичь производительности O (n), если только реализация не изменит другие аспекты; размер таблицы, реализация хэш, и т.д., и т.д.
Вкратце, это связано с тем, что вы всегда увеличиваете количество ведер в зависимости от объема данных, которые были помещены в него. См. Это: http://stackoverflow.com/questions/9214353/hash-table-runtime-complexity-insert-search-and-delete – justhalf