Какова вероятность того, что UUID, лишенный всех своих букв и тире, является уникальным? - PullRequest
1 голос
/ 16 апреля 2019

Скажите, что у меня UUID a9318171-2276-498c-a0d6-9d6d0dec0e84.

Затем я удаляю все буквы и тире, чтобы получить 9318171227649806960084.

Какова вероятность того, что это уникально, учитывая набор идентификаторов, которые генерируются таким же образом? Как это соотносится с обычным набором UUID?

1 Ответ

1 голос
/ 16 апреля 2019

UUID представлены в виде 32 шестнадцатеричных (base-16) цифр, отображаемых в 5 группах, разделенных дефисами.Проблема с вашим вопросом заключается в том, что для любого сгенерированного UUID мы могли бы получить любое допустимое шестнадцатеричное число из набора [0-9, AF] включительно.

Это ставит нас перед дилеммой, поскольку мы не знаем заранее, сколько шестнадцатеричных цифр, сгенерированных для каждого UUID, будет альфа-символом : [AF].Единственное, в чем мы можем быть уверены, это то, что каждый сгенерированный символ UUID имеет 5/16 шанс быть альфа-символом: [AF].Знание этого делает невозможным точный ответ на этот вопрос, поскольку удаление дефисов и буквенных символов оставляет нам UUID переменной длины для каждого сгенерированного UUID ...

С учетом сказанного, чтобы дать ваммы должны знать, что каждый UUID имеет длину 36 символов, включая дефисы.Поэтому, если мы упростим и скажем, что у нас нет дефисов, теперь каждый UUID может быть длиной всего 32 символа.Основываясь на этом, если мы еще больше упростим и скажем, что каждый из 32 символов может быть только числовым символом: [0-9] теперь мы можем дать точную вероятность уникальности каждого сгенерированного, упрощенного UUID (согласно нашемуУпомянутые выше упрощения) :

Предполагается, что UUID представлен 32 символами, где каждый символ является числовым символом из набора [0-9].Мы знаем, что нам нужно сгенерировать 32 числа, чтобы создать действительный упрощенный UUID.Теперь шансы выбора любого заданного числа: [0-9] равны 1/10.Еще один способ подумать об этом заключается в следующем: каждое число имеет равную возможность быть сгенерированным, и поскольку существует 10 чисел: каждое число имеет 10% -ную вероятность создания.

Кроме того, когда генерируется число, оно генерируется независимо от ранее сгенерированных чисел , т. Е. Каждое сгенерированное число не зависит от результата предыдущего сгенерированного номера.Следовательно, для каждого из 32 сгенерированных числовых символов: каждое число не зависит друг от друга , и поскольку результатом любого выбранного числа является число, и только число от [0-9] можно сказать, что каждое выбранное число является взаимоисключающим друг для друга.

Зная эти факты, мы можем воспользоваться правилом Product , которое гласит, что вероятность возникновения двух независимых событий является произведением их индивидуальных вероятностей .Например, вероятность получения двух голов на двух бросках монеты составляет 0,5 х 0,5 или 0,25.Следовательно, генерация двух идентичных UUID будет:

1/10 * 1/10 * 1/10 * .... * 1/10 where the number of 1/10s would be 32.

Упрощение до 1/(10^32) или в целом: до 1/(10^n) where n is the length of your UUID. Таким образом, при всем этом, как говорится, возможность генерирования двух уникальных UUID, учитывая нашпредположения, это бесконечно мало.

Надеюсь, это поможет!

...