IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 彩票收集问题的扩展问题及其求解算法 -> 正文阅读

[数据结构与算法]彩票收集问题的扩展问题及其求解算法

彩票收集问题

彩票收集问题的一个描述是,有n种彩票,每次随机抽取其中一种彩票一张,则要收集每种彩票各一张所需要抽取的次数的期望是多少。

求解方法

对于每种彩票的抽取概率均相等的情况,则抽取到第一种彩票的概率为1,期望次数为1。之后抽取到第二种彩票的概率为从n种彩票中抽取n-1种彩票的概率,即 ( n ? 1 ) / n (n-1)/n (n?1)/n,期望次数为 n / ( n ? 1 ) n/(n-1) n/(n?1),以此类推,第三种彩票的概率为 ( n ? 2 ) / n (n-2)/n (n?2)/n,期望次数 n / ( n ? 2 ) n/(n-2) n/(n?2)
故总次数的期望为
1 + n / ( n ? 1 ) + n / ( n ? 2 ) + . . . + n = n ( 1 / n + 1 / ( n ? 1 ) + 1 / ( n ? 2 ) + . . . + 1 ) = n H n 1+n/(n-1)+n/(n-2)+...+n = n(1/n+1/(n-1)+1/(n-2)+...+1) = n H_n 1+n/(n?1)+n/(n?2)+...+n=n(1/n+1/(n?1)+1/(n?2)+...+1)=nHn?
其中 H n H_n Hn?表示调和级数的第n个部分和。

彩票收集问题的扩展

本文主要讨论彩票收集问题的几种扩展问题的求解算法。

  1. 每种彩票的抽取概率不再相等,而是分别为 [ p 1 , p 2 , . . . , p n ] [p_1,p_2,...,p_n] [p1?,p2?,...,pn?]
  2. 要求收集每种彩票各c张时的抽取次数的期望。
  3. 要求收集每种彩票的张数分别为 [ c 1 , c 2 , . . . , c n ] [c_1,c_2,...,c_n] [c1?,c2?,...,cn?]
  4. 第1种情况与第2种情况相结合。
  5. 最复杂的情况:第1种情况与第3种情况相结合。

1. 抽取概率各不相等

当每次抽取彩票时,不再以等概率抽取每种彩票,而是以给定概率 [ p 1 , p 2 , . . . , p n ] ( p 1 + p 2 + . . . + p n = 1 ) [p_1,p_2,...,p_n](p_1+p_2+...+p_n=1) [p1?,p2?,...,pn?](p1?+p2?+...+pn?=1)抽取彩票时,原解法不再有效,因为此时抽取每种彩票的概率不再相同,需要分情况进行讨论。

按集齐每种彩票至少各一张时,每种彩票第一次抽到的顺序分情况讨论:
以n=4为例:
假设顺序[1234]代表112234,1213214,…等情况,即第一个抽到彩票1,第二个是彩票2,第三个彩票3,最后一个是一张彩票4
顺序[1234]出现的概率为 P ( [ 1234 ] ) = p 1 ? p 2 / ( 1 ? p 1 ) ? p 3 / ( 1 ? p 1 ? p 2 ) P([1234])=p_1*p_2/(1-p_1)*p_3/(1-p_1-p_2) P([1234])=p1??p2?/(1?p1?)?p3?/(1?p1??p2?)
此时的期望次数为 E ( [ 1234 ] ) = 1 + 1 / ( 1 ? p 1 ) + 1 / ( 1 ? p 1 ? p 2 ) + 1 / ( 1 ? p 1 ? p 2 ? p 3 ) E([1234])=1+1/(1-p_1)+1/(1-p_1-p_2)+1/(1-p_1-p_2-p_3) E([1234])=1+1/(1?p1?)+1/(1?p1??p2?)+1/(1?p1??p2??p3?)
以此类推
总期望为所有顺序出现的概率*期望次数后求和
E = P ( [ 1234 ] ) ? E ( [ 1234 ] ) + P ( [ 1243 ] ) ? E ( [ 1243 ] ) + . . . . . + P ( [ 4321 ] ) ? E ( [ 4321 ] ) E=P([1234])*E([1234])+P([1243])*E([1243])+.....+P([4321])*E([4321]) E=P([1234])?E([1234])+P([1243])?E([1243])+.....+P([4321])?E([4321])
这里需要枚举4种彩票的全排列,即枚举每一种抽取顺序。
对于概率和小于1的情况(即在一次抽取种有可能抽不到彩票),只需要将每个概率除以概率之和后进行计算,然后将最后的期望除以概率之和即可得到真实的期望。
以下是一个python的求解算法代码示例,p为给定的抽取概率:

import itertools
import numpy as np
p = np.array([0.1, 0.08, 0.12, 0.15])
n = len(p)
s = sum(p)
p /= s
e = 0
for i in itertools.permutations(np.arange(n)): #全排列
    pi = ei = pt = 1
    for k in range(n-1):
        pk = p[i[k]]
        pi *= pk/pt
        pt -= pk
        ei += 1/pt
    e += pi * ei
e/s

2. 要求抽取每种各c张

3. 要求抽取的张数不相等

4. 第1种情况与第2种情况结合

5. 第1种情况与第3种情况结合

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-10 12:39:06  更:2021-11-10 12:40:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/25 16:16:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码