Создание уникальных случайных данных в vb.net

#vb.net #algorithm #unique

#vb.net #алгоритм #уникальный

Вопрос:

Я хочу генерировать случайные наборы данных с помощью регулярных выражений.

Поэтому у меня есть выражение типа [a-z] {10}. Я хочу сгенерировать, возможно, 200 000 данных — возможно, больше (они должны быть общими), все данные должны быть уникальными.

Как я могу это реализовать? на данный момент у меня есть алгоритм, который генерирует случайную строку, затем выполняет поиск в массиве, в котором хранятся значения, если строка уже есть, она повторяет этот процесс. В противном случае строка сохраняется в массиве.

Но когда у меня есть 200 000 возможных данных, и я хочу 200 000 разных данных, это занимает очень много времени 1) поиск по всему массиву на каждой итерации… 2) требует много итераций, потому что возможностей для «попадания» меньше

Комментарии:

1. Какова цель этого? Вы просто пытаетесь создать тестовые данные?

2. Если массив можно отсортировать, используйте двоичный поиск для вставки / поиска значений.

3. например, [a-z] {7} имеет ~ 8.000.000.000 возможностей, имеет ли это значение для двоичного поиска? возможно, я не знаю, сколько значений у меня есть

Ответ №1:

Похоже, вы выполняете поиск по всему массиву каждый раз, когда хотите сохранить значение. Рассматривали ли вы возможность использования хэш-таблицы с парой ключ / значение?

Комментарии:

1. привет, да, на данный момент я это делаю! 🙁 — хм, как «хэш-карта» — например, [a-z] {7} имеет ~ 8.000.000.000 возможностей, имеет ли это значение? :>

2. По сути, с помощью хэш-таблицы вы сохраняете ключ, который позволяет выполнять поиск по этому ключу. Если / когда вы генерируете одно и то же случайное значение, вы можете найти его намного быстрее, чем ваш текущий метод.

Ответ №2:

Похоже, что вам действительно нужен способ генерации 200.000 уникальных строк [a-z]{10} с последующим перемешиванием.

Комментарии:

1. чтобы быть действительно случайным, было бы 26 ^ 10 возможностей, должен ли я генерировать каждую возможность?

2. Если вы хотите истинную случайность среди уникальных строк, я поддерживаю предложение @Rob Haupts о хеш-таблице для отслеживания дубликатов.