文章目录

  • 背景
  • 普通算法
  • 别名采样方法

背景

给定一个概率分布:[1/2, 1/3, 1/12, 1/12],我要你根据这个概率分布,随机抽取一个事件出来。有人说,直接用np.random.choice不就完了嘛,哈哈,确实如此,但是我们现在是在学习的过程,所以假设不允许你使用这个函数,必须自己写一个,只允许你均分分布地随机生成一个数,其他的内置采样函数不允许你使用。

普通算法

我们可以将其对应到线段上。

此时变成了[1/2,5/6,11/12,1]。那么我们可以随机生成一个数,然后,查找其所在的位置。学过数据结构的都知道,在一个长度为n(我们这里为4)的数组中,查找的复杂度为o(n),但是呢,由于我们这里是排好了序的,所以可以使用二分查找,复杂度为o(logn),但是,现实中,其是并不是有序的,所以我们可以认为这个复杂度就是o(n)。

别名采样方法

别名采样方法可以分为两部:

  1. 做表
  2. 根据表采样

1. 将概率分布的每个概率乘上N,画出柱状图。N为事件数量。为什么乘以N你可以最后慢慢体会其奥妙。

此时这些颜色的总面积为N,可以看出某些位置面积大于1某些位置的面积小于1。

将面积大于1的事件多出的面积补充到面积小于1对应的事件中,以确保每一个小方格的面积为1,同时,保证每一方格至多存储两个事件,这样我们就能看到一个1*N的矩形啦。

可以看到,上面这个图有一个特点,那就是最底层都是原来的那个事件,头上可能会有其他事件。

然后我们根据上面这个图得到两个数据结构。

  1. 原来的那个事件[2/3,1,1/3,1/3]。表示1事件在第1列所占比例为2/3,。。。
  2. 头上可能会有其他事件[2,没有,1,1]。表示第1列头上是2事件,。。。

2. 做好了这一个表之后,我们就可以坐享其成了。我们只需要产生两个随机数,第一次是均匀分布随机生成[1,N]之间的整数,用来决定落在哪一列,然后再生成一个[0,1]之间的小数,来决定要原来的那个事件还是头上的那个事件。

参考:
https://www.cnblogs.com/Lee-yl/p/12749070.html
https://blog.csdn.net/haolexiao/article/details/65157026

快速了解Alias method/别名采样方法相关推荐

  1. Alias Method解决随机类型概率问题(别名算法)

    举个例子,游戏中玩家推倒了一个boss,会按如下概率掉落物品:10%掉武器 20%掉饰品 30%掉戒指 40%掉披风.现在要给出下一个掉落的物品类型,或者说一个掉落的随机序列,要求符合上述概率. 一般 ...

  2. Linux 之alias 命令别名

    alias 命令别名 显示当前shell进程所有可用的命令别名 #alias 定义命令别名,其命令为:#alias NAME="VALUE" 在命令行中定义的别名,仅对当前shel ...

  3. 我的Android进阶之旅------修改Android签名证书keystore的密码、别名alias以及别名密码...

    转载于:http://blog.k-res.net/archives/1229.html  和 http://blog.k-res.net/archives/1671.html ADT允许自定义调试用 ...

  4. Linux alias(别名)设置

    命令别名 对于经常执行的较长的命令,可以将其定义成较短的别名,以方便执行 显示当前shell进程所有可用的命令别名 alias 定义别名NAME,其相当于执行命令VALUE alias NAME='V ...

  5. alias命令别名设置

    alias命令别名是一个很有趣的东西,特别是自己惯用的一些命令比较长的时候.另外,增设默认选项在一些惯用的命令上面,这样主要是预防自己不小心误删了文件. 1.别名设置  最简单的举个例子来说,如果你要 ...

  6. 使用Mac终端设置alias常用别名,以git提交为例

      分享一个常用的alias别名设置方法,大家可以使用下面的命令快速打开shell的配置文件,并且刷新配置文件. vi ~/.zshrc source ~/.zshrc 快速提交(push)git分支 ...

  7. SQL Alias(别名)

    通过使用 SQL,可以为列名称和表名称指定别名(Alias). SQL Alias 表的 SQL Alias 语法 SELECT column_name(s) FROM table_name AS a ...

  8. OSX/Linux 配置SSH免密登录并配置(Alias)别名登录

    为什么80%的码农都做不了架构师?>>>    一.本机执行这2步即可: 1.ssh-keygen -t rsa(一路回车下去即可) 2.sudo ssh-copy-id -i ~/ ...

  9. Linux之alias取别名

    温故: 上一篇文章和大家分享了kill命令的使用,尤其时"1""9""15"这三个信号一定要掌握,kill -9是平时大家用的比较多的,强制 ...

最新文章

  1. 2021-2027年中国透明熔融石英管行业市场全景调查及投资前景分析报告
  2. python学习方向-Python学习者的发展方向
  3. 区块链核心技术:拜占庭共识算法之PBFT全面理解
  4. [PAT乙级]1020 月饼
  5. linux c语 curl代码_偷懒必备工具——一键生成爬虫代码
  6. 计算机网络聚合怎么设置,交换机的端口聚合如何配置
  7. centos7 安装 vsftpd 过程
  8. [C++面试题]之冒泡排序
  9. 使用计算机打印汉子文档,电子科技大学《计算机应用基础(本科)》20春期末考试【标准答案】...
  10. geohash redis mysql_Redis geohash 地理位置存储
  11. 华为自研OS操作系统,今秋是否真的会面市?
  12. 无界鼠标MOUSE WITHOUT BORDERS连接失败的一种情况
  13. 如何使用微软提供的TCHAR.H头文件
  14. OKR如何与绩效考核并行?
  15. 计算机内存和磁盘的关系
  16. php srt,常见字幕文件格式(lrc、srt、ass)的区别以及互相转换的方法
  17. 应急照明和疏散指示系统在化工厂房中的设计与产品选型
  18. kubectl cordon 标记节点不可部署Pod SchedulingDisabled uncordon 取消标记
  19. 在gentoo上使用sway
  20. 计蒜客 Emptying the Baltic (BFS+Dijkstra)

热门文章

  1. 人在职场,干得好真的不如汇报得好?
  2. 2012最炙手可热的10项IT技术——相对应的技术书
  3. 《深入浅出Google Android》即将隆重上市!
  4. C#经典再现——《C#本质论》
  5. 爬虫之手机APP抓包教程-亲测HTTP和HTTPS均可实现
  6. 最小二乘GAN:比常规GAN更稳定,比WGAN收敛更迅速
  7. 清华博士接亲被要求现场写代码,5 分钟做出一颗爱心
  8. 今年两会大火的新基建,平均企业月薪1.63万 | 2020新基建中高端人才市场就业吸引力报告...
  9. 收藏 | 75道常见AI面试题助你清扫知识盲点(附解析)
  10. 网易云游戏来了:手机电脑电视随时接入可玩,高流畅度低延迟,还能跨终端无缝切换...