KD 树原理详解

news2024/10/6 22:19:52

一 点睛

KD 树(K-Dimension tree)是可以存储 K 维数据的树,是二叉搜索树的拓展,主要用于多维空间数据的搜索,例如范围搜索和最近邻搜索。BST、AVL、Treap 和伸展树等二叉搜索树的节点存储的都是一维信息,一维数据很容易处理,直接比较数据的大小,满足左子树小于根、右子树大于根即可。多维数据需要选择一个维度 Di,在维度 Di 上进行大小比较。例如,对于二维平面上的两个点 A(2,4)、B(5, 3),按照第 1 维比较,则 A<B ;按照第 2 维比较,则A>B。

二 创建 KD 树

KD 树是二叉树,表示对 K 维数据的划分,每个节点都对应 K 维空间划分中的超矩形区域,KD 树可以省去大部分的搜索工作,提高搜索效率。

对 K 维数据划分左右子树时,需要考虑两个问题:

① 选择哪个维度划分?

② 选择哪个划分点可以使左右子树的大小大致相等?

众所周知,二叉搜索树在极不平衡的情况下退化为线性,效率最差,在平衡的情况下时间复杂度为 O(logn)。

1 维度划分

维度划分指选择哪一维进行划分,即选择哪一维作为分辨器。KD 树可以根据不同的用途选择不同的分辨器,最常见的是轮转法和最大方差法。

• 轮转法

按照维度轮流作为分辨器,对于二维数据(x , y),第 1 层按 x 划分,第 2 层按 y 划分,第 3 层按 x 划分,以此重复进行。奇数层按 x 划分,偶数层按 y 划分,按照维度轮流划分,创建一棵 KD 树。如同切豆腐块,竖着切一刀,横着切一刀,以此重复进行。扩展到 K 维数据,若当前层按照第 i 维划分,则下一层按照第(i +1) % K 维划分,i=0,1,…, K-1。

最大方差法:若数据在维度D i 上方差最大,则选择维度D i

• 最大方差法

若数据在维度 Di 上方差最大,则选择维度 Di 作为分辨器。方差公式为:

其中,x 为所有 xi 的平均数。方差用于反映数据的波动大小(即分散程度),方差越大,分散得越开,越容易划分。例如,二维数据如下图所示,数据在 x 维度方差较小,在 y 维度方差较大,按照 y 维度划分更好一些。

2 选择划分点

为了保障左右子树大致相等,可以将中位数作为划分点。

三 图解

给定一个二维数据集:A(2,3)、B(5,4)、C(9,6)、D(4,7)、E(8,1)、F(7,2),构建一棵 KD 树。

以轮转法为例,构建过程如下。

1 第 1 层按照第 1 维 x 划分,6 个 点的 x 值分别为2、4、5、7、8、9,按中位数 5 一分为二,像切豆腐块一样,在 x=5 的位置竖着切一刀。将划分点 B(5, 4) 作为 KD 树的根,左侧两个点为 A、D,右侧三个点为 C、E、F。

2 第 2 层再按照第 2 维 y 划分,左侧两个点的 y 值分别为 3、7,A 作为左子树的树根;右侧三个点的 y 值分别为 1、2、6,按中位数 2 一分为二,将 F 作为右子树的树根。

3 就这样一直进行下去,直到左右两侧没有数据为止。

二维切分图和对应的 K D树如下图所示。

四 m 近邻搜索

在 KD 树中查询给定目标点 p 最近邻的 m 个点,首先从根节点出发,向下递归,若点 p 当前维的坐标小于树根,则在左子树中查询,否则在右子树中查询。在查询过程中用优先队列(最大堆)存储最近邻的 m 个点,当存在某一点 q 比优先队列中的最远点距离 p 更近时,优先队列堆顶出队,q 入队。

在以下两种情况下,需要继续在当前划分点的另一区域查询。

• 在优先队列中存储的最近邻点不足 m 个;

• 以 p 为球心且 p 到最近邻点(m 个最近邻点中的最远点)的距离为半径的超球体与划分点的另一个区域相交。

五 图解

假设有一棵 KD 树包含 6 个点 A(2, 3)、B(5, 4)、C(9, 6)、D(4,7)、E(8, 1)、F(7, 2),需要查询离 p(6, 6) 最近的两个点。

查询过程如下。

1 当前维度为 x ,p 的 x 坐标大于树根 B,在B的右子树中查询。

2 当前维度为 y ,p 的 y 坐标大于树根 F,在 F 的右子树中查询。

3 当前维度为 x ,p 的 x 坐标小于树根 C,在 C 的左子树中查询。

4 C 的左子树为空,优先队列元素个数小于2,C 入队。

5 C 的右子树为空,返回到 F,优先队列的元素个数小于2,F 入队,搜索 F 的左子树。

6 F的左子树 E 到 p 的距离比队列中的最远点大,无须入队。

7 返回到 B,B 到 p 的距离比队列中的最远点小,F 出队,B入队。

8 以 p 为球心 且 p 到队列中最远点的距离为半径的超球体与划分点 B 的另一区域有交集(d<r),B 左侧区域的点有可能离 p 更近,需要继续查询 B 的另一区域(左子树)。

9 在 B 的左子树中,D 到 p 的距离比队列中的最远点小,C 出队,D 入队。

10 距离 p 点最近的两个点为 D、B。

欧几里得距离又叫作欧氏距离,常用作两点之间的距离度量。点 p 和点 q 之间的欧氏距离是连接它们的直线段的长度。在笛卡尔坐标系中,若p =(p1 , p2 , …, pn )和q =(q1 , q2 , …, qn ) 是 N 维空间中的两点,则 p 、q 的欧氏距离为 

这里只是求给定目标点 p 最近邻的 m 个点,因此不需要开方,只求平方和即可比较大小。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/86434.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

上美股份在港交所开启招股:业绩将继续下滑,吕义雄提前大额套现

12月12日&#xff0c;上海上美化妆品股份有限公司&#xff08;HK:02145&#xff0c;下称“上美股份”&#xff09;在港交所开启招股。根据公告&#xff0c;上美股份本次拟全球发售3695.8万股&#xff0c;发售价将为每股发售股份25.20-29.80港元&#xff0c;预期将于2022年12月2…

基于二阶锥规划的主动配电网最优潮流求解(Matlab代码实现)

&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&#xff1a;行百里者&#xff0c;半于九十。 &#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff…

豪横卡塔尔!疯狂世界杯

豪横卡塔尔&#xff01;疯狂世界杯1.Big Data -- Postgres1.1 Big Data -- Postgres2.Big Data -- Postgres3.Big Data -- Postgres1.Big Data – Postgres 这届世界杯是有史以来最贵的一次世界杯&#xff0c;因为这次世界杯卡塔尔就花了2200多亿美元&#xff0c;可以说自世界杯…

[附源码]Node.js计算机毕业设计电影网上购票系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

【Python金融量化】零基础如何开始学?

前言 Python可以说是当前非常流行的编程语言&#xff0c;甚至有点“网红”的感觉。网上还流行一句话“Life is short, I use Python”&#xff08;人生短暂&#xff0c;我用Python&#xff09;。Python是一种非常高级的动态编程语言&#xff08;其表达更接近自然语言&#xff…

C++设计模式系列(二)工厂模式

文章目录一、什么是工厂二、 简单工厂模式UML类图简单工厂模式结构代码一、定义抽象产品类AbstractProduct二、定义具体产品类三、定义工厂类和工厂方法应用扩展一、扩展具体产品类二、扩展工厂类方法三、扩展应用优点缺点使用场合三、工厂方法模式UML类图工厂方法模式结构代码…

【车间调度】基于GA/PSO/SA/ACO/TS优化算法的车间调度比较(Matlab代码实现)

目录 1 概述 2 FJSP 描述 3 运行结果 3.1 main1运行结果 3.2 main2运行结果 4 参考文献 5 Matlab代码实现 1 概述 柔性作业车间调度问题(Flexible Job shop Sched-uling Problem , FJSP)是在离散制造业和流程工业中应用广泛的一类问题,已被证明是典型的 NP-上hard问题。…

【面试题】宏任务和微任务

1. 宏任务和微任务 宏任务(macroTask)和微任务(microTask)都是异步中API的分类。 宏任务&#xff1a;setTimeout&#xff0c;setInterval&#xff0c;Ajax&#xff0c;DOM事件微任务&#xff1a;Promise&#xff0c;async/await 微任务执行时机比宏任务要早。 console.log(1…

策略 模式

策略模式 参考&#xff1a; 三种新姿势&#xff1a;帮你干掉过多的if-else (qq.com) http://t.csdn.cn/5YeOZ http://t.csdn.cn/HcGYw JAVASE中GUI编程中&#xff0c;布局管理 &#xff1b; Spring框架中&#xff0c;Resource接口&#xff0c;资源访问&#xff1b; javax.…

优美的曲线(含蝴蝶线)-CoCube

复现如下这篇&#xff1a; 优美的曲线-turtlesim 两段视频&#xff1a; 优美的曲线-CoCubebutterfly蝴蝶曲线之CoCube篇如何更深入分析&#xff0c;获得更高精度曲线呢&#xff1f; 对比下面两幅图&#xff1a; 尤其需要注意右图&#xff0c;右下角。 什么原因导致这个控制量…

一个元素纯CSS实现开关按钮【介绍box-shadow、单边或多重阴影、appearance属性】

借助checkbox表单元素、:checked伪类、::before/::after伪元素&#xff0c;就可以只需一个input[type"checkbox"]元素&#xff0c;通过纯CSS实现Switch开关效果的按钮。 主要用到的属性&#xff1a; appearance 默认css元素样式box-shadow 阴影效果transition css动…

ICG maleimide, ICG-MAL,2143933-81-5,ICG和PEG链接可在体内长循环.

英文名&#xff1a;ICG maleimide ICG-MAL CAS&#xff1a;2143933-81-5 分子式: C51H56N4O6S 分子量: 853.09 外 观&#xff1a;绿色粉末 溶解度&#xff1a;二氯甲烷 纯 度&#xff1a;95% 结构式&#xff1a; ICG is a tricarbocyanine-type dye with NIR-absorb…

Jenkins自动化测试Robot Framework详解

目录 1. Robot Framework 概念 2. Robot Framework 安装 3. Pycharm Robot Framework 环境搭建 4. Robot Framework 介绍 5. Jenkins 自动化测试 总结 重点&#xff1a;配套学习资料和视频教学 1. Robot Framework 概念 Robot Framework是一个基于Python的&#xff0c;…

MySQL——怎么给字符串字段加索引

现在&#xff0c;几乎所有的系统都支持邮箱登录&#xff0c;如何在邮箱这样的字段上建立合理的索引&#xff0c;是本篇文章要讨论的问题。 假设&#xff0c;现在维护一个支持邮箱登录的系统&#xff0c;用户表是这么定义的&#xff1a; mysql> create table SUser( ID big…

Hive 分析银行转账风险

文章目录创建数据源基于转账记录&#xff0c;计算 7 天内各个账号的转账金额找出相同收付款人 5 天内连续转账3次或以上的记录创建数据源 数据来源&#xff1a;数据源 drop table transfer_log;CREATE TABLE transfer_log ( log_id bigint, -- idlog_ts timestamp, -- 操作时…

128-152-spark-核心编程-源码

128-spark-核心编程-源码&#xff08;主要以了解基本原理和流程为主&#xff09;&#xff1a; 总体相关 ​ 1.环境准备(Yarn 集群) ​ (1) Driver, Executor ​ 2.组件通信 ​ (1) Driver > Executor ​ (2) Executor > Driver ​ (3) Executor > Executor ​ 3.应用…

Unity异步加载AB包

Unity异步加载AB包写在前面效果关键讲解项目地址写在后面写在前面 最近项目需要在Unity中完成一个非常耗时的工作&#xff0c;所以学习了下异步加载的流程&#xff0c;这里做了一个demo&#xff0c;异步加载AB包&#xff0c;其实异步加载场景等&#xff0c;原理差不多。 效果…

Tomcat的Maven插件使用方法(在idea里面运行Tomcat)

目录 一、概述 二、下载和导入插件 三、测试使用方式 四、总结 一、概述 使用这个插件可以快速的运行Tomcat&#xff0c;比在本地配置快得多。 二、下载和导入插件 1.下载插件Maven Helper ps&#xff1a;已经有下载过这个插件的可以跳过此步骤 &#xff08;1&#xff…

一、导论——可解释性机器学习(DataWhale组队学习)

目录导言一、什么是可解释人工智能?二、学可解释机器学习有什么用?2.1学习可解释机器学习的原因2.2 Machine Teaching :人工智能教人类学习2.3 细粒度图像分类2.4前沿AI三、本身可解释性好的机器学习模型四、传统机器学习算法的可解释性分析五、卷积神经网络的可解释性分析5.…

前端基础(二)_HTML常用标签(块级标签、行级标签、行块级标签)

HTML常用标签 我们可以分为三类&#xff1a; 1.块级标签 2.行级标签 3.行块级标签 一、块级标签 1.1 h系类标签 标题标签 H1~h6 大到小 H1 在同一个页面中只能使用一次 其他标签可以重复 特点&#xff1a;默认宽度100% 高度自适应 独立成行 自带间距加粗 <body><…