問題: 我偶然發現了Fenwick樹(二叉樹索引樹),可以很容易計算出累積和。但是,我只發現leeves(加法)數量不變的實現(但它們的值可以改變)。 有沒有像一個泛化的Fenwick樹,允許改變leeeves(加數)的數量,即有一個可變的大小?動態(即可變大小)Fenwick樹?
背景 我目前正在寫一些隨機模擬代碼(在C++):有在甕球和每個滾珠i具有一定的概率P_I要繪製。在一次抽籤活動中,球會被抽出(並被移除),並被新的概率所替換爲兩個新球(並且所有的概率都會相應地重新調整;我已經這樣做了「重新調整比例」,所以不用擔心)。在某個時候,我開始去除球,使得球的數量以恆定值(之前已知)波動。要高效地繪製圖畫,我想使用二叉樹。標準的芬威克樹正是我想要的,只是它不允許在甕中的球數量發生變化。
典型數字 開始用10個球,添加球並開始一次移除球有大約1000使得存在然後在甕900和1100之間的滾珠(即球被添加和去除,使得數保持在1000左右)。
解決方法到目前爲止 估算的最大數目需要球(有一些安全餘量,說1200個球),使大型大多數球的初始具有概率0要繪製的固定尺寸分域樹正在不斷更新。
非常感謝您的幫助! Matthias