zoukankan      html  css  js  c++  java
  • 利用欧拉计划学Rust编程(第493题)

    问题描述:

    在容器中装有70个球,分别染上彩虹的七种颜色,每种颜色各有10个。

    从容器中随机取出20个球,这些球中出现不同颜色球的数量的期望值是多少?

    你的答案应当保留到小数点后9位小数(a.bcdefghij)。

    第一步:模拟选球的过程

    先模拟从70个球里选20个球的过程,可以大概一个大概的数值,虽然难于精确到小数点后9位,但可以给出一个粗略的估计。

    假设70个球的编号是0到69,颜色编号从0到6,每10个一种颜色,x/10则可以表示球的颜色编号。rand模块中有一个sample_iter()函数可以完成从70个球里选20个球的过程,itertools里的unique()函数可以统计出不重复的颜色值。
    模拟一百万次,可以得到大约为6.818的结果。

    use rand::{seq, thread_rng, Rng};
    use itertools::Itertools;
    fn simulate() {
        let mut rng = thread_rng();
        let total_samples = 1_000_000_u64;
        let mut sum = 0;
        for _i in 0..total_samples {
            let balls20 = seq::sample_iter(&mut rng, 0..70, 20).unwrap();
            let distinct_colors = balls20
                .into_iter()
                .map(|x| x / 10)
                .unique()
                .collect::<Vec<u32>>();
            //println!("{:?}", distinct_colors);
            sum += distinct_colors.len();
        }
        println!("{}", (sum as f64) / (total_samples as f64));
    }
    

    第二步:利用概率论的知识

    原问题等价于:20个球里出现至少1个红球的概率 + 至少1个绿球的概率 + ... + 至少1个紫球的概率。

    由于出现红、绿、...、紫7种颜色球的概率是一样的,所以问题又等价于:

    7 * {20个球里出现至少1个红球的概率}

    7 * (1 – {20个球里没有出现1个红球的概率})

    7 * (1 – {20个球里没有红球出现的所有可能组合} / {70个球里选20个球的所有可能组合})

    没有红球出现,即从70个球里除掉10个红球,还有60个其它颜色的球,从里面选20个的情况共有 C(60, 20)种,所以得到:

    现在用计算器也可以得到正确答案。

    let mut prob = 1.0;
    for i in 41..=50 {
        prob *= (i as f64) / ((i + 20) as f64);
    }
    println!("{:.9}", (1.0 - prob) * 7.0);
    
  • 相关阅读:
    flink 读取kafka 数据,partition分配
    Flink 报错 "Could not find a suitable table factory for 'org.apache.flink.table.factories.StreamTableSourceFactory' in the classpath"
    flume接收http请求,并将数据写到kafka
    【翻译】Flume 1.8.0 User Guide(用户指南) Processors
    【翻译】Flume 1.8.0 User Guide(用户指南) Channel
    【翻译】Flume 1.8.0 User Guide(用户指南) Sink
    【翻译】Flume 1.8.0 User Guide(用户指南) source
    【翻译】Flume 1.8.0 User Guide(用户指南)
    Apache Flink 简单安装
    Java之使用IDE
  • 原文地址:https://www.cnblogs.com/speeding/p/12587277.html
Copyright © 2011-2022 走看看