Как пользоваться
- Введите длину хеша или случайного идентификатора в битах.
- Введите число элементов: файлов, записей, ID. Большие числа можно писать как 1e9 или 5e12.
- Смотрите вероятность коллизии, ожидаемое число совпавших пар и количество элементов для 50 %, 1 % и одного шанса на миллион.
Формула
При N = 2ᵇ возможных значений и n элементах:
- P(коллизия) = 1 − exp(−n(n − 1) ÷ 2N) — вычисляется так, что и очень малые вероятности не теряют точность.
- Ожидаемое число пар = n(n − 1) ÷ 2N; пока оно мало, оно почти равно вероятности.
- Элементов для вероятности p: n = ½ + √(¼ + 2N·ln(1 ÷ (1 − p))).
Пример
64-битный хеш для 1 000 000 000 (10⁹) элементов:
- N = 2⁶⁴ = 1,845e+19 возможных значений.
- n(n − 1) ÷ 2N ≈ 10¹⁸ ÷ 3,69 × 10¹⁹ = 0,0271 ожидаемой пары.
- Вероятность = 1 − e^(−0,0271) = 2,674 %, примерно 1 из 37,4.
- Вероятность 50 % достигается на 5 056 937 541 элементе, 1 % — на 608 926 882, один на миллион — на 6 074 003.
Советы
- Вдвое больше элементов — вчетверо выше риск, пока он мал: он растёт как n².
- Плюс 2 бита — вдвое больше элементов при том же риске: каждый бит удваивает N и умножает допустимое n на √2.
- Укороченные хеши (например, первые 8 hex-знаков SHA-256) несут 4 бита на знак: 8 знаков — это 32 бита, и коллизии появляются уже на десятках тысяч элементов.