组合杂题选讲 #7

题目描述

题意:每次抽卡时会从 \(n\) 种卡里随机获得一种,那么期望上抽到全部 \(n\) 种卡需要抽多少次?

提示:随机试验中某个变量的数学期望(简称“期望”)是指该变量所有可能的结果的概率乘以其结果的总和。例如一个理想情况下的骰子的点数的数学期望由

\[\frac16\times1+\frac16\times2+\frac16\times3+\frac16\times4+\frac16\times5+\frac16\times6=\frac72 \]

给出。而投掷两个理想情况下的骰子得到的点数之和的期望由

\[\frac{1}{36}\times2+\frac{2}{36}\times3+\frac{3}{36}\times4+\frac{4}{36}\times5+\frac{5}{36}\times6+\frac{6}{36}\times7+\frac{5}{36}\times8+\frac{4}{36}\times9+\frac{3}{36}\times10+\frac{2}{36}\times11+\frac{1}{36}\times12=7 \]

给出。

容易验证,当 \(n=5\) 的时候,答案为 \(137/12\)

解答

我们用记号 \(\mathbf E(a)\) 表示随机试验中变量 \(a\) 的数学期望。已经抽卡的次数简称为时刻,例如“取出抽出 \(3\) 张不同种的卡的时刻”的意思是“取出抽出 \(3\) 张不同种的卡时已经进行的抽卡次数”。

设这 \(n\) 种卡片首次出现的时间构成的可重集合为 \(S\),所求即为 \(\mathbf E(\max S)\),根据容斥原理(min-max容斥),有

\[\mathbf E(\max S)=\sum_{T\subseteq S,T\neq\varnothing}(-1)^{|T|-1}\mathbf E(\min S) \]

考虑 \(\mathbf E(\min T)\) 的组合意义,即为集合 \(T\) 中对应包含的卡片首次出现的时刻的期望,于是 \(\mathbf E(\min T)=n/|T|\),代回原式,得到

\[\begin{aligned}\mathbf E(\max S)&=\sum_{T\subseteq S,T\neq\varnothing}(-1)^{|T|-1}\frac n{|T|}\\&=n\sum_{k=1}^n(-1)^{k-1}\binom nkk^{-1}\end{aligned} \]

考虑右边的那个和式怎么处理,记

\[S_n=\sum_{k=1}^n(-1)^{k-1}\binom nkk^{-1} \]

考虑对 \(S_n\) 应用加法公式

\[\binom nk=\binom{n-1}{k-1}+\binom{n-1}k \]

以及吸收恒等式

\[\binom nk=\frac nk\binom{n-1}{k-1} \]

得到

\[\begin{aligned}S_n&=\sum_{k=1}^n(-1)^{k-1}\left(\binom{n-1}{k-1}+\binom{n-1}k\right)k^{-1}\\&=\frac1n\sum_{k=1}^n(-1)^{k-1}\binom nk+\sum_{k=1}^{n-1}(-1)^{k-1}\binom{n-1}kk^{-1}\\&=S_{n-1}+\frac1n\end{aligned} \]

考虑到 \(S_0=0\),这立即得出原问题的答案是 \(n\mathrm H_n\),其中 \(\mathrm H_n\) 为第 \(n\) 项调和级数,其公式由

\[\mathrm H_n=\sum_{k=1}^n\frac1k \]

给出。

2022年12月19日 于东莞松山湖

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多数据库后端,并且为每后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多数据库后端,并且为每后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值