2012-10-03 13 views
0

在此示例中查找可能組合數的公式是什麼:從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; 

如果$長度爲4,有什麼公式來獲得組合的可能數目?

回答

1

答案是26 * 10 * 26 * 10length = 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)

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 
1

該變更不影響選擇的總數。

它只是26 * 10 * 26 * 10。

如果你不允許重複字母,它將是26 * 10 * 25 * 10。

0

如果您正在尋找獨特的組合,則公式爲:

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

分析:

上述公式假定你想爲這兩個字母和數字的組合獨特。例如,B1A0將是序列中的第一個值,而Z9Y8將是最後一個值。 A0B1,A1B0或B0A1都是重複的,並未反映在上述公式中。如果這些太可被允許,則所述式簡化爲:

26 * 25 * 10 * 9 = 58500

如果重複的字母和數字可以被允許,AA00例如,則公式將是:

26 * 26 * 10 * 10 = 67600

我也建議分手$長度爲兩個獨立的變量。一個變量是數字的字母和其他變量。因此,舉例來說,如果你正在尋找獨特的組合,那麼你的代碼可能是這個樣子:

$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.