#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 о хеш-таблице для отслеживания дубликатов.