Особенность HashMap заключается в том, что в отличие от, скажем, сбалансированных деревьев, его поведение является вероятностным. В этих случаях обычно наиболее полезно говорить о сложности с точки зрения вероятности возникновения события наихудшего случая. Для хэш-карты это, конечно же, случай столкновения относительно того, насколько полно картинка. Столкновение довольно легко оценить.
р столкновений = п/емкость
Так хэш-карта с даже небольшим числом элементов довольно вероятно, испытают по крайней мере одно столкновение. Обозначение Big O позволяет нам делать что-то более убедительное. Заметим, что для любой произвольной фиксированной константы k.
О (п) = О (к * п)
Мы можем использовать эту функцию, чтобы улучшить производительность хэш-карте. Мы могли бы вместо этого думать о вероятности не более двух столкновений.
р столкновения х 2 = (п/емкость)
Это намного ниже. Поскольку стоимость обработки одного дополнительного столкновения не имеет отношения к производительности Big O, мы нашли способ повысить производительность без фактического изменения алгоритма! Мы можем generalzie это
р столкновений ок = (п/емкость) K
И теперь мы можем игнорировать некоторое произвольное число столкновений и в конечном итоге с исчезающе крошечной вероятностью более столкновений, чем мы учитываем. Вы можете получить вероятность на произвольно крошечный уровень, выбрав правильный k, без изменения фактической реализации алгоритма.
Мы говорим об этом, говоря, что хэш-карта имеет O (1) доступ с высокой вероятностью
Обозначение Big O дает верхнюю границу для конкретного типа анализа, который вы делаете. Вы все равно должны указать, интересуетесь ли вы наихудшим случаем, средним случаем и т. Д. –
Я знаю, что это может быть не ответ, но я помню, что у Википедии есть [очень хорошая статья] (http://en.wikipedia.org/wiki/Hash_table) об этом. Не пропустите [анализ производительности] (http://en.wikipedia.org/wiki/Hash_table#Performance_analysis) раздел –