Особливістю HashMap є те, що на відміну, скажімо, з збалансованих дерев, її поведінка є ймовірною. У цих випадках зазвичай найбільш корисно говорити про складність з точки зору ймовірності настання гіршої події. Що стосується хеш-карти, це, звичайно, є випадком зіткнення щодо того, наскільки повною є карта. Зіткнення оцінити досить просто.
p зіткнення = n / потужність
Тож хеш-карта з навіть скромною кількістю елементів, швидше за все, випробує хоча б одне зіткнення. Велика нотація O дозволяє нам зробити щось більш переконливе. Зауважте, що для будь-якої довільної, фіксованої постійної k.
O (n) = O (k * n)
Ми можемо використовувати цю функцію для покращення продуктивності хеш-карти. Натомість ми могли б подумати про ймовірність максимум 2 зіткнень.
p зіткнення x 2 = (n / потужність) 2
Це набагато нижче. Оскільки вартість обробки одного додаткового зіткнення не має значення для продуктивності Big O, ми знайшли спосіб поліпшити продуктивність, не змінюючи алгоритм! Ми можемо зробити це загальним
p зіткнення xk = (n / потужність) k
І тепер ми можемо знехтувати деякою кількістю довільної кількості зіткнень і закінчитися суттєво крихітною ймовірністю виникнення більшої кількості зіткнень, ніж нам належить. Ви можете отримати ймовірність до довільно крихітного рівня, вибравши правильний k, і все це не змінюючи фактичну реалізацію алгоритму.
Ми говоримо про це, кажучи, що хеш-карта має доступ до O (1) з високою ймовірністю