- Algorithm
- Incremental Method
- Simulation
- Backtracking
- Dynamic Programming
- Largest Empty Interval
- Location Allocation Problem
- Knapsack Problem
- Algorithm Analysis
- Data
- Sort
- Set
- 排序资料结构: Search Tree 系列
- Sequence 资料结构: Array / List
- 大量 Point 资料结构: k-Dimensional Tree
- Region 资料结构: Uniform Grid
- Graph
- Tree 资料结构: Heavy-Light Decomposition
- Graph Spectrum(Under Construction!)
- Tree
- Binary Tree
- Directed Acyclic Graph
- Articulation Vertex / Bridge
- Reachability
- Bipartite Graph
- Clique(Under Construction!)
- Planar Graph
- Path
- Single Source Shortest Paths: Label Correcting Algorithm
- Shortest Walk
- Cycle
- Spanning Tree
- s-t Flow
- Feasible s-t Flow
- Cut
- Matching
- T-Join
- Hamilton Circuit
- Domination
- Coloring
- Labeling
- Vector Product
- Sweep Line
- Rectangle
- Rectangle
- Polygon
- Convex Hull
- 3D Convex Hull(Under Construction!)
- Half-plane Intersection
- Voronoi Diagram
- Triangulation
- Metric
- Number
- Sequence
- Function (ℝ)
- Matrix
- Root Finding
- Linear Equations
- Functional Equation
- Optimization
- Interpolation
- Curve
- Regression
- Estimation
- Clustering
- Transformation(Under Construction!)
- Wave (ℝ)
- Representation
- Signal
- State(Under Construction!)
- Markov Chain
- System(Under Construction!)
- Markov Model
- Function
- Gray Code
- Base
- Divisor
- Prime
- Residue
- Lattice
- Series(Under Construction!)
- Average Number
- Nim
- String
- Longest Increasing Subsequence
- Longest Common Subsequence
- Approximate String Matching
- String Matching
- String Matching
- String Matching: Inverted Index
- Count Substrings
- Palindrome
- Language
- Code
- Compression
- Correction
- Encryption
- Transmission
- Data
- Text
- 2D Graphics
- Audio
- Audition(Under Construction!)
- Image
- Vision(Under Construction!)
- Model
- Motion(Under Construction!)
- Camera(Under Construction!)
- Glass(Under Construction!)
- Computer
- Physics
- Biology
- Medicine
- Finance
- Education
- Standard Library
Tree 资料结构: Heavy-Light Decomposition
Heavy-Light Decomposition
想查询一棵树上任意一条路径的权重,直觉就得到一个 O(V) 方法,最差情况是这棵树恰为一条长链。
长链有很棒的资料结构。只要找出树上所有长链,每条长链套用伪线段树、BIT、Sparse Table、BST、Heap,就能降低时间複杂度。
找长链怎麽找呢?先用一次 Graph Traversal 算出每棵子树有多少节点。然后,树上每个节点各自连向最大的子树。最后,自然形成了链,树上每个节点都隶属于某条链。
这种分割一棵树成为数条链的手法,称作“重轻分解”。中文网路上意译为“树链剖分”。
由根往叶走,一旦遭遇新链,新链子树小于等于原链子树,剩下的节点数量不到一半,沿途最多遇到 logV 条链。一条路径藉由 LCA 拆成两段,沿途最多遇到 2logV 条链。
时间複杂度
一条链最多 V 个点,一条链实施区间查询为 O(logV)。一棵树最多 V 条链,但是一条路径最多只遇到 2logV 条链、实施 2logV 次区间查询。
树链剖分为 O(V),建立所有长链们的资料结构为 O(VlogV),查询 LCA 为 O(logV),查询一条路径为 O((logV)^2)。
Timus 1553 Sphere QTREE ICPC 4960 UVa 12424
Dynamic Trees 资料结构: Link-Cut Tree
Link-Cut Tree
http://compgeom.cs.uiuc.edu/~jeffe/teaching/datastructures/2006/notes/07-linkcut.pdf http://courses.csail.mit.edu/6.851/spring07/scribe/lec04.pdf http://wenku.baidu.com/view/75906f160b4e767f5acfcedb.html http://hlworld.diandian.com/post/2012-03-26/17452276 http://www.shuizilong.com/house/archives/tag/动态树/
一、静态树:甲、一棵无向树。 乙、更新一个点(边) 的数值。 丙、查询一条路径的最大值、最小值、总和、相异数字数量、......。 二、动态树:丁、一棵树,砍断一条边,变成两棵树。 戊、两棵树,增加一条边,接成一棵树。 动态树部分,由于长链可能会被切断的,所以“树链剖分”就没搞头了。 就只能老老实实的用 Link-Cut Tree 了。
http://hi.baidu.com/yy17yy/item/465649279358993395f62b59 改变树根位置的 link-cut tree 反转所有原树根到新树根 x 的边 先 access(x),此时 x 会是 splay tree 的树根, 然后颠倒整棵 splay tree 的左右小孩即可 运用反转标记就简单多了 改变树根位置之后 就可以简单的得到一条路径 ab:先 makeroot(a)、然后 access(b) 即可。
UVa 11994
Tree 资料结构: Euler Tour Technique
Euler Tour Technique
想查询一棵树上任意一条路径的权重,直觉就得到一个 O(V) 方法,最差情况是这棵树恰为一条长链。
长链有很棒的资料结构,只要套用伪线段树、BIT、Sparse Table、BST、Heap,就能降低时间複杂度。
树一般不是长链,那麽要怎麽把树变成长链?树根为起点,实施 DFS,依照遍历顺序,列出每一条边(点)的权重,得到一条数列,长度为 2E:正向经过边,列出原权重;反向经过边,列出加了负号的权重。
运用前述的资料结构储存此数列。树上一条由浅到深的路径的权重,即是区间和:参照节点的遍历顺序,较浅节点的首度拜访时刻,作为区间左边界;较深节点的首度拜访时刻减一,作为区间右边界。从路径分枝出去的多馀子树,在区间和之中出现两次、正负相消,最后刚好剩下路径的权重。
想要查询任意一条路径的权重,就从 LCA 切断路径,得到两条路径,都是由浅到深。两条路径分头计算区间和,再相加,即是原路径的权重。
时间複杂度
DFS 为 O(V),建立长链的资料结构为 O(VlogV),查询 LCA 为 O(logV),查询一条路径为 O(logV)。
Heavy-Light Decomposition
遍历时,优先走向最大的子树。所有长链皆是连续区间。
Dynamic Graph 资料结构: Euler Tour Tree
Euler Tour Tree
http://resources.mpi-inf.mpg.de/departments/d1/teaching/ss12/AdvancedGraphAlgorithms/Slides08.pdf
http://resources.mpi-inf.mpg.de/departments/d1/teaching/ss12/AdvancedGraphAlgorithms/Slides09.pdf
UVa 11998
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论