【发布时间】:2014-02-24 18:26:57
【问题描述】:
问题: 我偶然发现了可以轻松计算累积总和的 Fenwick 树(二进制索引树)。但是,我只找到了叶数(总和)是恒定的(但它们的值可以改变)的实现。 是否存在类似于广义 Fenwick 树的东西,它允许改变叶子(总和)的数量,即具有可变大小?
背景 我目前正在编写一些随机模拟代码(在 C++ 中):瓮中有球,每个球 i 都有一定的概率 p_i 被绘制。在绘制事件时,一个球被绘制(并移除)并被两个具有新概率的新球替换(并且所有概率都相应地重新调整;我已经有效地“重新调整”了,所以不要打扰它)。在某个时候,我开始移除球,使球的数量围绕一个恒定值波动(这是之前已知的)。为了有效地进行绘图,我想使用二叉树。标准的 Fenwick 树完全符合我的要求,只是它不允许改变瓮中球的数量。
典型数字 从 10 个球开始,添加球并在大约 1000 个时开始移除球,这样骨灰盒中的球在 900 到 1100 个之间(即添加和移除球,使数量保持在 1000 左右)。
目前的解决方法 估计需要的最大球数(有一定的安全余量,比如 1200 个球),并使恒定大小的 Fenwick 树变大,其中大多数球最初被抽出的概率为 0 并被连续更新。
非常感谢您的帮助! 马蒂亚斯
【问题讨论】:
标签: c++ algorithm tree stochastic-process