相关疑难解决方法(0)

通过频繁更新,可以模拟滚动加权骰子(或遍历加权图)

我有一个加权的有向图,它有大约20,000个节点.

  1. 给定图中的节点,我随机选择一个相邻节点,其概率与相对权重相关.
  2. 在每次选择之后,我会收到有关选择是好还是坏的反馈,并更新网络.例如,在选择错误之后,我减少了指向所选节点的所有边的权重.

昨天了解了模拟滚动加权骰子的别名方法,这与做出一个选择相同(每个节点是一个加权骰子,而侧面对应于其他节点).一卷是高效的,但更新权重不是; 别名方法可能不合适,因为我将更新骰子而不是我将要滚动!

我应该使用哪种数据结构,允许频繁更新,以及哪种相应的算法最适合做出选择?


一些想法/说明:

  • 我可以通过记录每个权重调整来减少更新,然后仅在必要时(即直接在滚动之前)实际更新节点/模具.但是我仍然会为每个卷预先计算一次别名数据.
  • 相反,我可以简单地存储图形(以便更新便宜)并放弃别名方法.我会在每次滚动之前动态计算相对权重(二进制搜索在这里工作).
  • 动态计算相对权重的另一个好处是,我可以将每个节点的"全局权重"分解出来,以进一步减少更新.然后,错误的选择将导致仅2个更新:传入边缘权重和节点的全局权重.
  • 补充:可能之间有一些东西:一种在数据结构中保持局部相对权重的方法(例如树或别名方法),然后在每次滚动时将它们与动态"全局权重"合并.

事实是,在实践中我不需要经常做出选择(每分钟不超过一次),所以我不需要最有效的解决方案.但这是一个有趣的副项目,我有兴趣找到一个理论上最优的解决方案.

c algorithm graph-theory data-structures

6
推荐指数
1
解决办法
762
查看次数

标签 统计

algorithm ×1

c ×1

data-structures ×1

graph-theory ×1