Dig*_*Man 3 java language-agnostic algorithm probability
对于某种概率......我需要一种算法(在Java中,但理论应该是非常通用的).我甚至不知道该怎么称呼它,这就是为什么我没有任何运气谷歌搜索.
为了更好地描述,我有一个任务需要在调用函数时执行X次.有时候,只有十分之一的机会发生这种情况,这意味着(大约)每10次执行一次该函数的任务将实际执行 - 这对随机()很容易.有时它会是2中10,或者甚至10中10.仍然很容易,直接有条件,即使它并不总是"十分之十"
问题是,它可以有更大的比1 1的机会.它可能是十分之一 - 一半运行一次,其余运行两次.或者10比5,每次调用时运行两次(大约).正如您所看到的,现在已经从简单的不等式测试中脱颖而出.
所以,我正在寻找的是一些算法,基于随机数,将根据频率(10%,200%,0.75,无论什么格式有效)返回运行计数.如果有人可以在此提供任何线索 - 例如,可能是一个实际的搜索词 - 那将非常感谢!
编辑:难怪我找不到很多结果,每个人都像我一样困惑!
首先,没有真正的"最大"价值.没有正式定义.如果算法可以从它收到的概率值中提取出来,那就很好了.
它也肯定需要是随机的,这使它本身就不完美.如果你翻了10次硬币,你可能最终得到8个头,即使它理论上应该完全均匀!那没关系.事实上,这是重点.
我可以告诉你为什么我需要它...但这将违反适当的面向对象的模块化实践:)外部各方只需要知道接口; 它接受一个值(可能是一个浮点数,"0.75"似乎效果最好)并返回一个int.如果你将它调用100次,概率为1/5,则其返回值的总和应平均为20.
Ste*_*sop 12
根据你所说的,你可以使用几乎任何具有平均值的离散概率分布来选择重复次数X.
我特别推荐具有均值的泊松分布,因为它模拟了任何给定窗口中事件的数量,当事件在较长时间内独立均匀分布时.因此它具有"可扩展"的属性:你可以除以2,经常运行你的操作两次,并且你仍然具有基本相同的事件模式.[*]X[**]X
如果你真的不关心分布,你只需要正确的事件率,那么在相反的极端,你可以使用完全非随机的算法.保持累积的"进位值"从0开始.然后在每次迭代时添加X进位值,返回整数部分并继续进行小数部分.当然这使8/10头不可能.
[*]可悲的是,这个名字并不是因为它是钓鱼者在单位时间捕获的鱼数量的分布.
[**] 也与鱼无关.