摘要:
前言:关于区间最值问题的求解,我们一般采用线段树来维护区间最值,得到了O(NlogN)的算法。但对于区间第k值问题,我们应该如何解决呢?本文将介绍一种基于线段树思想衍生出来的新结构——划分树,来解决这个问题。1 划分树 其实,划分树和线段树的区别并不大,可以归纳为两点: 1.1 划分树每一个区间[L,R]维护的是一个一维数组[L..R]。 1.2 划分树每一个根结点[L,R]中前[(R-L+1)/2]小的点组成左子树,后[(R-L+1)/2]大的点组成右子树。2 划分树求区间k值 我们首先修改一下思考方式,原问题变成在已经sorted的数列中找出第k个在区间[s,t]中的数字。 先给... 阅读全文
摘要:
维基百科介绍:http://en.wikipedia.org/wiki/Kdtree KD树是一种能在 O(N)时间内把平面划分成若干个区域,然后在均摊 O(logN)的时间内找到某个区域内所有点的数据结构。其思想是,每次把当前处理的区域按照点数分成两部分,然后对两部分进行递归处理。。。分成两部分有两种策略: 一种是横着竖着横着竖着交替划分。。 一种是把坐标跨度大的那一维划分成两部分。似乎没什么影响。上图是一种可行的划分方式。每次找到当前处理点集中的中点,以这个中点为分界线把区间划分成两部分和。注意中点是作为分界线不参与下一轮处理。查询一个点的最近点时,首先令最近距离为,然后在KD树中查... 阅读全文