随机生成的字符串,可能等于?

如何解决随机生成的字符串,可能等于?

| 给定一个脚本,该脚本生成一个随机生成的12个字符的字符串,那么两个字符串相等的可能性有多少?
function rand_string( $length ) {
    $chars = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMnopQRSTUVWXYZ0123456789\";  

    $size = strlen( $chars );
    for( $i = 0; $i < $length; $i++ ) {
        $str .= $chars[ rand( 0,$size - 1 ) ];
    }

    return $str;
}
    

解决方法

假设
A-Za-z0-9
,可能有62个字符值。因此,有62 ^ 12个(以幂为单位)可能的字符串。大约是3x10 ^ 21(3个带有21个零)。 假设有一个完美的随机数生成器,则任何两个特定字符串相等的几率为3x10 ^ 21的1。     ,给定该代码且长度为12,则可能有6212个值。因此(假设完全统一的随机数生成器,,2ѭ可能不是),则在3226266762397899821056中有1个机会一次调用该函数将返回任意12个字符的字符串。 OTOH,如果您要反复调用该函数,并且想知道要等多久才能获得之前返回的任何值的重复,则必须调用它约6.7e + 10次,才有50%的机会发生冲突(同样,假设使用统一的随机数生成器)。通过计算
sqrt(-ln(1 - p) * 2 * 6212)
,您可以合理估计在0和1之间的任何碰撞概率p所需的呼叫数量。     ,这属于“出生悖论”(您在一个房间中需要多少人才能让两个或更多人有相同生日的机会达到50%)。 您的12个长度为62个字符的字符串大约为72位。使用此处详细介绍的近似值,您可以期望在发生碰撞之前生成大约SQRT((pi / 2)* 62 ^ 12))= 7.112x10 ^ 10个字符串。因此,约有700亿分之一。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?