当前课程知识点:计算几何 > 08. Windowing Query > G. 1D-GRQ Using Heap > 08-G-04. Complexity
好 现在我们就来清点一下
刚才这个基于堆的
做grounded range search
算法的复杂度
我们来先看中间这一项
就是它的存储空间
我们宣称
只需要线性的空间
你能够看出来吗
是的 每一个元素
在这个堆中
都只被存放了一次
没有任何的重复
所以线性的元素
线性的空间
很正常
接下来 也就是我们最最看重的
那个查询时间query time
这部分消耗的时候有多少呢
我们来回顾一下刚才那个图
虽然我没有把它翻过去
我们刚刚讲过
那里头无非有三种颜色的点
蓝色的 红色的和绿色的
而且刚才我们已经很清楚的看到
在绿色的点处
我们是不花任何的时间的
所以所有的时间无非是
消耗在蓝色或者红色的部分
我们也看到
蓝色的部分是值得的
其实蓝色部分
其实就是你输出的那些元素
它们的总量如果是output size
我们用r来记的话
就是O(r)
那么红色的结点呢
表面看我们度量不住它
实际上这里有个很重要的一个性质
也就是一般来说
每一个红色被剪枝的点
其实它的父亲
必然都是蓝色的
难道不是吗
如果它的父亲不是蓝色的
没有曾经激活过
启动过一次递归
怎么会搜索到红色的部分去呢
当然我们这里所说的一般
只有一个是例外的
也就是在有的时候
你可能会很特别的情况下
直接在全堆的堆顶
就直接一上来就做一次剪枝
所以正因为这个
我们这里要额外的加一个1
除此之外所有的红色的点
都会有一个蓝父亲
好 我们正因为这样
我们就可以界定出
在一般的情况下
红色的点的数目不会
超过蓝色点的数目
或者再准确点讲
红色点的数目减掉1
绝对不会超过蓝色点的数目
好了 这说明什么呢
这说明我们刚才那个计算的总量
也就是红色和蓝色点的总和
也不会超过蓝色点的两倍
从渐近意义来讲
就可以用蓝色的点来度量
而蓝色的点
刚刚我们讲过
就是这个r, output size
这样的话
我们就得到了一个1
加上r的时间复杂度
这个时间复杂度
如果我们纵观一下前面
所介绍的来龙去脉的话
说明什么 意味着什么呢
你应该记得
如果我们是用一颗
中规中矩的BBST来组织它的话
你还记得
当时的时间复杂度是多少吗
对应的这个query time
没错 不是1+r
而是logn+r
我们无形中要多花一个logn
当然你可以认为那个logn
就是多余消耗在
它还是那样不够灵活的照方抓药的
那样的机械的去花logn时间
通过一些binary search
找到那个起点
而那个起点
在当前这种特定的问题下
是一成不变的
你不用再去搜索的
我们做的更好
把这样一个特殊性发挥出来了
而我们所用的工具是什么呢
无非是将原来的那样一棵BBST
替换成了这么样一个更为简明
更为实用的堆结构
当然 这里还有一个小小的题外话
虽然不是我们最看重的
但是也不妨提议一下
也就是我们所做的预处理
对于一个堆来说
这个预处理就来建堆
我们称之为
heapification
把若干个元素一旦给定以后
迅速将它组织为一个可以利用的堆
比如说 最小堆
这部分所需要的时间
如果你还不清楚的话
去可以看一看很多教材
比如说
邓老师在另一门课慕课数据结构中
已经对这个做过介绍
我这里把结论告诉你
也就是说任何一组总共n个元素
如果它可比较的话
我们就可以将它组织为一个堆
而为此我们所需要的时间
不是你常识上认为的O(nlogn)
而是线型O(n)
当然 好在之前我们刚才说的
这一部在这个问题中
我们不是很看重
而且确实对于这个问题来说
O(nlogn)也没有太大的区别
所以你也不必太过去在乎这个
当然从算法的完美性 完整性来讲
你还是有必要了解这个结论的
好 如果有必要
你不妨去补一补这方面的课
好 无论如何
我们这里最最重要的结论
当然还是在这个query time上
重复一遍
在将我们的BBST
替换成这里的heap之后
我们已经简明的
实现了一个1+r的
这么样一个时间效率
尽管这种时间效率
我们此前也看到过
通过一个最简单的对一个sorted vector
做一个linear scan
也可以做到
但是我们前面讲过
我们正是需要像刚才那样
把它整理成一个相对复杂一点的
这样的堆的结构
才可以使得我们这个方法
变得更加的强大和通用
这种通用性
我们接下来就会看到
它可以直接地拓展到
我们最最在意的二维的情况
平面的情况
我们原始的那个问题
-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