Допустим, вы хотите иметь набор из 1–2-значных шестнадцатеричных чисел, то есть 256 чисел.Просто используйте небольшой набор для решения проблемы, но он будет работать со строкой любого размера.
Таким образом, у вас есть потенциал N
или 256 чисел в этом случае.Вы собираетесь «генерировать» новый идентификатор для каждой новой записи данных, которая появляется на вашем пути.Таким образом, он начинает и случайным образом дает вам af
, затем 1d
, затем 8a
и т. Д.
Простой наивный способ сделать это - просто сгенерировать все числа по порядку, затем перемешатьих, и просто выскочить из набора.Это прекрасно работает, когда у вас есть только 256 номеров.Но если у вас есть миллионы или миллиарды номеров, это нецелесообразно, так как у вас может быть много сгенерированных идентификаторов, которые не используются в течение длительного времени.Я хотел бы избежать этого.
Поэтому мой вопрос в том, каков или самый быстрый способ создания уникальной ключевой строки, подобной этой, без генерации всех их заранее и без упорядочения, просто увеличивая на 1или еще много чего.То есть ключ должен казаться случайным.
Один из способов, который я могу себе представить, - использовать три для хранения уже использованных / сгенерированных значений.Затем, когда вам нужно получить новое значение, вы генерируете случайное значение, а затем проверяете три, чтобы увидеть, используется ли оно уже.Я понятия не имею, как сказать, насколько это эффективно, но кажется, что это будет очень плохо, если вы начнете исчерпывать идентификаторы и останетесь до последних нескольких в наборе.Вы бы сгенерировали много уже сгенерированных идентификаторов и проследовали бы по каждому из них, так что это было бы медленно.
Мне интересно, есть ли более эффективный способ сделать это, не генерируя их все заранее.Кроме того, записи данных не будут использоваться при вычислении идентификатора, так как записи могут быть очень большими и сложными.
Может быть, есть способ сортировки случайным образом (и генерации) три сразуи таким образом сгенерируйте идентификатор, так как вы окажетесь в уникальном случайном месте в дереве.Возможно, что-то в этом роде, я не знаю.
Кроме того, я не разбираюсь в хешировании, поэтому я не знаю, будут ли какие-нибудь хорошие методы с этим.