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