Alias sampling(根据概率的一种高效采样方法)

alias sampling别名采样方法的Python实现 alias sampling的介绍: https://blog.youkuaiyun.com/haolexiao/article/details/65157026 这里使用python队列和numpy实现链接最后提到的时间复杂度为O(N)的方法 from queue import Queue import numpy as np def alias_sampling(normalized_prob): smaller = Queue() larger = Queue() length = len 阅读详情

最近学习node2vec接触到了这个算法,在此简单记录下,详细可见该博客https://blog.youkuaiyun.com/haolexiao/article/details/65157026
我这里直接以上述博客的例子结合代码简单整理下

假如有四个事件,概率分别是1/2,1/3,1/12,1/12(和为 1)。

构建Alias Table

  1. 将四个事件排成一列,分为1,2,3,4。在这里插入图片描述
  2. 每个概率乘以四(事件数)。
    在这里插入图片描述
  3. 然后拼凑使每列值为 1,并保证每列最多只包含两个事件。在这里插入图片描述
    即Alias Table构建完成,得到两个数组,alias:保存着每列中加入的事件,如图即为【2,null,1,1】;prab:保存着每列事件的概率,如图即为【2/3,1,1/3,1/3】。

代码实现思想:乘以事件数之后先将事件分成两部分,一个小于1(smaller),一个大于1(larger),然后分别从这两部分中取数据,用大的补小的使其为 1,如果大的剩余值小于1,加入smaller中,否则还是放回larger中,直到smaller或larger为空。

def alias_setup(probs):
	'''
	Compute utility lists for non-uniform sampling from discrete distributions.
	Refer to https://hips.seas.harvard.edu/blog/2013/03/03/the-alias-method-efficient-sampling-with-many-discrete-outcomes/
	for details
	'''
	K = len(probs)
	q = np.zeros(K)    #保存样本概率
	J = np.zeros(K, dtype=np.int)  #保存补1的事件

	smaller = []
	larger = []
	for kk, prob in enumerate(probs):
	    q[kk] = K*prob
	    if q[kk] < 1.0:
	        smaller.append(kk)
	    else:
	        larger.append(kk)

	while len(smaller) > 0 and len(larger) > 0:
	    small = smaller.pop()
	    large = larger.pop()

	    J[small] = large
	    q[large] = q[large] + q[small] - 1.0  #q[large]-(1-q[small])
	    if q[large] < 1.0:
	        smaller.append(large)
	    else:
	        larger.append(large)

	return J, q    #(alias,prab)

采样

根据Alias Table在这里插入图片描述
随机生成 1—N(事件数) 一个数,确定选中哪列,然后在随机生成一个 0—1 的数,根据概率判断是取样该列的事件还是该列用来补 1 的事件。如选中3列后产生的随机数小于 1/3 则选黄色事件3,否则选蓝色事件1。

def alias_draw(J, q):
	'''
	Draw sample from a non-uniform discrete distribution using alias sampling.
	'''
	K = len(J)

	kk = int(np.floor(np.random.rand()*K))
	if np.random.rand() < q[kk]:
	    return kk
	else:
	    return J[kk]
Alias Method for Sampling Milo老湿在他的博文 用JavaScript玩转游戏编程(一)掉宝类型概率 中提到了游戏中按一定概率掉宝的算法,即根据给定的PDF(probability density function),在线性时间内算出对应的CDF(cumulative distribution function),然后进行取样。一个例子如下: PDF val 1 2 3 4 pr 阅读详情

相关推荐

游戏道具掉落系统优化:Alias Method算法原理与Python工程实践

在游戏开发中,随机抽样是构建核心玩法循环的关键技术,它直接关系到道具掉落、抽卡、奖励分配等系统的性能与公平性。其基本原理是根据预设的概率分布,从一组离散选项中选取结果。传统权重累加方法在物品数量激增时,会面临O(N)的时间复杂度瓶颈,导致服务器在高并发下CPU压力剧增。为解决这一工程难题,Alias Method(别名方法)应运而生,它通过巧妙的预处理,将抽样时间复杂度降至O(1),实现了海量请求下的极速响应。该算法的技术价值在于,它将一次复杂的概率计算转化为两次O(1)的随机访问,特别适用于需要高频、稳定

weixin_33889245的博客 342

Alias Sampling(别名采样法)【根据概率的一种高效采样方法】【时间复杂度O(1)的离散采样算法】

参考资料: 【数学】时间复杂度O(1)的离散采样算法—— Alias method/别名采样方法 Alias sampling(根据概率的一种高效采样方法)

u013250861的博客 1670

离散采样Sampling

文章目录离散采样Sampling问题定义O(N)的方法O(logN)的方法O(1)的方法Python代码参考 离散采样Sampling 问题定义 给定一个离散型随机变量的概率分布规律P(X=i)=pi,i∈1,...NP(X=i)=p_i,i\in{1,...N}P(X=i)=pi​,i∈1,...N,希望设计一个方法能够从该概率分布中进行采样使得采样结果尽可能服从概率分布P O(N)的方法 想象随机事件依其概率的大小分布在一个长度为1的线段上。那么我在线段中随机取一点,看看该点落在哪个事件对应的区间中,就

召唤师的峡谷 2266

Alias sampling

参考: 1.http://www.keithschwarz.com/darts-dice-coins/ 2.https://lips.cs.princeton.edu/the-alias-method-efficient-sampling-with-many-discrete-outcomes # Author:ZC class Alias: def __init__(self, prol...

NockinOnHeavensDoor的博客 732

AliasSampling:Alias采样算法的C ++实现

#Alias采样 Alias采样算法的C ++实现。 别名采样根据O(1)时间中的任意概率分布返回整数值。 [1] [2]沃克(AJ)(1977年9月)。 “一种生成具有一般分布的离散随机变量的有效方法”。 关于数学软件的ACM事务。 3(3):253。

IST——In-System-Test

安全性是自动驾驶平台的关键特性之一,而这些架构中使用的半导体芯片必须保证ISO 26262标准所要求的功能安全方面。为了监控由于现场缺陷导致的故障,在启动和/或关闭期间会自动运行系统内结构测试。当系统内测试(IST,In-System-Test)架构检测到任何永久性缺陷时,驾驶平台会做出响应,以实现系统的故障安全状态。汽车IC采用高质量测试方法进行筛选,以实现接近零的DPPM(每百万缺陷部件)。即使在这样的高测试标准下,由于环境或操作条件的影响,在系统现场运行过程中仍可能出现可靠性缺陷。

weixin_50518899的博客 3207

CS224W课程学习笔记(四):node2vec算法原理与说明

DeepWalk可以说给大家带来了全新的思路,其意义远不止实验结果那么简单。理论上,对于任何图数据,或者是由关系型数据抽象出来的图数据,都可以利用DeepWalk得到Embedding,而且算法简单,易于扩展到大规模数据上;更为重要的,这启发了后续的研究者进行了更加深入的研究。node2vec的作者针对DeepWalk不能用到带权图上的问题,提出了概率游走的策略,并使用AliasSampling进行采样,该算法在之后会尝试讲解,这里主要提及一下它的创新点。

submarineas的博客 5314

企业级智能问数开发的核心痛点与技术聚焦

本文介绍了企业级智能问数系统开发的三大核心问题和解决方案:语义解析不精准、SQL生成不健壮、企业适配难落地。文章从开发者视角出发,详细拆解了NLU语义解析、SQL生成、对话记忆、企业级适配四大核心模块的技术实现。 在技术选型方面,推荐了LangChain+DeepSeek-R1、FAISS/Milvus、SQLAlchemy等工具链组合。针对企业级需求,重点讲解了: 语义解析模块的意图识别优化和要素提取技术 SQL生成模块的语法校验与性能优化方案 对话记忆模块的Redis存储实现 企业级适配的三层防护体系和

lamehsl的专栏 1047

AliasSample采样算法

def create_alias_table(df): s = [row['weight'] for index, row in df.iterrows()] prob_values = np.array(s) # prob_values存放的是各个类型发生的累计概率*类型种数 prob_values = prob_values / sum(prob_values) # 归一化 skus = [row['skuId'] for index, row in df.iter.

liuhe2296044的博客 513

英雄联盟(MOBA)完整制作教程

这是一份从零到上线、可落地的 LOL 风格 MOBA 游戏开发全流程教程,覆盖策划、美术、程序、测试、运营全环节,适合独立团队或学习参考。

qq_35779316的博客 541

使用MiniExcel.SaveAsByTemplate快速地保存百万数据

该代码展示了如何使用MiniExcel快速生成并导出百万级销售数据。核心方法GenerateLargeData()可生成指定数量的随机销售记录,包含客户名、日期、VIP状态、积分等20个字段。通过随机函数模拟真实数据分布,并支持自定义数据量(默认100万条)。配合Excel模板使用MiniExcel.SaveAsByTemplate()方法,能高效地将大数据量导出为Excel文件,且处理速度极快。代码结构清晰,包含数据生成、随机日期辅助方法和数据模型类,适合需要批量生成测试数据或导出大型报表的场景。

大坡3D软件开发 253

从‘彩票抽奖’到O(1)采样:图解Node2Vec中的Alias Sampling算法,附Python实现

本文深入解析Node2Vec中的Alias Sampling算法,通过图解和Python实现展示如何将采样复杂度从O(N)降至O(1)。该算法特别适用于图算法中的高频采样场景,如CS224W课程中的随机游走,能显著提升大规模图计算的效率。

weixin_30919429的博客 428

Python Alias sample采样算法

alias 采样 复现

_yuki_ 783

数学之美:欣赏超越数e

文章目录一、e为何物?二、利息与e的关系1、利息问题2、计算利息3、欣赏螺旋线(1)螺旋线概述(2)绘制螺旋线三、e和π 一、e为何物? e是一个无限不循环小数,其值约等于2.718281828…,它是一个超越数,有时也称为欧拉数(Euler’s Number)。 以e为底的对数称为自然对数(Natural Logarithm),数学中使用自然这个词的还有自然数(Natural Number)。 这里的“自然”并不是现代人所习惯的“大自然”,而是有点儿“天然存在,非人为”的意思。 二、利息与e的关系

howard2005的专栏 1718

电子元器件选型与实战应用—01 电阻选型

大家好, 我是记得诚。这是《电子元器件选型与实战应用》专栏的第一篇文章,今天的主角是电阻,在每一个电子产品中,都少不了电阻的身影,其重要性不言而喻。

记得诚 3537

从‘彩票抽奖’到Alias Sampling:手把手图解Node2vec中的高性能采样算法

本文深入解析了Node2vec中的高性能采样算法Alias Sampling,通过直观的‘彩票抽奖’比喻,详细介绍了其O(1)时间复杂度的实现原理。文章还提供了Python代码示例和工程实践技巧,帮助开发者在大规模图数据中高效应用该算法,显著提升随机游走采样速度。

weixin_30892037的博客 341

iOS应用突然无法从App Store获取到内购(IAP)产品列表的解决

问题现象 Apple开发中,在应用中嵌入内购(IAP)功能的小伙伴们可能会发现,吃着火锅唱着歌,突然App就无法获取到产品列表了,而且产品请求操作并不会返回任何错误。 此时检查发现,并没有对App的内购逻辑做任何改动。 那么,这是什么原因导致的呢? Let’s find out!???? 问题分析 1. 排除其它原因 首先,你先得排除不是你IAP内购逻辑变更或其他原因导致的。 在SKProductsRequestDelegat代理实现的productsRequest方法里下断点: func produc

享受开发,颠倒银河 6142

Alias:时间复杂度O(1)的离散采样方法

【Alias】时间复杂度O(1)的离散事件抽样方法 最近在看graph embedding的一些东西,发现像deepwalk,node2vec在采样节点路径以及line中采样边的时候都用到了Alias方法。这里简单总结一下 问题定义 给定一个离散型随机变量的概率分布规律P(X=i)=piP(X=i)=p_iP(X=i)=pi​,i∈1,...Ni\in{1,...N}i∈1,...N,希望设计一个...

浅梦的学习笔记 1966

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【word2vec】负采样(Negative Sampling)优化策略与实战应用

本文深入解析了word2vec中的负采样(Negative Sampling)技术,从数学原理到工程实践全面剖析其优化策略。通过对比实验数据展示不同参数组合的效果差异,并分享在推荐系统等非NLP领域的扩展应用案例。文章还总结了动态采样表、负样本缓存等5个实用技巧,以及低频词淹没、梯度消失等常见陷阱的解决方案。

wdx012345的博客 824

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Alias Method for Sampling 采样方法

 【Alias Method for Sampling】原理    对于处理离散分布的随机变量的取样问题,Alias Method for Sampling 是一种很高效的方式。    在初始好之后,每次取样的复杂度为 O(1)。     、、、   【Python 代码】 # !/usr/bin/env python # encoding: utf-8 __author__ = 'Scarle...

weixin_33806914的博客 387

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Line论文中的Alias Sampling Algorithm 分析

http://blog.youkuaiyun.com/haolexiao/article/details/65157026 找了一下这篇写的最清晰了,然后结合Line的源码分析一下。原理: 原文举例如下:比如一个随机事件包含四种情况,每种情况发生的概率分别为: 12,13,112,112,问怎么用产生符合这个概率的采样方法。Alias方法按照均值1/N进行归一化,其总面积为N,并且分为1*N个长方形,每一列

小雅的博客 3364

Alias Sampling Algorithm With GSL C代码实现

最近读论文《Large-scale Information Network Embedding》 看到里面对超大数量的边进行采样时采用了Alias Sampling Algotithm,他的优点是可以O(1)的时间采样。下面涉及了gsl,安装方法很简单。 下面是gsl的资料: http://www.gnu.org/software/gsl/manual/html_node/#include <

li8630的专栏 1299

Alias method

参考链接: python实现:https://lips.cs.princeton.edu/the-alias-method-efficient-sampling-with-many-discrete-outcomes/ 算法思想:https://www.keithschwarz.com/darts-dice-coins/ 思想简单介绍:https://blog.youkuaiyun.com/qq_33765907/article/details/79182355 各版本代码实现:https://blog.csd

SmartDemo的博客 307
上一篇: GCN相关论文整理
下一篇: node2vec整理
Cestbo1
博客等级 码龄10年 53粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值