Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 段树数据位置到树位置的关系_Algorithm_Binary Tree_Divide And Conquer - Fatal编程技术网

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