我打算在Java中实现非固定大小的Fenwick tree。也就是说,Fenwick树允许使用添加/删除元素进行交错范围查询。
到目前为止,我见过的所有implementations和samples都是针对固定大小的Fenwick树,其中在预处理频率之前已知元素数量。它们使用固定大小的数组,因此在预处理完成后无法添加或删除元素。 (嗯,有可能,但我需要重新构建结构)。
我考虑过延长TreeMap
或AbstractMap
,但由于TreeMap
实际上是一棵红黑树,我不知道如何实施红黑机制(所以树保持平衡)而不会丢失重新平衡过程中涉及的累积节点总数。
所以我想也许我应该采取另一种方法:为什么不扩展或调整简单的随机访问ArrayList
并在重新调整基础数组时重新计算所有累积和?这当然会产生影响,但是,嘿,这正是HashMap
的作用。
这就是为什么我想先问这里,以防有人已经做过,并检查你认为哪种方法最好。