今天(18.5.4)室友A突然问我算法怎么入门,兴奋之下给他安利了邓公的《数据结构》,然而他接着又问我能不能两周内快速入门,毕竟打算搞Machine Learning,然后掏出手机看了下他老师给的安排:python学习并实现K近邻算法/决策树/朴素XXX/支持向量机(???),两周内,四选一

原来是以为我学的算法是差不多这样的才来请教,我懂个π啊

不过说回来10个月前我还是摸了一把KD树,K近邻什么的我应该还记得,特写此文回忆一下并督促自己做题更新

//以下文本均无代码实现
//以后会更新补上
//吧

K近邻依靠的数据结构:KD树

简单的说就是扩展的K维度的二叉树,树中每个节点既代表一个实际的点又代表一个切割空间的超平面,那么我们需要直到它是具体怎么表达空间的

具体的实现要点

在KD树中,每一层节点的比较都是单独对某一维度作为key来比较,小则往左子树走,大则往右子树走.ACM中,为了省事,对于维度选择是每一层就直接更新到下一个维度比较,往复循环,比如\(K=3\)时就是\(x→y→z→x\)的遍历方法

别忘了KD树中的节点是要记录当前实际的点的,为了平衡我们选择的点是当前子树未划分空间存在的点的中值(按当前维度比较)

常见操作

①插入:像普通BST那样,只是比较过程变成了不断变换的\(K\)个维度,每次只比较一个维度

②查询:如果是查询\(P\)的最近点,从根开始,设\(ans\)为\(INF\),比较左右子树的距离大小,先往小的\(dfs\),递归完再搜大的一侧(前提是\(dis\)比当前\(ans\)更优),就是说如果与所作的圆没有交点则剪枝不再递归(曼哈顿距离的话就是矩形最小边距).\(K\)近邻的话再维护一个\(size\)为\(K\)的大根堆即可

③删除:(不存在的)打标记维护

维护

还没有接触到什么题型,点太多容易把树建歪就控制平衡因子偶尔暴力重构

目前来看似乎确实是个非常简单的\(DSA\)
但还可以实现
范围计数/合并/可持久化
剩下的边做题边补
习题:BZOJ 3815/3489/3065

KD树的极简单笔记(待后续更新)的更多相关文章

  1. 个人linux简单笔记,随时更新

    vim显示行数 :set nu 查找文件 find /home -name config.txt 重命名文件或者文件夹 mv a b centos中phpize的安装 yum install php- ...

  2. 02-17 kd树

    目录 kd树 一.kd树学习目标 二.kd树引入 三.kd树详解 3.1 构造kd树 3.1.1 示例 3.2 kd树搜索 3.2.1 示例 四.kd树流程 4.1 输入 4.2 输出 4.3 流程 ...

  3. PBRT笔记(3)——KD树

    茎节点与叶子节点 茎节点与叶子节点皆适用KdAccelNode来表示 注意:这里使用了匿名union union有个特性:内部类型共用一段内存,且大小为内部最大类型的大小. struct KdAcce ...

  4. 从K近邻算法谈到KD树、SIFT+BBF算法

    转自 http://blog.csdn.net/v_july_v/article/details/8203674 ,感谢july的辛勤劳动 前言 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章 ...

  5. KD树小结

    很久之前我就想过怎么快速在二维平面上查找一个区域的信息,思考许久无果,只能想到几种优秀一点的暴力. Kd树就是干上面那件事的. 别的不多说,赶紧把自己的理解写下来,免得凉了. KD树的组成 以维护k维 ...

  6. 从K近邻算法、距离度量谈到KD树、SIFT+BBF算法

    转载自:http://blog.csdn.net/v_july_v/article/details/8203674/ 从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 前言 前两日,在微博上说: ...

  7. 空间划分的数据结构(网格/四叉树/八叉树/BSP树/k-d树/BVH/自定义划分)

    目录 网格 (Grid) 网格的应用 四叉树/八叉树 (Quadtree/Octree) 四叉树/八叉树的应用 BSP树 (Binary Space Partitioning Tree) 判断点在平面 ...

  8. 一看就懂的K近邻算法(KNN),K-D树,并实现手写数字识别!

    1. 什么是KNN 1.1 KNN的通俗解释 何谓K近邻算法,即K-Nearest Neighbor algorithm,简称KNN算法,单从名字来猜想,可以简单粗暴的认为是:K个最近的邻居,当K=1 ...

  9. 2021.07.09 K-D树

    2021.07.09 K-D树 前置知识 1.二叉搜索树 2.总是很长的替罪羊树 K-D树 建树 K-D树具有二叉搜索树的形态,对于每一个分类标准,小于标准的节点在父节点左边,大于标准的节点在父节点右 ...

随机推荐

  1. 414. Third Maximum Number数组中第三大的数字

    [抄题]: Given a non-empty array of integers, return the third maximum number in this array. If it does ...

  2. 665. Non-decreasing Array只允许修改一位数的非递减数组

    [抄题]: Given an array with n integers, your task is to check if it could become non-decreasing by mod ...

  3. Linux yum失败解决

    Linux yum失败解决 问题: 在CentOS 5.5中需要使用yum安装程序,出现错误: There was a problem importing one of the Python modu ...

  4. Solidity智能合约升级解决方案

    https://blog.zeppelin.solutions/proxy-libraries-in-solidity-79fbe4b970fd

  5. xamarin.droid自己的示例工程有些都装不上模拟器,是因为它的architectures选项没设对

    也许是版本更迭导致的,有些老工程的architectures不对,如果x86不勾的话,是不能在genymotion的模拟器上跑的.

  6. java容器 Map Set List

    容器:在java中,如果有一个类专门用来存放其他类的对象,这个类就叫做容器,或者叫集合,集合就是将若干性质相同或者相近的类的对象组合在一起而形成一个整体. boolean add(Object obj ...

  7. CF519E A and B and Lecture Rooms

    最近很颓……难题想不动……水题写不对,NOIP怕是

  8. python文件处理os模块

    一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.(一语中的) 二.常用方法 1.os.name 输出字符串指示正在使用的平台 ...

  9. python,itertools模块

    itertools模块的使用: # coding=utf-8 """ itertools模块 """ import itertools im ...

  10. Discrete cosine transform(离散余弦转换)

    A discrete cosine transform (DCT) expresses a finite sequence of data points in terms of a sum of co ...