将树数据位置分段到树位置关系

时间:2017-11-09 11:52:35

标签: algorithm binary-tree divide-and-conquer

我想知道data_array数据位置与tree_array数据位置之间是否存在任何关系。

int data[N];
int tree[M]; // lets M = 2^X-1, where X = nearest ceiling power of 2 to N;

void build_segment_tree();

我想知道我是否可以说数据[]的第n个值与第一个值[]映射。有什么数学解决方案吗?

1 个答案:

答案 0 :(得分:1)

你当然可以。例如,段树用于存储的能力 细分信息。

现在,您将看到如果要从N元素中创建分段树 你需要ceil(log_2(N))+1级别。在最后一级,你会发现所有的 1个长度范围或单个元素。

这些元素将精确地位于(1-index)2^ceil(log_2(N))2^ceil(log_2(N))+N-1的位置。

          [1-8]
        /       \
     [1-4]     [5-8]
     /   \      /   \
    [1-2][3-4] [5-6][7-8]
    /\     /\     /\    /\
   [1][2] [3][4] [5][6] [7][8]
1-11
/   \
1-6 7-11
1-3 4-6 7-9 10-11
1-2 3 4-5 6 7-8 9 10 11
1 2   4 5   7 8

此答案仅适用于2个元素的分段树。

但是对于其他元素,元素不​​一定是有组织的。

因此对于那些不是2的力量而言,答案将是假的。

在这种情况下,你找不到任何形式的规则。