当前课程知识点:计算几何 > 08. Windowing Query > J. Segment Tree > 08-J-11. Constructing A Segment Tree
好 刚才我们已经看到
这种数据结构
确实是一种可用之才
因为我们已经看到
它可以很方便的
就将空间复杂度
从n^2降到nlogn
那么接下来我们
首先要解决的一个问题就是回答
这样的一种结构
究竟应该如何的来
构造出来呢
在这里我们就把整个
构造的过程形式化的描述出来
我们大致来说
这样的一个构造过程
分为两个步骤
第一首先我们要构建出
这样的一个树的结构
把这个架子搭出来
虽然它开始里头还是空的
接下来呢
我们再将这些线段
也就是我们输入的那些区间
一个一个的插进去
好
第一个问题如何来构造
这样的一棵树的结构呢
不要忘了
决定这棵树的主体框架的因素
其实就是那些叶子
或者更准确的讲
就是那些原始的区间
而原始的区间
是由谁来确定的呢
也不要忘了定义
就是由这些输入的区间
彼此相交或者准确的讲
由它们的那些端点来确定的
所以我们的第一步就是
要把这个输入线段集中的
所有的那些线段所对应的端点
找出来
然后完成一次排序
一旦完成了这个排序
我们已经得到了底层的
这些叶子结点的一个序列
接下来我们只需要
自底而上
逐层的将它们捉对的拼接起来
最终就可以得到
这么样一个树型的结构
当然在我们生成这样的
一棵树的同时
也不要忘了随手
为其中的每一个结点
不管是叶子结点
还是内部结点
都要按照我们刚才的那个定义
为它设置好
它对应的那个原始区间
虽然对于内部结点来说
这个原始区间的定义
实际上已经推广了
你应该知道
这件事应该怎么做
没错
刚才我们那个过程
既然本身就是自底而上的
而且我们前面讲过
每一个内部结点
它所对应的EI
其实都是它的左孩子和右孩子
对应的EI的一个并集
所以我们在逐层上升的过程中
要做的
无非就是把这些EI们
捉对的合并合并合并
合并起来
这个过程
和我们刚才这个树的
长高的过程是完全吻合的
所以我们这里不妨
就用一句话来告诉你
做这件事儿
需要注意的是
如果我们不计那个合并本身
在集合的操作
在数据结构操作上的成本以外
本身这件事情
无非是完成了n-1次的合并
所以它所需要耗费的时间
也确定的就是n的
好 至此我们基本上
把这个算法的第一步
给交代清楚了
接下来 来做第二步
我们要为其中的每一个结点
无论是底层的结点
还是任何的一个内部结点
为它们指定好
我们前面预设的那种正则子集
因为我们已经知道
这个正则子集
就是将来查询的过程中
拼凑出我们各种各样答案的
最基本的那个积木
原始的那种积木
好 这种的正则子集
又将如何的拼凑出来
不要着急
我们首先不妨将所有这些结点
所对应的那个正则子集
都一概的初始化为空集
接下来呢
正像我们刚才说的
我们要逐一的
把每一条线段都取出来
并且将它插入到
这棵树中去
首先让我们来通过
右侧的这个动画
形象的感受一下
插入的原理
我们知道
所谓的这样的插入
它最终的作用可以理解为
其实就是将任何一条
输入的interval
插到它所需要存放的
这些结点中去
作为这些结点
各自的正则子集的一部分
插到其中
其实我们这里所说的插入
从功效上讲
无非是要做这样一件事儿
也就是将每一条这样的interval
确定它究竟应该被分成几段
分成哪几段
而每一段按照刚才的定义
其实都是被它所包含的
一个极大的EI
那么这样的一个过程
我们刚才说的极大
是自底而上来定义的
其实我们不妨
变换一下视角
从另一个角度
也就是自上而下来看一下
我们假设这样的
每一条区间
就像天上的一个馅饼一样
它可能会掉下来
我们看看在它掉下来的时候
有可能像这样
它就会聪明的分解为
刚才我们所说的那样
一系列极大的
被它所包含的那样的EI
我们来看这种极大化
是怎么来保证的呢
比如说在它掉下来的时候
它首先会贪婪的 贪心的
尽可能的 想尽早的
停止下来
什么时候能停止下来呢
比如在这个过程中
这个就是它能够停止下来的
第一个位置
好 我们留意一下
在它掉下来的时候
它确实首先是停留在那个位置
其他的那部分呢
其实何尝又不是这样呢
我们可以看到
它们都是在自己
只要一旦能停下来的地方
都停下来
所以这张馅饼
确实在掉下来的过程中
只要我们处理的比较好
的确就可以这么掉下来
分成若干个碎片
分别的存放在
这个树的各层上
不要忘了按照我们刚才的分析
在任何一层上
最多会有两个碎片
其实既然这个
能够按照这种方式分
而且存放好
其他的那些有一个算一个
何尝又不是这样呢
无论是否还有第三 第四 第五
以及任意多个
所以我们的核心问题就是
如何将这样一种
天上掉馅饼的这样的模式
兑现为一个具体的
精确的可行的算法
-Before we start
--html
-Evaluation
--html
-Online Judge
--html
-Lecture notes
--html
-Discussion
--html
-A. History of This Course
--00-A. History of This Course
-B. What's Computational Geometry
--00-B. What's Computational Geometry
-B. What's Computational Geometry--作业
-C. How to Learn CG Better
--00-C. How to Learn CG Better
-C. How to Learn CG Better--作业
-D. Why English
-A. Convexity
-A. Convexity--作业
-B. Extreme Points
-B. Extreme Points--作业
-C. Extreme Edges
-C. Extreme Edges--作业
-D. Incremental Construction
--01-D-01. Decrease and Conquer
--01-D-02. In-Convex-Polygon Test
--01-D-03. Why Not Binary Search
-D. Incremental Construction--作业
-E. Jarvis March
--01-E-06. Lowest-Then-Leftmost
-E. Jarvis March--作业
-F. Lower Bound
--01-F-02. CAO Chong's Methodology
-F. Lower Bound--作业
-G. Graham Scan: Algorithm
-G. Graham Scan: Algorithm--作业
-H. Graham Scan: Example
-H. Graham Scan: Example--作业
-I. Graham Scan: Correctness
-I. Graham Scan: Correctness--作业
-J. Graham Scan: Analysis
-J. Graham Scan: Analysis--作业
-K. Divide-And-Conquer (1)
-K. Divide-And-Conquer (1)--作业
-L. Divide-And-Conquer (2)
--01-L-03. Topmost + Bottommost ?
--01-L-07. More Considerations
-L. Divide-And-Conquer (2)--作业
-M. Wrap-Up
-0. Introduction
-0. Introduction--作业
-A. Preliminary
-A. Preliminary--作业
-B. Interval Intersection Detection
-B. Interval Intersection Detection--作业
-C. Segment Intersection Reporting
-C. Segment Intersection Reporting--作业
-D. BO Algorithm: Strategy
--02-D-01. Proximity & Separability
--02-D-02. Comparability & Ordering
-D. BO Algorithm: Strategy--作业
-E. BO Algorithm: Implementation
--02-E-03. Events & Operations
-E. BO Algorithm: Implementation--作业
-F. BO Algorithm: Analysis
--02-F-04. Complexity of Event Queue
--02-F-05. Complexity of Status Structure
-F. BO Algorithm: Analysis--作业
-G. Convex Polygon Intersection Detection
--02-G-01. Problem Specification
--02-G-02. Monotone Partitioning
--02-G-04. Decrease-And-Conquer
-G. Convex Polygon Intersection Detection--作业
-H. Edge Chasing
--02-H-01. Eliminating Sickles
-H. Edge Chasing--作业
-I. Plane Sweeping
-I. Plane Sweeping--作业
-J. Halfplane Intersection Construction
-J. Halfplane Intersection Construction--作业
-0. Methodology
-0. Methodology--作业
-A. Art Gallery Problem
--03-A-02. Lower & Upper Bounds
--03-A-04. Approximation & Classification
-A. Art Gallery Problem--作业
-B. Art Gallery Theorem
--03-B-01. Necessity of floor(n/3)
--03-B-02. Sufficiency by Fan Decomposition
-B. Art Gallery Theorem--作业
-C. Fisk's Proof
--03-C-04. Pigeon-Hole Principle
-C. Fisk's Proof--作业
-D. Orthogonal Polygons
--03-D-01. Necessity of floor(n/4)
--03-D-02. Sufficiency by Convex Quadrilateralization
-D. Orthogonal Polygons--作业
-E. Triangulation
-E. Triangulation--作业
-F. Triangulating Monotone Polygons
--03-F-02. Monotonicity Testing
--03-F-04. Stack-Chain Consistency
-F. Triangulating Monotone Polygons--作业
-G. Monotone Decomposition
-G. Monotone Decomposition--作业
-I. Tetrahedralization
--03-I-01. Polyhedron Decomposition
--03-I-02. Schonhardt's Polyhedron
-I. Tetrahedralization--作业
-A. Introduction
--04-A-02. Dining Halls on Campus
--04-A-03. More Analogies & Applications
-A. Introduction--作业
-B. Terminologies
--04-B-02. Intersecting Halfspaces
--04-B-04. Planar Voronoi Diagram
-B. Terminologies--作业
-C. Properties
--04-C-03. Nearest = Concyclic
--04-C-04. Number of Nearest Sites = Degree
-C. Properties--作业
-D. Complexity
-D. Complexity--作业
-E. Representation
-E. Representation--作业
-F. DCEL
-F. DCEL--作业
-G. Hardness
--04-G-03. Voronoi Diagram In General Position
-G. Hardness--作业
-H. Sorted Sets
--04-H-01. Convex Hull Made Easier
--04-H-02. Convex Hull As A Combinatorial Structure
--04-H-03. Voronoi Diagram As A Geometric Structure
-H. Sorted Sets--作业
-I. VD_sorted
--04-I-06. Sorting Not Made Easier
-I. VD_sorted--作业
-J. Naive Construction
-J. Naive Construction--作业
-K. Incremental Construction
-K. Incremental Construction--作业
-L. Divide-And-Conquer
--04-L-09. Intersecting with Cells
-L. Divide-And-Conquer--作业
-M. Plane-Sweep
--04-M-09. Circle Event: What, When & Where
-M. Plane-Sweep--作业
-A. Point Set Triangulation
-A. Point Set Triangulation--作业
-B. Delaunay Triangulation
-B. Delaunay Triangulation--作业
-C. Properties
-C. Properties--作业
-D. Proximity Graph
--05-D-02. Relative Neighborhood Graph
-D. Proximity Graph--作业
-E. Euclidean Minimum Spanning Tree
-E. Euclidean Minimum Spanning Tree--作业
-F. Euclidean Traveling Salesman Problem
-G. Minimum Weighted Triangulation
-G. Minimum Weighted Triangulation--作业
-H. Construction
--05-H-03. Maximizing The Minimum Angle
--05-H-04. Evolution By Edge Flipping
-H. Construction--作业
-I. RIC With Example
-I. RIC With Example--作业
-J. Randomized Incremental Construction
--05-J-01. Recursive Implementation
--05-J-02. Iterative Implementation
-J. Randomized Incremental Construction--作业
-K. RIC Analysis
--05-K-04. Types Of Edge Change
--05-K-05. Number Of Edge Changes
--05-K-07. Number Of Rebucketings
--05-K-08. Probability For Rebucketing
--05-K-10. Further Consideration
-0. Online/Offline Algorithms
--06-0. Online/Offline Algorithms
-0. Online/Offline Algorithms--作业
-A. Introduction
--06-A-03. Assumptions For Clarity
--06-A-05. Performance Measurements
-A. Introduction--作业
-B. Slab Method
--06-B-02. Ordering Trapezoids
-B. Slab Method--作业
-C. Persistence
--06-C-01. Ephemeral Structure
--06-C-02. Persistent Structure
-C. Persistence--作业
-D. Path Copying
--06-D-03. Storage Optimization
-D. Path Copying--作业
-E. Node Copying
-E. Node Copying--作业
-F. Limited Node Copying
-G. Kirkpatrick Structure
--06-G-01. Optimal And Simpler
--06-G-06. The More The Better
--06-G-07. The Fewer The Better
--06-G-09. Existence Of Independent Subset
--06-G-10. Construction Of Independent Subset
-G. Kirkpatrick Structure--作业
-H. Trapezoidal Map
--06-H-03. Properties & Complexity
--06-H-04. Search Structure: Example
--06-H-05. Search Structure: Nodes
--06-H-06. Search Structure: Performance
-H. Trapezoidal Map--作业
-I. Constructing Trapezoidal Map
--06-I-04. Case 1: Two Endpoints
--06-I-05. Case 2: One Endpoint
--06-I-06. Case 3: No Endpoints
-J. Performance Of Trapezoidal Map
--06-J-03. Number Of Ray Trimmed
--06-J-04. Number Of Trapezoidals Created (1)
--06-J-05. Number Of Trapezoidals Created (2)
--06-J-06. Time For Point Location
--06-J-07. Size Of Search Structure
--06-J-08. Fixed Query Point + Randomly Created Maps
--06-J-10. Probability Of Enclosing Trapezoid Changed
-A. Range Query
--07-A-01. 1-Dimensional Range Query
-A. Range Query--作业
-B. BBST
--07-B-02. Lowest Common Ancestor
-B. BBST--作业
-C. kd-Tree: Structure
-C. kd-Tree: Structure--作业
-D. kd-Tree: Algorithm
-D. kd-Tree: Algorithm--作业
-E. kd-Tree: Performance
--07-E-01. Preprocessing Time + Storage
-E. kd-Tree: Performance--作业
-F. Range Tree: Structure
--07-F-03. x-Query * y-Queries
-F. Range Tree: Structure--作业
-G. Range Tree: Query
-G. Range Tree: Query--作业
-H. Range Tree: Performance
-H. Range Tree: Performance--作业
-I. Range Tree: Optimization
--07-I-04. Fractional Cascading
-A. Orthogonal Windowing Query
-A. Orthogonal Windowing Query--作业
-B. Stabbing Query
-C. Interval Tree: Construction
-C. Interval Tree: Construction--作业
-D. Interval Tree: Query
-D. Interval Tree: Query--作业
-E. Stabbing With A Segment
--08-E-03. Query Algorithm (1)
--08-E-04. Query Algorithm (2)
-F. Grounded Range Query
--08-F-03. 1D-GRQ Using Range Tree
--08-F-04. 1D-GRQ By Linear Scan
-G. 1D-GRQ Using Heap
-G. 1D-GRQ Using Heap--作业
-H. Priority Search Tree
--08-H-03. Sibling Partitioning
-H. Priority Search Tree--作业
-I. 2D-GRQ Using PST
-I. 2D-GRQ Using PST--作业
-J. Segment Tree
--08-J-01. General Windowing Query
--08-J-02. Elementary Interval
--08-J-06. Solving Stabbing Query
--08-J-11. Constructing A Segment Tree
--08-J-12. Inserting A Segment (1)
--08-J-13. Inserting A Segment (2)
--08-J-14. Inserting A Segment (3)
-K. Vertical Segment Stabbing Query