今天我听了关于fenwick树(二进制索引树)的讲座,老师说这个树是区间树和分段树的概括,但我对这三个数据结构的实现是不同的。 这个假设是真的吗?为什么?
答案 0 :(得分:11)
以下分类似乎是明智的,尽管不同的人必然会混淆这些术语。
Fenwick树/二进制索引树 link
使用单个数组和二进制表示的操作来存储前缀和(也称为累积和)。元素可以是幺半群的成员。
范围树 link
树的族,其中每个节点代表给定范围的子范围,比如[0,N]。用于计算间隔的关联操作。
间隔树 link
存储实际间隔的树。最常见的是你取一个中点,在节点处保持交叉的间隔,并在点的左侧和右侧重复该过程。
细分树 link
类似于范围树,其中叶子是在可能连续的空间中的基本区间而不是离散的,而更高的节点是基本区间的联合。用于检查包含点。
答案 1 :(得分:5)
我从未听过binary indexed trees所谓的任何概括。这肯定不是interval trees和segment trees的概括。我建议你按照链接来说服自己。
这个树是间隔和分段树的推广
如果通过“这棵树”你的老师意味着“二元索引树”,那么他就错了。
但我对这三种数据结构的实现是不同的
当然他们是不同的,你的老师从不说他们不应该。他只是说一个是另一个的概括(这不是真的,但仍然)。无论哪种方式,实现都应该是不同的。
具有相同实现的是二元索引树和fenwick树,因为那些 是同一件事。