我测试大小写字母+数字,随机生成2亿个8位的ID有多少重复的概率

mport uuid
import time

array = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
         "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
         "w", "x", "y", "z",
         "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
         "W", "X", "Y", "Z"
         ]

start = time.time()

def get_short_id():
    id = str(uuid.uuid4()).replace("-", '')  # 注意这里需要用uuid4
    buffer = []
    for i in range(0, 8):
        start = i * 4
        end = i * 4 + 4
        val = int(id[start:end], 16)
        buffer.append(array[val % 62])
    return "".join(buffer)


id_set = set() # 用于存放生成的唯一id
count = 0 # 用于统计出现重复的次数
index = [] # 记录第几次调用生成8位id出现重复
for i in range(0, 200000000):
    id = get_short_id()
    if id in id_set:
        count += 1
        index.append(str(i+1))
    else:
        id_set.add(id)
    print('id:%s, 运行第 %s 次, 重复数:%s , 重复率:%s, 出现重复次序 %s' % (id, i+1, count, count/(i+1)*100, ','.join(index)))

end = time.time()
runTime = end - start

print('time cost : %.5f sec' %runTime)
print("运行时间:", runtime)

目前在网上找到的这些代码,测试的规模是2000万次随机生成,重复次数是2次,于是我想试试2亿次的随机生成会有多少次的重复次数呢?

经过几次小数据量的测试,我觉得速度蛮快的,于是我想试试2亿次会有什么结果,然而我对以上的代码运行时间估计太乐观了,运行了近30个小时 还没有出结果:

最终用时173456秒,  用了48小时,哭死....

生成2亿次8位随机码,重复次数95次, 约200万分之一.

重复分布:前1亿次重复22次,后3000次重复35次,总体上已有数据越多,重复几率更大.

花了超长时间跑出来的结果,分享了.

出现重复次序4912261,25109815,32333359,35410441,55589646,56476115,60858595,63105050,63514212,65615134,66200366,69775931,70602830,72576590,72999246,73988417,75776971,81133769,86240803,93757955,93866702,98284163,105333744,105425161,107047605,109154941,112563393,112807970,114714405,116031045,128196679,129116001,129904355,130034262,135008676,135426866,140723290,140946333,141671478,142307697,144187126,146084087,146546463,147028295,148836577,151822871,151857928,153661405,155546101,155660970,156796205,158792504,158886989,162399859,162796352,163017360,167480363,167887397,169019153,169047387,170838963,171152596,171177319,171338068,173369973,173733311,174546518,175833112,177722852,179057593,179209511,179736650,179986971,180844739,182485452,183430257,183868857,184688065,185510067,185610856,187492258,188712567,189112357,190692138,190823081,191111114,191216922,192224286,194401972,194597436,197659330,198202946,198511998,199332445,199626653

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值