当前课程知识点:计算几何 > 07. Geometric Range Search > C. kd-Tree: Structure > 07-C-02. Example
接下来
我们就来通过一个具体的实例
来看一看
如何针对于任何一个特定的点集
对整个平面
或者说这个点集来进行有效的划分
并且随着这个划分的过程
如何来生成和构造
一个对应的数据结构
也就是我们刚才所说的
那棵平衡二叉搜索树
作为一个简化的例子
我们这里不妨考虑在平面上
这样A B C D E F G
这样的七个点
首先按照我们刚才的说法
需要在这个树的底层
针对于每一个点
相应的配置一个叶子节点
所以A B C D E F G
分别的也对应于七个叶子节点
首先我们不妨来做一次垂直方向的切分
请记住我们这里同样要遵守
一个通常的遵守的一个原则
每次切分都尽量的平均
均匀
所以我们不妨来取其中的
那个中位数
median
我们一眼看过去
可以发现沿着x方向
这七个居中的那个点
应该就是这个C
当然这样的一次
对整个平面的第一次切分
在这棵树中对应的
也就是它的根节点
我们讲了
这个根节点所对应的那个切分
就应该是通过全局的这个median
C这个位置上的数值的一个切分
经过这样的一个切分以后
情况大概是这样的
我们会得到两棵隐性的
现在还没有完全构造出来的子树
它们分别对于这个平面的左半部分
和右半部分
相应的原来那个输入点集
也就因此会被分成两个部分
比如对这里而言的
G B A C左侧的这四个点
将来就会归属于左侧的这棵子树
互补的F E D那三个点
就应该归属于右侧的这棵子树
虽然现在它们两者都还没有被
完整的构造出来
不要紧
我们递归下去
那么好首先来关注左侧的这棵
还没有构造出来的子树
也就是在这个平面而言
左侧的这一半
对于这一半
我们依然要去做划分
请注意不同的是
这次我们或许要改变一个方向了
刚才我们用的是垂直的方向
而接下来这次
我们将希望沿着水平的方向
将左侧的这个空间
分解为上边和上边的两个子部分
具体应该在哪切分
你应该记起来
我们刚才所讲过的那个统一的原则
都要在对应的中位数的位置上
既然我们这里是沿着水平方向
来切分
那么这里的中位数
就应该相对于高度而言
来定义
所以放眼看去
中位数自然应该是这个顶点B
因此接下来
我们的确就会以B这个点为界
沿着水平方向
将左侧的这个半空间
分为上和下
两部分
我们可以看到
刚才这个左侧的子树又向前生长了
具体来说
它的左右
也就是在这个空间中的下和上
已经初步的具有模型了
我们可以看到
在这个划分之后
G和B作为这棵子树的左部分
已经被界定出来了
相应它的互补的A和C
也就是上面那半部分
也被界定出来
我们可以按照同样的策略
来处理刚才遗留下来的
右侧那个半平面
也就是在数据结构来讲
对于整个全树的那样一棵右子树
怎么来继续的构造它
使之生长
划分
而且同样的我们这里依然会使用
水平的一条线
使之分为接近均衡的上下两部分
同样我们这里也要用中位数
放眼望去
D F E这三个点
在高度意义上的中位数
肯定应该是F
所以正因为如此
我们就需要通过经过F这样一条
水平的直线
将右侧的那个半平面
继续的分解为下边和上边的
两部分
分别在这棵树就对应于
原来这个右子树的左子树
和右子树
需要强调的是
我们刚才约定过
任何的一个区间
从高度来讲
都是顶边是封闭的
底边是开放的
所以中间骑墙的这个元素
F就应该归属于下方
与E同时属于
我们现在还没有构造出来的
这棵右子树的左子树
所以当然这个时候
作为它的互补的部分
也就是孤零零的
唯一剩下的那个顶点D
在这里已经没有必要
继续递归下去了
所以我们可以直接引入一条边
生成这棵完整的右子树的右子树
整个的在这样的位置上
分支上的递归结束了
接下来我们依然按照刚才的策略
来处理再下一层的这些递归构造
接下来该轮到谁了
该轮到G和B
也就是左子树的左子树的
左右子树的划分了
这边这两个点
我们接下来依然要做一次划分
请注意这时候我们又要
再一次的翻转我们划分的方向了
如果第一轮是垂直
第二轮是水平的话
这样在第三个层次
新的一轮划分
我们又将重新使用
垂直方向的切分
相应的我们也应该使用的是
沿着X轴的所有的那些中位数
对于这个G和B而言
它们的中位数也自然的
应该就是G
所以我们这个时候
应该通过引入经过G的一条垂线
将左下角这个区域
进而的分为左右两个部分
在这个树中
也就对应的是左子树和右子树
我们这个时候可以看到
无论是左子树和右子树
现在只剩下各自的一个点了
所以我们可以直接将它们连接起来
递归也就在这两个位置上
也会终止
我们也可以说
整个这棵树在这两个分支上
已经完成了生长
可以停止了
但是故事并没有完
因为我们还有其他的几个区域
也需要划分
还有谁
我们可以看到
A和C所对应的整体的这个
左上角的这个部分
还没有划分到极致
我们再来演练一遍
同样在AC之间
我们要找到沿着横向
x意义上的那个median
谁呢
A
所以我们应该通过在A这个位置上的
一条垂直线
进而将左上角这个区域
也分为左右两个部分
相应的在这个位置上
A和C也会各就各位
构成刚才5号这条线
所对应的左和右子树
虽然它们这时候也同样到达了
递归的终点
最后作为演示
我们不妨完整的
在把最后这一步给出来
也就是对于F和E
所对应这个原来的右下角的这个区间
同样再一次的我们要用x意义上
那个中位数
这个时候你应该很熟了
没错
就是F
我们要经过F那个点
引入一条垂线
将这个区域一分为二
相应的F和E
也就自然的各就各位
构成了6号分割线的左和右子树
同样因为它们的规模
已经缩减到了平凡的情况
递归也在这个位置上截止
至此我们不仅在空间上
完成了这么样一个递归的划分
而且与此同时
我们也构造出了这样一棵树
我们现在来回顾一下
这棵树是不是像我们所预期的那样
能够反映这样的一个划分呢
它又有哪些特点呢
是的
这样的一个数据结构
的确可以反映我们刚才
对整个这个平面所做的这样的划分
因为在这棵树中
每一个顶点
无论是叶子
还是内部顶点
的确都对应于刚才划分出来的
某一个区间
只不过每一个叶子节点
对应的都是整个这个划分中
颗粒度最小的一个区域
而每一个内部节点呢
对应的区域
有可能是这些
基本的区域的合并之后的结果
但是无论如何
它们依然是对应于一个矩形的区间
当然最最特殊的是
这个根节点
它所对应的是
整个这个平面
-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