Просто любопытно, а какова вероятность совпадения с Guid?
Произнесите руководство с SQL-сервера: 5AC7E650-CFC3-4534-803C-E7E5BBE29B3D.
факториал?: (36*32)! = (1152)!
обсудить =D
Просто любопытно, а какова вероятность совпадения с Guid?
Произнесите руководство с SQL-сервера: 5AC7E650-CFC3-4534-803C-E7E5BBE29B3D.
факториал?: (36*32)! = (1152)!
обсудить =D
Не понятно, о чем вы спрашиваете. Я вижу два варианта интерпретации вашего вопроса.
Учитывая GUID g
, какова вероятность того, что кто-то угадает его? Предположим для простоты, что доступны все 128 бит GUID. Тогда вероятность угадать g
равна 2^-128
. Это мало. Давайте получим некоторую интуицию вокруг этого. Предположим, что наш злоумышленник может генерировать один миллиард GUID в секунду. Чтобы угадать g
с вероятностью 50 %, злоумышленник должен сгенерировать 2^127 GUID. При скорости один миллиард в секунду потребуется 5391448762278159040348 лет для создания 2^127 GUID.
Мы создаем коллекцию руководств. Какова вероятность столкновения? То есть какова вероятность того, что мы сгенерируем два гида с одинаковым значением? Это парадокс дня рождения. Если вы сгенерируете последовательность из n GUID случайным образом, то вероятность по крайней мере одной коллизии будет приблизительно равна p(n) = 1 - exp(-n^2 / 2 * 2^128)
(это проблема дня рождения с числом возможных дней рождения, равным 2^128).
n p(n)
2^30 1.69e-21
2^40 1.77e-15
2^50 1.86e-10
2^60 1.95e-03
Таким образом, даже если вы сгенерируете 2 ^ 60 GUID, шансы на столкновение крайне малы. Если вы можете генерировать один миллиард GUID в секунду, все равно потребуется 36 лет, чтобы иметь вероятность столкновения 1,95e-03.
Количество возможных GUID (128-битное значение) составляет 2 ^ 128 или 3,4 × 10 ^ 38 — примерно 2 триллиона на кубический миллиметр всего объема Земли.
Другими словами, как-то низко.
(Источник ссылки на том Земли: WikiPedia)
Зависит от типа алгоритма генерации GUID. Текущие алгоритмы используют 124 случайных бита, поэтому вероятность составляет 1 из 2^124.
Со старыми алгоритмами (которые используют время и MAC-адрес) вероятность намного выше.
В ваших расчетах есть ряд ошибок. Во-первых, 36*32 подразумевает, что любой буквенно-цифровой символ может быть частью GUID. Это не тот случай; разрешены только HEX-символы.
Во-вторых, количество уникальных идентификаторов GUID рассчитывается как количество допустимых символов (16: 0-9, A-F) ^ длина GUID (32 символа).
Итак, у нас есть 16 ^ 32 ==> 2 ^ (4 ^ 32) ==> 2 ^ 128.
Вероятность угадывания любого GUID составляет 1/2^128.
Это 1 / (количество уникальных номеров, возможных с заданной длиной UID). В приведенном выше примере мы видим 16 байт или 128 бит. 2^128, поэтому вероятность совпадения 1/2^128.
Это зависит от того, сколько GUID создано. Это похоже на проблему дня рождения в статистике. См. Википедию и http://betterexplained.com/articles/understanding-the-birthday-paradox/ (здесь есть пример GUID)
В общем, вероятность коллизии для создания M направляющих из N возможных направляющих равна 1 - (1- (1/N))^C(M,2)
, где C(M,2)
означает «M выбрать 2».