[算法实现]选择n次(n≥M), 能集齐M种卡片的概率是多大?

  作者:zhanhailiang 日期:2013-12-08

一个礼盒由5种不同颜色(红, 橙, 蓝, 绿)的小球, 每次取小球概率相同, 请问取多少次小球可以取全5种颜色的小球?

数学分析

请见:选择 n 次 (n ≥ M),能集齐 M 种卡片的概率是多大?

程序实现

<?php
/**
 * @version  1.0
 * @author   wade
 * @date     2013-12-08
 * @desc     一个礼盒由5种不同颜色(红, 橙, 蓝, 绿)的小球, 每次取小球概率相同, 请问取多少次小球可以取全5种颜色的小球?
 */
 
ini_set('memory_limit', '512M');
 
$sum = 0;
$tryTimes = array();
 
// 做200000次试验
for($i = 0; $i < 200000; $i ++) {
    $target = array();
 
    for($j = 1; TRUE; $j ++) {
        $target[] = mt_rand(1,5);
        if(count(array_diff(range(1, 5, 1), $target)) === 0 || $j > 1000) {
            $tryTimes[] = array($j, $target);
            $sum += $j;
            break;
        }
    }
}
 
$output = sprintf('average try times: %f; all try times: %s', $sum/200000, json_encode($tryTimes));
echo $output.PHP_EOL;

结论

期望值为11.425675

你可能感兴趣的:([算法实现]选择n次(n≥M), 能集齐M种卡片的概率是多大?)