今天(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. solidity mapping of mapping

    solidity mapping of mapping,两层映射,用的时候可以像二维数组一样去访问和修改值,非常方便. 以下代码示例中的这一句: mapping(string => mappin ...

  2. 997D Cycles in product

    传送门 题目大意 https://www.luogu.org/problemnew/show/CF997D 分析 我们发现两棵树互不相关 于是我们可以分别求出两棵树的信息 我们点分,人啊按后设f[i] ...

  3. Flask框架 之 wtforms

    简介 WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 作用 生成HTML标签 form表单验证 使用 - 用户登录示例- 用户注册示例- 数据库获取数据实时更新 ...

  4. Tarjan算法求出强连通分量(包含若干个节点)

    [功能] Tarjan算法的用途之一是,求一个有向图G=(V,E)里极大强连通分量.强连通分量是指有向图G里顶点间能互相到达的子图.而如果一个强连通分量已经没有被其它强通分量完全包含的话,那么这个强连 ...

  5. _AppStart.cshtml 和 _PageStart.cshtml的妙用

    Customizing Site-Wide Behavior for ASP.NET Web Pages (Razor) Sites By Tom FitzMacken|February 17, 20 ...

  6. C# JSON使用的常用技巧(二)

    JSON在php里一句json_encode就可以得到 在C#里我们同样也很容易的可以得到 用到的类库:Newtonsoft.Json.dll 实体类: class Cat { public stri ...

  7. WPF 控件库——仿制Chrome的ColorPicker

    WPF 控件库系列博文地址: WPF 控件库——仿制Chrome的ColorPicker WPF 控件库——仿制Windows10的进度条 WPF 控件库——轮播控件 WPF 控件库——带有惯性的Sc ...

  8. Task async await

    暇之余,究多Task.async.await. using System; using System.Collections.Generic; using System.Linq; using Sys ...

  9. WinForm中的重绘 - 文本的重绘

    两种方式 TextRenderer.DrawText 注意:默认在每次绘制的文本左右有padding,即使参数中设置了TextFormatFlags.NoPadding也是一样,因此在分段绘制文本时( ...

  10. intellij idea 15,webstorm 最新注册破解

    http://idea.lanyus.com 在激活地址填写上上面的地址就行了,非常简单有效. 亲测idea,webstorm...都可以激活