惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Cybersecurity and Infrastructure Security Agency CISA
D
Darknet – Hacking Tools, Hacker News & Cyber Security
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
Schneier on Security
L
Lohrmann on Cybersecurity
S
Securelist
P
Palo Alto Networks Blog
SecWiki News
SecWiki News
T
Troy Hunt's Blog
H
Hacker News: Front Page
AWS News Blog
AWS News Blog
Latest news
Latest news
Hacker News - Newest:
Hacker News - Newest: "LLM"
NISL@THU
NISL@THU
The Hacker News
The Hacker News
F
Full Disclosure
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
大猫的无限游戏
大猫的无限游戏
O
OpenAI News
P
Proofpoint News Feed
Know Your Adversary
Know Your Adversary
G
GRAHAM CLULEY
博客园_首页
Attack and Defense Labs
Attack and Defense Labs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Security Latest
Security Latest
云风的 BLOG
云风的 BLOG
K
Kaspersky official blog
WordPress大学
WordPress大学
www.infosecurity-magazine.com
www.infosecurity-magazine.com
宝玉的分享
宝玉的分享
L
LINUX DO - 热门话题
博客园 - 叶小钗
L
LINUX DO - 最新话题
Martin Fowler
Martin Fowler
N
News | PayPal Newsroom
Project Zero
Project Zero
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
PCI Perspectives
PCI Perspectives
月光博客
月光博客
IT之家
IT之家
Recent Announcements
Recent Announcements
T
The Exploit Database - CXSecurity.com
D
DataBreaches.Net
J
Java Code Geeks
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
Google Online Security Blog
Google Online Security Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

博客园 - 申龙斌的程序人生

将博客搬至CSDN 读书:有钱人想的和你不一样 读书打卡:《微信互联网平民创业》 用欧拉计划学Rust编程,第323题,随机整数按位或运算 《老喻的人生算法课》读书笔记之A计划 用欧拉计划学Rust编程语言(第700题:Eulercoin) 用欧拉计划学Rust编程(第61题) 通过欧拉计划学Rust编程(第500题) - 申龙斌的程序人生 - 博客园 申龙斌的读书笔记(2011-2019) 通过欧拉计划学Rust编程(第54题) - 申龙斌的程序人生 - 博客园 刷完欧拉计划中难度系数为5%的所有63道题,我学会了Rust中的哪些知识点? - 申龙斌的程序人生 - 博客园 用欧拉计划学Rust编程(第26题) 通过欧拉计划学习Rust编程(第22~25题) 用欧拉计划学Rust语言(第17~21题) 用欧拉计划学习Rust编程(第13~16题) 用欧拉计划学Rust语言(第7~12题) 通过欧拉计划学Rust(第1~6题) 《区块链生存训练2.0》PDF 写书,我是认真的,但我真不知道能否财富自由
利用欧拉计划学Rust编程(第493题)
申龙斌的程序人生 · 2020-03-28 · via 博客园 - 申龙斌的程序人生

问题描述:

在容器中装有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);