一组始终总和为100

时间:2015-08-29 02:56:41

标签: algorithm data-structures

我目前正在开展一个项目,这需要我在四个不同元素之间保持可变的概率平衡。在我的情况下,我需要在北,西,南和东方向之间做出随机选择,这可以在代码中的多个点受到影响和改变。我有的限制:

  • 总有四个方向。
  • 可以根据概率值随机选择方向。
  • 此概率值可随时增加或减少。
  • 每个方向的概率总和必须始终等于100.
  • 每个方向的概率永远不会低于0或超过100。
  • 一个方向的概率值的任何增加或减少都应该触发其余概率的相等(但平衡)的改变。例如:如果一个方向的概率为30并且概率降低到0,则其他三个方向的概率应该分别增加10个点。
  • 用户应该能够根据概率检索随机方向,而无需关心或需要知道内部概率分布。他们还应该能够修改方向的概率,而无需明确管理其他方向的概率。

这是否有一个简洁的算法/数据结构解决方案?我现在有一种简单易用的方式,但我很想知道这个问题是否更简洁。

1 个答案:

答案 0 :(得分:1)

为每个方向分配多个点,并且不要担心它们加起来为100.相反,您可以随时通过将每个点总数除以所有点值的总和来将点转换为概率。

例如,说每个方向都有10个点。所有四个的总和将是40,因此每个方向的概率为10/40或25%。

让我们说北方增加10点。然后它将是20,其余的将是10.现在总数为50,北方概率为20/50或40%,其他三个概率为10/50或20%。