我需要某种概率的算法(在Java中,但理论应该很笼统)......事情。我什至不知道该怎么称呼它,这就是为什么我没有运气谷歌搜索。
为了更好地描述,我有一个任务需要在调用函数时完成 X 次。有时,发生这种情况的几率只有十分之一,这意味着(大约)每十次调用该函数的时候就有一个会实际执行该任务 - 使用 random() 很容易做到。有时它会是十分之二,甚至可能是十分之十。仍然很容易,直接的条件,即使它并不总是“10中的X”
问题是,它可能有大于1 比 1 的机会。它可能是 10 分之 15 - 运行一次的时间的一半,其余的运行两次。或 5 分之 10,每次调用它都会运行两次(大约)。如您所见,这已经脱离了简单的不等式测试。
所以,我正在寻找的是一些算法,它基于随机数,将根据应该发生的频率(十分之一、200%、0.75,无论格式如何)返回运行计数。如果有人可以提供任何线索 - 比如,也许是一个要搜索的实际术语 - 将不胜感激!
编辑:难怪我找不到很多结果,每个人都和我一样困惑!
首先,没有真正的“最大”价值。没有正式定义。如果算法可以从它接收到的概率值中提取出来,那就太好了。
它也绝对需要是随机的,使其本质上是不完美的。如果你掷硬币 10 次,你很可能会得到 8 个正面,尽管理论上它应该是完全均匀的!没关系。事实上,这就是重点。
我可以告诉你我为什么需要它......但这会违反正确的面向对象的模块化实践:) 外部各方只需要知道接口;它接受一个值(可能是一个浮点数,“0.75”似乎效果最好)并返回一个 int。如果你以五分之一的概率调用它 100 次,它的返回值的总和应该平均为 20。