对于树分治算法的初步理解
来源:互联网 发布:mac远程桌面连接工具 编辑:程序博客网 时间:2024/04/29 11:18
树分治是基于树上问题的一种处理问题的方式
它有非常巧妙地结构,,它利用的是树的 边等效 和点的无序性 对树进行离散,抽象维护等效路径 和 子树关系的神奇算法
分治树有非常好的性质,把一些树写成分治树是这样:
可以注意到原树的形态被离散,重新组合,但对于每一个被离散后的子树,改变的只是它的分治重心与父节点的关系,子树内的关系是不会改变的
怎么看出这种树对比与原树的优势?
首先遍历子树的复杂度就不一样,,例子如下:
树越奇怪左边的越大,差别越明显
对于分治树 由于每一个节点都要往下遍历子树,所以每层数*n 就是 O(nlogn)
而对于链 同样的操作,可以达到 O(n^2)的级别 (n+n-1+n-1+n-2+n-2.....)
但对于分治树而言,它牺牲了原来的结构来换取高速的结构,所以如果子树和父节点有路径关系,它就完了
所以,树的分治算法除了分治树、还有容斥;
对于孤立的子树,我们把子树所有的信息dfs一遍,都加起来,然后,再便利每个子节点,在原树的形态上减掉不合法的,这样就处理完了当前根节点的所有情况,
所有的其他子树就都是孤立的了,可以继续递归进行、
是一个常数比较大的o(nlogn)
对于每一个分治重心,进行n级别的运算、检验,复杂度如下:
所以树分治往往用于每个子树孤立部分的统计问题,,可以牺牲子树和根节点的关系来优化子树结构。
综上,树分治算法的核心为 树结构的优化
阅读全文
0 0
- 对于树分治算法的初步理解
- 对于SVN的初步理解
- 对于makefile的初步的理解
- 对于material design的初步理解
- 对于material design的初步理解
- Android 中 对于Adapter的初步理解
- 对于依赖注入的初步理解
- 对于子父组件的初步理解
- 对于servlet初步理解
- 对于KMP算法的理解
- 对于adaboost算法的理解
- 对于KMP算法的理解
- spfa算法的初步理解
- ios 对于UIView的动画的初步理解
- 对于子父组件的初步理解前奏
- 对于KMP算法的理解(Sunday)算法的理解
- 对于Mahout_“推荐算法”的初步认识(1)
- 对于Mahout__"推荐算法"的初步认识(2)
- java学习笔记(2)
- 自定义View——仿支付宝支付弹窗界面
- 关于SharedPreferences的一些用法
- 【微信开发】“你问我答”
- LCD和图像数据结构
- 对于树分治算法的初步理解
- 利用eclipse下的maven创建web项目链接
- duilib获取combo当前项tag简化
- CVE-2015-1641浅析-word类型混淆漏洞
- JAVA 攻城狮 第十七天
- CentOS 7.3安装详解
- 解决通常每个套接字地址(协议/网络地址/端口)只允许使用一次
- Git 和 Github 使用教程
- css