您可以通过生成唯一的数字来保证字符串的唯一性,从随机数开始的范围是可能性总数的1/50000th(628)。然后生成更多的随机数,每次都确定下一个数可以在哪个窗口中被选择。这并不是完全随机的,但我相信它已经足够接近了。在
然后,通过考虑62个基数的表示形式,每个数字都可以转换为字符串。下面是代码,最后进行一个测试,以检查50000个字符串是否都是唯一的:import string
import random
def random_strings(count, size=8, chars=string.ascii_uppercase + string.digits + string.ascii_lowercase):
max = len(chars) ** size - 1
start = 0
choices = []
for i in range(0,count):
start = random.randint(start, start + (max-start) // (count-i))
digits = []
temp = start
while len(digits) < size:
temp, i = divmod(temp, len(chars))
digits.append(chars[i])
choices.append(''.join(digits))
start += 1
return choices
choices = random_strings(50000)
# optional shuffle, since they are produced in order of `chars`
random.shuffle(choices)
# Test: output how many distinct values there are:
print (len(set(choices)))
这将产生线性时间的字符串。有了以上参数,你就可以在普通电脑上一秒钟内得到答案