交替字符集中可能的组合数的公式?

时间:2012-10-03 10:55:05

标签: php math random combinations

在此示例中查找可能的组合数的公式是什么:从A-Z和0-9生成4个字符,但它们将是交替的。例如:L7W8,Q6N6,H3P1等。

用PHP代码说明:

$length = 4;

$pool_1 = explode(',', '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');
$pool_2 = explode(',', '1,2,3,4,5,6,7,8,9,0');

$s = '';

for ($i = 0; $i < $length; $i++)
    $s.= ($i % 2) ? $pool_2[array_rand($pool_2)] : $pool_1[array_rand($pool_1)];        

echo $s;

如果$ length为4,那么获得可能的组合数的公式是什么?

4 个答案:

答案 0 :(得分:1)

交替不会影响选择的总数。

只是26 * 10 * 26 * 10.

如果您不允许以字母重复,则为26 * 10 * 25 * 10.

答案 1 :(得分:1)

26 * 10 * 26 * 10

的答案为length = 4

说明:

对于第一个位置,你有26个选择。第二,你有10.可能的变化:26 * 10 对于第三个位置,你再次获得26个选择。所以你会得到可能的变化:(26 * 10)* 26

依旧......

这是基本的combinatorics。 26个中的1个在数学上表示为26C1,等于26/1 = 26

NCR = (N.N-1.N-2 .. N-R-1)/(1.2.3 .. R)

答案 2 :(得分:0)

对于最终字符串中的每个字符,您可以乘以可能的插入数。

Choice of A-Z = 26
Choice of 0-9 = 10

Combining A-Z and 0-9:  26 * 10 = 260
Combining A-Z and A-Z:  26 * 26 = 676
Combining 0-9, A-Z, 0-9: 10 * 26 * 10 = 2600

答案 3 :(得分:0)

如果您正在寻找独特的组合,那么公式将为:

(26 * 25)/ 2! *(10 * 9)/ 2! = 14625

分析:

上述公式假设您需要字母和数字的唯一组合。例如,B1A0将是序列中的第一个值,Z9Y8将是最后一个值。 A0B1,A1B0或B0A1都是重复的,并未反映在上述公式中。如果这些也可以允许,那么公式将减少为:

26 * 25 * 10 * 9 = 58500

如果允许重复的字母和数字,例如AA00,则公式为:

26 * 26 * 10 * 10 = 67600

我还建议将$ length分成两个单独的变量。一个变量用于字母,另一个变量用于数字。因此,例如,如果您正在寻找独特的组合,那么您的代码可能如下所示:

$NumLetters = 26;
$NumNumbers = 10;
$LettersLen = 2;
$NumbersLen = 2;

$NumCombos = $NumLetters * ($NumLetters-1) / gmp_fact($LettersLen) * $NumNumbers * ($Numbers-1) / gmp_fact($NumbersLen);

如果您知道$ NumbersLen或$ LettersLen始终为2,那么您可以取消对gmp_fact的调用并将其替换为数字2.