2010-07-21 50 views
0

我正在考虑在Perl这个随机字符串发生器:此代码生成多少个随机字符串?

sub generate_random_string { 
    my $length = 12; 
    my @chars = qw/2 3 4 5 6 7 8 9 A B C D E F G H J K M N P Q R S T U V W X Y Z/; 
    my $str = ''; 
    $str .= $chars[int rand @chars] for 1..$length; 
    return $str; 
} 

多少唯一的字符串将在产生?如果我扩展字符串的长度,还有多少个独特的字符串可用?

另外,如何计算两次生成相同字符串的概率(假设字符串的长度保持为12)?

+7

这是作业吗?有点味道像功课。 – Joel 2010-07-21 19:59:51

+0

只是为了好玩......这里是另一种创建数组的方法:'my @chars = grep {/ [^ 10ILO] /} 0..9,'A'..'Z';' – toolic 2010-07-21 20:16:59

+0

这不是作业。这是为了解决关于数学随机是如何“随机串生成”的内部讨论。 – 2010-07-21 20:35:43

回答

3

答案是:(1/31)^ 12

或者更一般地:(1 /(字符数))^长度

+0

这就是1.2e-18或1.2可能的字符串。 – dwarring 2010-07-21 23:26:48