首页 > 其他分享 >实现不同概率对应不同level思路

实现不同概率对应不同level思路

时间:2023-11-16 16:57:49浏览次数:35  
标签:rand 概率 level 不同 float levelMax 随机 思路

背景


现在我要实现一个level,有1/2概率level=1,1/4概率level=2,1/8概率level=3。。。。
典型应用跳表中的randomLevel,这里提供两种实现思路

随机累加


简单点多次循环随机,小于1/2则level+1

level = 1
while (rand.float(0,1) < 0.5){
	level++
}

这里有几个缺点

  • rand.float(0,1)要保证线程安全,需要加锁, 多次随机,影响性能
  • 没有加中断操作,可能造成程序崩溃

随机区间


随机区间利用的是随机的数据在某个范围内的概率,比如随机一个016的数据,落在815概率为1/2,48为1/4,24为1/8,如此往复
具体看伪代码

levelMax = 4
// 随机一个0~2^levelMax的数字
randNum = rand.int(0, math.pow(2,levelMax))
randLen = bin(randNum).length
level = levelMax - randLen + 1

这里可以看到只需要随机一次,通过随机数二进制的长度来确定level

标签:rand,概率,level,不同,float,levelMax,随机,思路
From: https://www.cnblogs.com/zuzeep/p/17836698.html

相关文章

  • add方法在return的适时候就形成了一个闭包,包含n=4399这个值,这个n不是result和result2
    在浏览器控制台中执行以下代码,输出的结果是functiontest(){varn=4399;functionadd(){n++;console.log(n);}return{n:n,add:add}}varresult=test();varresult2=test();result.add();result.add();console.log(result.n)......
  • WPS word制作不同样式水平线的快捷方法
    shift键+~键插入三个【~】符号,然后按下键盘上的回车键,之后就会显示出一条波浪线。输入三个【=】符号,之后再按下键盘上的enter键,一条粗的直线。输入三个【*】符号,并且用同样的操作方法,按下回车键,就会得到一个小黑点的水平线线条。输入三个【---】符号,按下回车键,得到一条细直线......
  • 异或规则,两值同为0,不同为1
    0xff^33的结果是:A220B221C222D223正确答案:C0xff11111111(255)00100001(33)异或操作11011110(222)首先0xff表示16进制的ff,即16*15+16=255^:表示的是异或运算符33就是十进制的33,现在将它们两个2进制化表达就是:0xff---->255---->1111111133......
  • 按位异或运算,同为1或同为0取0,不同取1
    假设有如下代码,那么a(10)的返回结果是?functiona(a){a^=(1<<4)-1;returna;}A5B10C15D16正确答案:A1<<4左移相当于1*2^4=16a^=16-1=15a=a15=1015^异或运算:10的二进制0000101015的二进制00001111========>00000101转成十进制:5(按位异或运算,同为......
  • Hippo4j 用户体系对接 LDAP 指导流程 及 实现思路
    (目录)Hippo4j用户体系对接LDAPFeature:serveraddLdapuserauthenticationissue:https://github.com/opengoofy/hippo4j/pull/1392Hippo4j接入Ldap指导在application.properties配置文件中,配置下面相关信息:此配置文件示例在同目录下的ldap-back.properties......
  • 【windows工具使用】如何在不同设备之间传输、共享文件
    前言 1.两个window系统之间如何传输文件通过Wi-Fi传输的文件在不同的操作系统中存在差异。对于操作系统为Windows10和11的电脑,可以使用“附近共享”。两台电脑需要连接到同一Wi-Fi网络并设置相同的权限(例如,可以从哪些设备共享或接收文件)。设备winA和winB启动设置-......
  • 设计思路-消费MQ
    消费端收到消息持久化到redis或者数据库,状态为待处理。然后ack确认再处理通过线程池异步消费消息,提高吞吐量1.如redis先通过zset放入redis  消费成功删除redis未删除的等redis过期的补偿队列进行补偿......
  • 如何根据不同仪器选择适合的电源模块?
    BOSHIDA如何根据不同仪器选择适合的电源模块?在实验室、工业生产等场合中,电源模块是必不可少的设备之一。电源模块的作用是将输入电能转换成所需要的电压和电流,为各种仪器设备提供恰当的电源。不同的仪器设备对电源的要求不同,因此在选择电源模块时需要根据具体的情况进行选择。下......
  • 选择振弦采集仪进行岩土工程监测时,根据不同工况选择合适的种类
    选择振弦采集仪进行岩土工程监测时,根据不同工况选择合适的种类岩土工程监测是保证工程质量和安全的重要手段。振弦采集仪是一种常用的岩土工程监测仪器,可用于对岩土工程场地振动环境的监测。它具有测量精度高、实时性强、易于安装、使用方便等特点。然而,在使用中要针对不同的工程工......
  • GEE中核函数在不同缩放级别下的区别
    问题:2个问题:1.内核都采用单位参数,可以是像素或米,文档指出:内核的测量系统(“像素”或“米”)。如果内核以米为单位指定,则当缩放级别更改时它将调整大小。我认为这是不正确的,如果内核以像素为单位指定,它会随着金字塔级别的变化而改变缩放级别吗?您可以在上面的代码中比较圆内核(......