总和为 100 的一组可修改概率的算法/数据结构

标签 algorithm data-structures

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

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

是否有一个简洁的算法/数据结构解决方案?我现在有一种丑陋直接的方法,但我很想知道是否有更简洁的问题解决方案。

最佳答案

为每个方向分配一些点,不要担心它们加起来等于 100。相反,您可以随时将每个点的总数除以所有点值的总和,将这些点转换为概率。

例如,假设每个方向有 10 个点。四个方向的总和为 40,因此每个方向的概率为 10/40,即 25%。

假设北方增加了 10 点。然后它将是 20,其余的将是 10。现在总数将是 50,给北方的概率为 20/50 或 40%,其他三个概率为 10/50 或 20%。

关于总和为 100 的一组可修改概率的算法/数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32282271/

相关文章:

java - 特里数据结构 - Java

algorithm - B-Tree和Trie搜索速度对比

algorithm - 保证边不属于最小生成树

java - 使用图形的桨碰撞侧检测

algorithm - 用于计算社区(互连节点)到另一个点之间的距离的有效算法

data-structures - 快速过滤数据的数据结构

c - 提高成交率的技巧

python - 使用 Python 将 CSV 列分解为单独的数据结构的最优雅方法?

algorithm - 更有效的版本?

algorithm - 减去月份的日期 'wrap'