1.生成不重复的随机字符串
随机字符序列在哪里用的上呢?举个栗子,购物网站需要生成大量的验证码图片,把随机字符序列作为这些图片的名字就是一个不错的选择。出现在文件名中的字符可以包括./_|数字0-9以及大小写字符共62个不同字符,为了保证文件命名的正确性,将每个图片文件的前三个字符设置为pic,现在假设我们设定每个文件名称(不含后缀)共需13个字符(如下图所示)。根据这个格式我们可以最多给11^62张图像命名,这个数据量应该足够一般网站使用了吧。
M1.添加一个序号
通过随机的方法生成这个验证码序列并不难,但是有可能出现生成的随机序列相同的情况(虽然对于这个问题来说概率极小)。怎样才能避免这样的情况出现呢?最简单的方法就是在生成的字符序列指定位置插入一个递增的编号,比如需要给超过1000张图像命名,就可以将一个三位数(000-999)插入到生成的字符序列中,上述图像的名字变成了T1._154A44BFeljX.jpg。
M2.比较的方法
将新生成的字符序列和已用于命名的字符序列进行逐一比较,这个方法只适用于数据量比较小的情况,对于给出的例子中的情况,则会耗费掉大量的时间。
2.生成不重复随机数字
假设我们需要生成1000个1000以内的随机数,并将生成的随机整数一次存入到数组random_seq[1000]中。
M1.设置标记
我们设置一个1000维的数组bool flag[1000],所有元素都默认设置为false。当随机生成458时候,就将bool[459]设置为true,这样当下次生成一个随机数的时候我们就通过flag数组判断这个数据是否已经存在,若已经存在就丢弃重新生成一个。这个方法浪费了额外的空间,为了节省空间还可以使用一个比特序列来存储生成的状态。