不等概率概率问题转换为等概率问题

本文介绍了一种将不等概率事件转化为等概率事件的算法实现,通过两次独立试验,利用不同概率产生的组合来达到50%的概率,确保了在任意给定概率下都能公平地生成0或1。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给一个概率p代表生成0的概率,则1-p代表生成1的概率。这类似于一枚硬币投出去结果为正面和反面的概率是不同的。下段代码将不等概率转换为等概率,即转换后的硬币投正面和反面的概率是相同的。
话不多说,上代码

# 不等概率转等概率
# 随机给一个概率p
# p代表生成0的概率
# 1-p 代表生成1的概率
# function core 等概率的返回0或1
def core(p):
    import random
    re_dict = {
        '01':0,
        '10':1
    }
    re_temp = []
    
    while True:
        for i in range(2):
            if random.random() <= p:
                re_temp.append('0')
            else:
                re_temp.append('1')
        rand_result = re_dict.get("".join(re_temp))
        
        if rand_result == None:
            re_temp.clear()
            continue
        else:
            return rand_result

#test code
import random

timesOfZero = 0
timesOfOne = 0
p = round(random.random(),2)  #随机生成范围为(0,1)的小数p 代表概率
print("生成的概率为:",p)

#测试10万次
for i in range(100000):
    if core(p) == 1:
        timesOfOne += 1
    else:
        timesOfZero += 1
print("生成的0为{}次".format(timesOfZero))
print("生成的1为{}次".format(timesOfOne))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值