当前课程知识点:计算几何 > 08. Windowing Query > D. Interval Tree: Query > 08-D-01. Algorithm (1)
好 我现在就来看看如何的
具体的利用刚才我们说的
interval tree来回答
stabbing query
我们的interval tree的查找算法
可以形式化的描述如此
我们来看一下它有两个参数
其中第一个参数v
表示的就是当前这棵子树的树根
因为这个算法是递归实现的
我们假设它查到了
以v为根的这样一个子树
当然总体而言
我们查询的这个依据也就是
那个stabbing的那个位置
依然是叫做q_x
在这个图中
我们可以来看一下
这个v所对应的那个
S_mid
应该就是它
它所对应的那个原来那个
median切分点
就应该是这个位置
如果不是一般性的话
那么它所对应的那个
S_left和S_right那两个的集合
将会递归的
其实不是将
而是已经递归的存放在
它对应那些后代中了
好 大致来说
就是这么样一个结局
那么我们在这个时候
所进行查询的那个
stabbing那个位置
是由这个q_x来确定的
一般来说是在这
我们当然其实有3种情况
就像我们待会代码中所预料的那样
有的会切在
S_mid的左边
也有可能会像现在这样
切在S_mid的右边
当然还有一种几乎是
零概率的事件
就是正好
恰好就切在S_mid这块儿
当然在如果是
整数的坐标的话
这个概率还会稍微大一些
但如果是浮点数的话
这个概率其实很小
无论如何
我们说无非就这3种情况
好 现在回到我们的代码
我们来看一下这3种情况
分别是如何判断和处理的
这个条件你应该看得懂
其实说的就是这个
查询的位置q_x
在median的左侧的情况
和这个图正好对称
我们不妨把它放过去
我们来看else if
那种情况
这个情况和我们现在的
这个例子恰好是对应的
查询的那个位置
在我们原来构造这个数
所使用的那个
median的右侧
前一类的情况跟他处理
完全是对称的
好 我们来看这里要做的事情
无非是两步
一步是实在的
另一步实际上本身就是
一个递归
我们来看第一步
我们要将刚才预先存放在
这个S_mid
中的那些interval
做一个筛选
从中取出来的那些确实
包含了这个q_x的
或者说与这条假想的直线
穿刺过去的有交的那些interval
怎么来做到这一条呢
我们来看这里的注释
这里注释是说
by a scan of L_right(v)
什么意思呢
在这个时候不要忘了
我们原来有两个lists
其中一个list
就是对于这个所有的右端点的
这个算法建议我们说
你确实可以从S_mid中
找出所有那些与q_x相交的
那些interval
怎么找出他们来呢
怎么快速的便捷的
高效的找出他们来呢
他说你只要把那个
right list
取出来就够了
不要忘了他是预先已经存好的
然后做一个
linear scan
顺次地来查询一遍
就能够找出他们
就能够从中
从S_mid中分拣出这些interval
我们看一下这个局部
也就说为什么在这里
我们只需要对这个
R list做一次
linear scan就能够
找出其中的那些与q_x
相交的那些intervals
不要忘了
S_mid
是怎么定义的
你应该记得
所谓的S_mid
就是在当前所有的这些中
与最初我们
切分的时候那个median
相交的那些intervals
所以你可以想象一下
虽然我们这里没有画出来
这其中的任何的一条interval
都至少会和这个
median相交的
也就说他的左端点必然位于左边
右端点位于他的右边
所以他们如果要和这个q_x相交的话
充要的条件就是
他们的右端点要跑到q_x的右边
只要他们右端点在q_x的右边
比q_x大就可以了
他们的左端点既然已经小于
这个median
自然的在这种位置关系下
也会小于q_x
所以一左一右
不就必然相交吗
好 记住这一条
充要条件其实就是判断
这其中的所有的interval
他们的右端点是不是足够靠右
以至于在q_x的右边比q_x大
准确的讲
那么我们刚才说的
linear scan
其实就是从外到内
我们前面讲过
就是按照它们的右端点的x坐标
由大到小不断的递减这么下来的
所以如果要有的话
最大的那个肯定就是
如果没有的话
最大的那个也肯定不是
所以我们不妨找到最大的那个
如果他不是我们算法
立即可以终止
你们其他的都不用考虑了
如果他还是
我们不妨把他打印出来
然后接下来再去考虑下一个
次小的那个右端点
他是不是依然足够大呢
在他的右边呢
如果他还是
我们依然把它打印出来
再去看第三大的以至第四大
一直下去
你现在应该大概知道这个过程了
是的 这个过程将持续进行下去
直到我们最终在第一次越过了
这个q_x这个位置的这个时候
在此之前我们所报告的
必然都是需要我们报告的
而在此之后我们没有报告的呢
也必然都是不需要报告的
请注意这样一个查找过程的特点
我们待会儿还会回到这一条
-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