快速了解Alias method/别名采样方法
文章目录
- 背景
- 普通算法
- 别名采样方法
背景
给定一个概率分布:[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. 将概率分布的每个概率乘上N,画出柱状图。N为事件数量。为什么乘以N你可以最后慢慢体会其奥妙。
此时这些颜色的总面积为N,可以看出某些位置面积大于1某些位置的面积小于1。
将面积大于1的事件多出的面积补充到面积小于1对应的事件中,以确保每一个小方格的面积为1,同时,保证每一方格至多存储两个事件,这样我们就能看到一个1*N的矩形啦。
可以看到,上面这个图有一个特点,那就是最底层都是原来的那个事件,头上可能会有其他事件。
然后我们根据上面这个图得到两个数据结构。
- 原来的那个事件[2/3,1,1/3,1/3]。表示1事件在第1列所占比例为2/3,。。。
- 头上可能会有其他事件[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/别名采样方法相关推荐
- Alias Method解决随机类型概率问题(别名算法)
举个例子,游戏中玩家推倒了一个boss,会按如下概率掉落物品:10%掉武器 20%掉饰品 30%掉戒指 40%掉披风.现在要给出下一个掉落的物品类型,或者说一个掉落的随机序列,要求符合上述概率. 一般 ...
- Linux 之alias 命令别名
alias 命令别名 显示当前shell进程所有可用的命令别名 #alias 定义命令别名,其命令为:#alias NAME="VALUE" 在命令行中定义的别名,仅对当前shel ...
- 我的Android进阶之旅------修改Android签名证书keystore的密码、别名alias以及别名密码...
转载于:http://blog.k-res.net/archives/1229.html 和 http://blog.k-res.net/archives/1671.html ADT允许自定义调试用 ...
- Linux alias(别名)设置
命令别名 对于经常执行的较长的命令,可以将其定义成较短的别名,以方便执行 显示当前shell进程所有可用的命令别名 alias 定义别名NAME,其相当于执行命令VALUE alias NAME='V ...
- alias命令别名设置
alias命令别名是一个很有趣的东西,特别是自己惯用的一些命令比较长的时候.另外,增设默认选项在一些惯用的命令上面,这样主要是预防自己不小心误删了文件. 1.别名设置 最简单的举个例子来说,如果你要 ...
- 使用Mac终端设置alias常用别名,以git提交为例
分享一个常用的alias别名设置方法,大家可以使用下面的命令快速打开shell的配置文件,并且刷新配置文件. vi ~/.zshrc source ~/.zshrc 快速提交(push)git分支 ...
- SQL Alias(别名)
通过使用 SQL,可以为列名称和表名称指定别名(Alias). SQL Alias 表的 SQL Alias 语法 SELECT column_name(s) FROM table_name AS a ...
- OSX/Linux 配置SSH免密登录并配置(Alias)别名登录
为什么80%的码农都做不了架构师?>>> 一.本机执行这2步即可: 1.ssh-keygen -t rsa(一路回车下去即可) 2.sudo ssh-copy-id -i ~/ ...
- Linux之alias取别名
温故: 上一篇文章和大家分享了kill命令的使用,尤其时"1""9""15"这三个信号一定要掌握,kill -9是平时大家用的比较多的,强制 ...
最新文章
- 2021-2027年中国透明熔融石英管行业市场全景调查及投资前景分析报告
- python学习方向-Python学习者的发展方向
- 区块链核心技术:拜占庭共识算法之PBFT全面理解
- [PAT乙级]1020 月饼
- linux c语 curl代码_偷懒必备工具——一键生成爬虫代码
- 计算机网络聚合怎么设置,交换机的端口聚合如何配置
- centos7 安装 vsftpd 过程
- [C++面试题]之冒泡排序
- 使用计算机打印汉子文档,电子科技大学《计算机应用基础(本科)》20春期末考试【标准答案】...
- geohash redis mysql_Redis geohash 地理位置存储
- 华为自研OS操作系统,今秋是否真的会面市?
- 无界鼠标MOUSE WITHOUT BORDERS连接失败的一种情况
- 如何使用微软提供的TCHAR.H头文件
- OKR如何与绩效考核并行?
- 计算机内存和磁盘的关系
- php srt,常见字幕文件格式(lrc、srt、ass)的区别以及互相转换的方法
- 应急照明和疏散指示系统在化工厂房中的设计与产品选型
- kubectl cordon 标记节点不可部署Pod SchedulingDisabled uncordon 取消标记
- 在gentoo上使用sway
- 计蒜客 Emptying the Baltic (BFS+Dijkstra)
热门文章
- 人在职场,干得好真的不如汇报得好?
- 2012最炙手可热的10项IT技术——相对应的技术书
- 《深入浅出Google Android》即将隆重上市!
- C#经典再现——《C#本质论》
- 爬虫之手机APP抓包教程-亲测HTTP和HTTPS均可实现
- 最小二乘GAN:比常规GAN更稳定,比WGAN收敛更迅速
- 清华博士接亲被要求现场写代码,5 分钟做出一颗爱心
- 今年两会大火的新基建,平均企业月薪1.63万 | 2020新基建中高端人才市场就业吸引力报告...
- 收藏 | 75道常见AI面试题助你清扫知识盲点(附解析)
- 网易云游戏来了:手机电脑电视随时接入可玩,高流畅度低延迟,还能跨终端无缝切换...