Особенностью HashMap является то, что в отличие, скажем, от сбалансированных деревьев, его поведение является вероятностным. В этих случаях обычно наиболее полезно говорить о сложности с точки зрения вероятности возникновения события в худшем случае. Для хэш-карты это, конечно, случай столкновения с точки зрения того, насколько полной является карта. Столкновение довольно легко оценить.
p столкновение = n / емкость
Таким образом, хэш-карта с даже небольшим количеством элементов, скорее всего, столкнется хотя бы с одним столкновением. Обозначение Big O позволяет нам делать что-то более убедительное. Заметим, что для любой произвольной фиксированной константы k.
O (n) = O (k * n)
Мы можем использовать эту функцию, чтобы улучшить производительность хэш-карты. Вместо этого мы могли бы думать о вероятности не более двух столкновений.
p столкновение x 2 = (n / емкость) 2
Это намного ниже. Поскольку стоимость обработки одного дополнительного столкновения не имеет отношения к производительности Big O, мы нашли способ повысить производительность без фактического изменения алгоритма! Мы можем обобщить это до
p столкновение x k = (n / емкость) k
И теперь мы можем игнорировать произвольное количество столкновений и в конечном итоге с исчезающе малой вероятностью возникновения большего числа столкновений, чем мы учитываем. Вы можете получить вероятность до сколь угодно крошечного уровня, выбрав правильное k, и все это без изменения фактической реализации алгоритма.
Мы говорим об этом, говоря, что хэш-карта имеет O (1) доступ с высокой вероятностью