質問: 累積和を簡単に計算できる Fenwick ツリー (バイナリ インデックス ツリー) を偶然見つけました。ただし、リーブ (被加数) の数が一定である実装のみを見つけました (ただし、その値は変更される可能性があります)。リーブ (加数) の数を変更できる、つまり可変サイズを持つ一般化されたフェンウィック ツリーのようなものはありますか?
背景 現在、いくつかの確率的シミュレーション コードを (C++ で) 書いています。壷にはボールがあり、各ボール i には特定の確率 p_i が描かれます。描画イベントが発生すると、ボールが描画 (および削除) され、新しい確率を持つ 2 つの新しいボールに置き換えられます (すべての確率はそれに応じて再スケーリングされます。この「再スケーリング」は既に効率的に行われているので、気にしないでください)。ある時点で、ボールの数が一定値 (以前にわかっている) の周りで変動するように、ボールを削除し始めます。描画を効率的に行うために、二分木を使用したいと考えています。標準の Fenwick ツリーは、骨壷内のボールの数を変更できないことを除いて、まさに私が望むことを行います。
典型的な数 10 個のボールから始め、ボールを追加し、約 1000 個になったらボールを削除し始め、その後 900 個から 1100 個のボールが骨壷に収まるようにします (つまり、ボールの数が約 1000 個に留まるようにボールを追加および削除します)。
これまでの回避策 必要なボールの最大数を見積もり (ある程度のセキュリティ マージンを考慮して、たとえば 1200 個のボール)、固定サイズの Fenwick ツリーを大きくして、最初はほとんどのボールが描画される確率が 0 であり、連続的に更新されます。
ご助力ありがとうございます!マティアス