Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何实现基于概率的分支选择?_Algorithm_Probability - Fatal编程技术网

Algorithm 如何实现基于概率的分支选择?

Algorithm 如何实现基于概率的分支选择?,algorithm,probability,Algorithm,Probability,我想让程序以设定的概率选择一些东西。例如,选择路径A的概率为0.312,选择路径B的概率为0.688。我唯一能想到的方法是从区间0-1中随机选择,并检查以下是一种比多个if-else语句更有效的方法:- 假设 a=0.2,b=0.35,c=0.15,d=0.3。 制作一个数组,其中p[0]对应于a,p[1]对应于b,依此类推 运行一个循环,计算概率之和 p[0] = 0.2 p[1] = 0.2 + 0.35 = 0.55 p[2] = 0.55 + 0.15 = 0.70 p[3] = 0.7

我想让程序以设定的概率选择一些东西。例如,选择路径A的概率为0.312,选择路径B的概率为0.688。我唯一能想到的方法是从区间0-1中随机选择,并检查以下是一种比多个if-else语句更有效的方法:-

假设

a=0.2,b=0.35,c=0.15,d=0.3。 制作一个数组,其中p[0]对应于a,p[1]对应于b,依此类推 运行一个循环,计算概率之和

p[0] = 0.2
p[1] = 0.2 + 0.35 = 0.55
p[2] = 0.55 + 0.15 = 0.70
p[3] = 0.70 + 0.30 = 1
在[0,1]中生成一个随机数。在p上对随机数进行二进制搜索。搜索返回的时间间隔将是您的分支

例如


要搜索的短语是“加权随机选择”和“加权随机选择”。要从一组概率不等的结果中随机选择,我建议。如果您的实现语言允许函数指针或动态方法分派,则可以将函数/方法存储为值,并根据别名表生成的值直接分派给它。否则,您可以将生成的值与switch type语句一起使用,以控制应用的逻辑。对于N个结果,设置为O(N),每次使用为O(logn)。别名表的方法是设置O(N logn),每次使用O(1)。是的,但如果N不是那么大也没关系。我怀疑分支的数量不会这么大
random no = 0.6
result = binarySearch(0.6)
result = 2 using above intervals
2 => branch c