Сначала давайте рассмотрим тест, в котором вы провалили код:
- 10.000 созданных экземпляров
- Все они должны иметь разные имена
Итак каким-то образом при создании 10000 «случайных» имен ваш код создает как минимум двух одинаковых имен.
Теперь давайте посмотрим на схему именования, которую вы используете:
AB123
Максимальное количество уникальных имен, которые мы могли бы создать, составляет 468000 (26 * 25 * 10 * 9 * 8).
Кажется, что это не должно быть проблемой, потому что 10000 < 468000
- но тут-то и начинается парадокс дня рождения !
Из википедии:
В теории вероятностей проблема дня рождения или парадокс дня рождения касается вероятности того, что в наборе из n
случайно выбранных людей у некоторой пары будет один и тот же день рождения.
Переписано для целей вашего проблема, в итоге мы спрашиваем:
Какова вероятность того, что в наборе O f 10000 случайно выбранных людей , некоторые пары из них будут иметь одно и то же имя .
В статье в Википедии также приведена функция для приблизительного определения количества людей Требуется для достижения вероятности 50%, что два человека будут иметь одно и то же имя:
, где m - общее количество возможных различных значений. Применение этого с m=468000
дает нам ~ 806 - это означает, что после создания только 806 случайно названных Robot
с, уже есть 50% -ная вероятность того, что два из них будут иметь одно и то же имя. Робот # 10000, вероятность того, что не сгенерирует два одинаковых имени, в основном равна 0.
Как уже отмечали другие, вы можете решить эту проблему, используя Guid
в качестве робота имя вместо
Если вы хотите сохранить соглашение об именах, вы также можете обойти это, внедрив LCG с соответствующим периодом и использовать его как менее подверженный столкновениям «генератор имен».