美文网首页
kd-tree模板

kd-tree模板

作者: 失树 | 来源:发表于2017-11-20 11:52 被阅读0次
struct Node{int d[2],mi[2],ma[2],ch[2];}p[N<<1],now;
int n,m,D,cnt,root,ans;
inline int cmp(Node a,Node b){return a.d[D]<b.d[D];}
inline void push_up(int o){
    p[o].mi[0]=min(p[o].d[0],min(p[lc].mi[0],p[rc].mi[0]));
    p[o].mi[1]=min(p[o].d[1],min(p[lc].mi[1],p[rc].mi[1]));
    p[o].ma[0]=max(p[o].d[0],max(p[lc].ma[0],p[rc].ma[0]));
    p[o].ma[1]=max(p[o].d[1],max(p[lc].ma[1],p[rc].ma[1]));
}
inline int dis(Node a,Node b){return fabs(a.d[0]-b.d[0])+fabs(a.d[1]-b.d[1]);}
void Build(int &o,int l,int r,int d){
    D=d,o=(l+r)>>1;nth_element(p+l,p+o,p+r+1,cmp);
//  for(int i=1;i<=n;i++) printf("%d %d\n",p[i].d[0],p[i].d[1]);
    if(l<o) Build(lc,l,o-1,d^1);if(r>o) Build(rc,o+1,r,d^1);
    push_up(o);
}
void insert(int &o,int d){
    if(!o) o=++cnt,p[o]=now;
    else if(now.d[d]<p[o].d[d]) insert(lc,d^1);
    else insert(rc,d^1);
    push_up(o);
}
int Calc(int o){
    return max(p[o].mi[0]-now.d[0],0)+max(now.d[0]-p[o].ma[0],0)+
            max(p[o].mi[1]-now.d[1],0)+max(now.d[1]-p[o].ma[1],0);
}
void Query(int o){
    if(!o) return;
    ans=min(ans,dis(p[o],now));
    int ll=INF,rr=INF;
    if(lc) ll=Calc(lc);if(rc) rr=Calc(rc);
    if(ll<rr){
        if(ll<ans) Query(lc);
        if(rr<ans) Query(rc);
    }
    else{
        if(rr<ans) Query(rc);
        if(ll<ans) Query(lc);
    }
}

转自BeiYu-oi's Blog

相关文章

  • kd-tree模板

    转自BeiYu-oi's Blog

  • KD-Tree

    KD-Tree 算法总结 KD-Tree 是什么 简而言之,KD-Tree是一种能维护高维数据空间的结构,主要支持...

  • Scala实现:KD-Tree(k-dimensional tr

    Scala实现:KD-Tree(k-dimensional tree) kd-tree是一种分割k维数据空间的数据...

  • 算法与数据结构网址备忘

    kd-tree算法原理与开源代码实现 详解kd-tree 动态规划入门篇 动态规划进阶篇

  • 最近邻查找算法KDtree

    根据两篇博文实现的KD-tree。k-d tree算法原理及实现,最近邻查找算法kd-tree。

  • kd树

    Kd-Tree,即K-dimensional tree,是一种高维索引树形数据结构,常用于在大规模的高维数据空间进...

  • kd树总结

    Kd-Tree,即K-dimensional tree,是一种高维索引树形数据结构,常用于在大规模的高维数据空间进...

  • 2 Kd树的构造与搜索

    1 KD-Tree 实现kNN算法时,最简单的实现方法就是线性扫描,正如我们上一章节内容介绍的一样->K近邻算法,...

  • 领导力培训和发展行业的电子学习模板

    模板一: 模板二: 模板三: 模板四: 模板五: 模板六: 模板七: 模板八: 模板九: 模板十: 模板十一: 模...

  • KD-Tree 算法的 C++ 实现

    阅读本文前,建议查阅相关资料,了解 KNN 算法与 KD 树。 基础知识 如图所示,假设一个点 a 目前的最近邻点...

网友评论

      本文标题:kd-tree模板

      本文链接:https://www.haomeiwen.com/subject/hxqvvxtx.html