Algorithm 段树数据位置到树位置的关系
我想知道数据数组数据位置和树数组数据位置之间是否有任何关系Algorithm 段树数据位置到树位置的关系,algorithm,binary-tree,divide-and-conquer,Algorithm,Binary Tree,Divide And Conquer,我想知道数据数组数据位置和树数组数据位置之间是否有任何关系 int data[N]; int tree[M]; // lets M = 2^X-1, where X = nearest ceiling power of 2 to N; void build_segment_tree(); 我想知道我是否可以说data[]的第n个值映射到tree[]的第I个值。有数学上的分辨率吗?你当然可以。例如,段树用于存储数据 段信息 现在您将看到,如果您想用N元素创建一个段树,那么 您需要ceil(lo
int data[N];
int tree[M]; // lets M = 2^X-1, where X = nearest ceiling power of 2 to N;
void build_segment_tree();
我想知道我是否可以说data[]的第n个值映射到tree[]的第I个值。有数学上的分辨率吗?你当然可以。例如,段树用于存储数据 段信息 现在您将看到,如果您想用
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]
此答案仅适用于2个元素幂的段树
但对于其他元素,这些元素不一定是有组织的
因此,对于N,答案将是错误的,它们不是2的幂
在这种情况下,你找不到任何形式化规则。这意味着数据[]的基于1的i'th
元素将是2^ceil(log_2(N))+i
树[]的第th元素?@SazzadHissainKhan>:Yes@SazzadHissainKhan.:再次检查答案
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