大乐透绝对值怎么算?
举个简单的例子吧 01-10这10个号码,每个号码出现3组(比如03,就有030405,031213...这样排列组合),一共是30组,每组7个字符,那么就是210个字符。再对210个字符进行hash,h(210)=k,然后根据k的值来决定哪些字符作为前缀,把这一批字符串放一起。因为不同的字符hash出来的数值不同,所以这种方法理论上是可以做到不重复的。 但是这种做法有个缺点,如果某个号码出现了很多次,而它在所有号码中又是相对后面的数字出现较少的,那么它就会被保留下来,而后面出现的同一数字序列的号就会被舍弃掉。这就导致了这种算法的随机性。 如果某个数字出现的次数特别多的话,而且它又是在前面几位数中出现较少的的话,那么在选取前缀的时候就可能把这条信息给漏掉了!这种情况也是有可能发生的。
所以这种通过hash取模的方式产生随机数的做法并不是很可靠,实际上也确实被利用了。 大乐透的数字是一个2位数一个3位数组成的,在计算的时候先按照每注9个字符,即6个数字和2个字母组成一组,共10组,然后每组经过hash得到一个0~1000的数作为该组的随机种子,1000这个数太大了,在计算时可以把所有组合的random_seed合在一起用一次shuffle函数打乱排序,这样就做到了每一注号码的随机性。 当然,我说的这些只是我对这个方法的理解,不知道有没有偏差,希望有大神指教!