Алгоритм увеличения Строки неочевидным способом - PullRequest
16 голосов
/ 06 июля 2011

Я хочу создать произвольно выглядящие буквенно-цифровые строки из 5 или 6 символов, например:

Vg78KY

Создание (псевдо) случайных строк получило ответ, но мне интересно, есть лиалгоритм для увеличения строки неочевидным образом.Простое увеличение приведенной выше строки может привести к:

Vg78KZ

Но я не хочу, чтобы следующая строка была предположительной, я хочу, чтобы она выглядела совершенно иначе.Конечно, последовательные приращения не должны приводить к предыдущему результату, поскольку каждый из них должен быть уникальным.

Любые мысли о том, как этого добиться, приветствуются!

Спасибо

Ответы [ 13 ]

0 голосов
/ 06 июля 2011

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

Хотя в долгосрочной перспективе это, вероятно, потребует большого объема памяти и процессора.

0 голосов
/ 06 июля 2011

Одним из возможных решений будет предварительная генерация всего словаря всех возможных строк, а затем использование SecureRandom для указания на индекс этого словаря. Если определенный элемент уже будет «зарезервирован», вы просто перейдете к следующему доступному (кстати, эта операция также может быть предварительно сгенерирована).

Очевидным недостатком этого решения является недетерминизм. Но это не было запрошено ОП. И я даже не уверен, возможен ли детерминизм в этой ситуации.

0 голосов
/ 06 июля 2011

Сделайте вашу строку результатом операции хеширования.Например, использование случайных строк в качестве входных данных:

String input1 = "Vg78KY";
String output1 = String.valueOf(input1.hashCode());

String input2 = "Vg78KZ";
String output2 = String.valueOf(input2.hashCode());

output1 и output2 будут совершенно разными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...