对于树分治算法的初步理解

        树分治是基于树上问题的一种处理问题的方式

        它有非常巧妙地结构,,它利用的是树的 边等效 和点的无序性 对树进行离散,抽象维护等效路径 和 子树关系的神奇算法

            分治树有非常好的性质,把一些树写成分治树是这样:


可以注意到原树的形态被离散,重新组合,但对于每一个被离散后的子树,改变的只是它的分治重心与父节点的关系,子树内的关系是不会改变的

怎么看出这种树对比与原树的优势?

首先遍历子树的复杂度就不一样,,例子如下:


树越奇怪左边的越大,差别越明显

对于分治树  由于每一个节点都要往下遍历子树,所以每层数*n 就是 O(nlogn)

而对于链    同样的操作,可以达到 O(n^2)的级别  (n+n-1+n-1+n-2+n-2.....)

但对于分治树而言,它牺牲了原来的结构来换取高速的结构,所以如果子树和父节点有路径关系,它就完了


所以,树的分治算法除了分治树、还有容斥;

对于孤立的子树,我们把子树所有的信息dfs一遍,都加起来,然后,再便利每个子节点,在原树的形态上减掉不合法的,这样就处理完了当前根节点的所有情况,

所有的其他子树就都是孤立的了,可以继续递归进行、

是一个常数比较大的o(nlogn)


对于每一个分治重心,进行n级别的运算、检验,复杂度如下:

对于树分治算法的初步理解_第1张图片












所以树分治往往用于每个子树孤立部分的统计问题,,可以牺牲子树和根节点的关系来优化子树结构。

综上,树分治算法的核心为  树结构的优化





你可能感兴趣的:(记录)