当前课程知识点:计算几何 > 07. Geometric Range Search > E. kd-Tree: Performance > 07-E-02. Query Time
那么对于kd树而言
稍微有些难度
也是非常有意思的
是对它的查询算法的时间复杂度的估计
我们先给出这里的结论
也就是说
对于kd树而言
它的每次查找
所需要的时间
其实是√n
如果算总体的话
当然还要包括消耗于
我们的逐点枚举的那个时间
也就是r
所以它的时间复杂度是O(r+√n)
我们姑且先不说这个数量是大
还是小
我们首先就觉得很奇怪
为什么是个√n
我们不妨来回顾一下
整个这样一个典型的查找过程
我们说整个的这个查找算法
就是在每一个层次上
比如说
对于这个层次上讲
就是这个若干个子区域
然后来对同一个这个query range
来做查找
总共无非三种情况
其中只有一种情况需要递归
另两种情况是不需要递归的
你还记得
没错
一种情况就是像这个一样
完全的落在外面
不需要递归
还有像中间的这个
完全的落在它的内部
也不需要递归
所以实际上
为这个算法的复杂度带来作用的
其实只有那样一些区域
也就是与这个带查询的这个范围的边界
相交的那些区域
比如它和它
只有在这些位置上
我们才必须要做递归
并且相应的花费时间
问题在于
如何来界定
从上一层到下一层
这个递归的分支数呢
我们知道在每一层
有两个分支
但是很遗憾
如果我们直接就这么分析的话
会非常的棘手
因为在某些层会有一个递归
有的层会有两个都递归
甚至有些层会连续的会
出现这种类似这种递归
那么前人已经为我们找到了
好的简明分析方法
这个分析方法就是
我们不要像常规的那些算法一样
逐层逐层的来分析它
而是顺应这种平面的二维的
这种kd树的特点
两层两层的来进行分析
所以我们经常要考虑的
不是一个节点
和它的两个孩子之间的关系
而是一个原来的节点
所对应的子区域
与它下属的四个孙辈的孙子节点的关系
不是一对二
而是一对四
我们现在只需要来回答这么样一个问题
对于此前的一个爷爷辈的
这样的一个节点而言
如果它的整个那个区域是整体
被在孙子辈分成了四块的话
那么在这四块中
有多少块会发生递归
请注意
发生递归的充要条件
其实就是与这个query range的边界
有交
很遗憾依然看不清楚
让我们再来做一次简化
和放大
我们不妨把目光关注于
这个query range的某一段边界
也就是它的四段边界
上下左右
边界中的一条
比如说这个上边的顶边
我们说如果能够把这条边上
所有发生的递归
能够估算出来
那么我们只需要乘一个4
就可以得到整体的时间复杂度
对不对
乘个4对于big O而言
是无关重要的
所以我们的确可以做这么样一次简化
接下来
这是一条线段
还是看的不是很清楚
我们不妨再把条件放宽一下
再做一次简化和放大
所以我们为进而将这一段边界
简化为这样的一条
经过它的或者它所在的那条直线
无限的直线
现在我们来反观刚才
属于同一个爷爷节点的
那四个孙子节点
我们来问一下
这样的同属于同一个爷爷的
四个孙子节点
会有几个与这条直线相交
从而存在递归的必要
答案是不超过两个
你可以自己来尝试一下
如果的确是来自于同一个爷爷节点
分出来的这样四个孙辈的区域的话
那么你用一条
或者是横平或者是竖直的直线
无论怎么去切割它
在任何的位置
你最多只能够切割到
其中的两个孙子节点
两个
这是非常重要的
一个观察结论
也是这个算法分析
打开它的大门的金钥匙
所以如果我们将在每一层中
所发生的递归的这样一个关系
写成这么一个递推式的话
我们就会发现
我们原来的
一个规模为n的问题
孙辈会被分成四个规模
分别为四分之n的问题
但是很幸运
我们即便在最坏的情况下
也不会在四个
或者哪怕在三个中
发生递归
刚才的分析已经告诉我们
我们最多只会在其中的两个节点
发生递归
而为此我们需要在这个过程中
下降两层
付出这么一个常数的时间代价
这个递推式
得到了以后
下面完全都是数学的工夫
我们说它的解
其实就是我们刚才所宣称的那个
√n
这个解的过程
如果你不是很熟悉的话
也不要紧
我们好在你可以验算
你可以把它big O去掉
当然前面要乘一个常系数
尾巴上要加一个常系数
构成一个一般的形式
然后把它带进去
可以验算
你可以解出刚才所假设的
那两个常系数
从而验证这个解
的确是√n
尽管刚才这样一个分析过程
颇具技术含量
但是它的结果
多少会令你觉得很沮丧
没错
我们刚才那个一维的版本的问题
大家要记住
在这个位置上
实际上对应的是logn
可是我们的kd树
把这个事情弄的那么复杂之后
所得到的结果居然是√n
√n是什么
√n是n的二分之一次方
我们知道
这两者之间
在渐进意义上讲
是根本没法比的
因为logn
别说是二分之一了
它比任何的一个n的若干次
正数次方
哪怕是0.00001都要渐进的更小
所以从这个意义上讲
我们这个算法的效率
非常的低下很糟糕
然而更糟糕的还不止一次
其实你完全可以构造出
这样的例子
来证明刚才我们这样√n的估计
其实不是过于悲观的
完全是可能在实际中遇到的
你不妨在课后来做一个尝试
自己独立的来造出这么样一个最糟糕的例子
如果你经过很长的时间
还百思不得其解的话
不妨可以看一看
邓老师的数据结构课程
所配套的那个习题集
在其中就给出了这么样一个
真实的例子
-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