首页 > 其他分享 >KD-Tree 学习笔记

KD-Tree 学习笔记

时间:2024-07-28 20:07:47浏览次数:12  
标签:重构 log 递归 KD Tree 笔记 KDT 矩形

KD-Tree 学习笔记

建树

  1. 如果当前超长方体只有一个点,返回这个点
  2. 选择一个维度(轮流)
  3. 选择中位数(\(O(n)\))
  4. 递归

应用

  • 定理

二维 KDT 中节点代表矩阵与任意一个矩形(边界上)有交的只有 \(O(\sqrt n)\) 个。

证明:

考虑一条直线,与KDT的交集,此层最多有两个,递归得到递归式,然后套主定理。

增删改查

  • 查询
  1. 单点是否存在 \(O(\log n)\)
  2. 矩阵和:递归,只处理相交 \(O(\sqrt n)\)

剪枝:维护子树支撑矩形。

  1. 最近邻,\(k\) 近邻 最坏 \(O(n)\),可以用支撑矩形最优性剪枝。
  • 修改

看做线段树,区间就打懒标记

  • 插入

找到单点,然后切割喵 \(O(\log n)\)。

  • 删除

为了维护树形,打删除懒标记,或者像 BST 一样,找到子树内里当前删除点最近的同维度的点,交换到叶子上面,然后删叶子。

  • 重构
  1. 暴力
  2. 替罪羊重构,维护子节点占当前节点大小的比例,作为不平衡度,定义阈值重构。
  3. 根号重构,存储待插入的点,每 \(B\) 次插入重构,修改均摊 \(O(\dfrac nB \log n)\),查询均摊 \(O(B+\log n)\),最优 \(O(\sqrt{n\log n}\)。
  4. 二进制分组,分成 \(\text{popcount}(n)\) 组 KDT,每次插入合并,均摊 \(O(n\log^2n)\)。

KDT 本质上是维护一些偏序关系,一般我们用矩形去套点。

标签:重构,log,递归,KD,Tree,笔记,KDT,矩形
From: https://www.cnblogs.com/MoyouSayuki/p/18328777

相关文章

  • 【esp32 学习笔记】(esp-idf 版本)从点灯开始——点亮LED
    【配置CMakeLists】首先配置自定义组件的CMake文件:components->led->CMakeLists.txt完整配置内容如下:file(TO_CMAKE_PATH"$ENV{IDF_PATH}"IDF_PATH) #将Windows下ESP-IDF的路径转化CMAKE路径idf_component_register(SRCS"led.c"          INCLUDE_......
  • 实战|Qt开发WordBN笔记软件#10 添加Font Awesome字体图标
    01背景【WordBN字远笔记】是天恩软件工作室开发的一款免费笔记软件;WordBN基于VS2019、Qt6.5开发,使用QtQuick(QML)开发语言。本课程将以【WordBN字远笔记】的界面为实战基础,详细介绍如何基于Qt/QML开发语言,从零开始开发一套真正的程序,包括国际化、版本发布、安装包制作等项目......
  • 2024牛客多校第四场F.Good Tree 挑战全网最详解
    好吧标题党了一回,但我相信有不少人被出题人的那句“手玩一下就知道了”无语住了像我这种憨憨一旦想偏了就救不回来了,于是困惑了好久,在雨巨的指导下彻底搞懂(此处大声谢谢雨巨,又有实力又会讲题又认真答疑每一个问题,呜呜呜我永远的姐)题意简单来说就是定义f(i)为树上i点到其他所有......
  • 机试笔记-2
    1.进制转换类问题反序数:比如输入123,输出321intmain(){intn;cin>>n;intans=0;while(n>0){ans=ans*10;ans=ans+(n%10);n=n/10;}cout<<ans<<endl;}10进制转x进制 输入100......
  • ssy暑假集训暴力算法学习笔记
    7.28集训第六天今天t大学的学长peop1e来给我们讲课啦!人好帅呀嘿嘿嘿....内容如下模拟退火:定义模拟退火可以分成两个部分,一个是"模拟",一个是"退火",先介绍什么叫退火,贴一张百度百科的图吧:\(\\\)那这"退火"的定义有啥用吗?模拟退火就是用来模拟整个退火的过程(其实没啥相似......
  • 算法笔记|Day10栈与队列II
    算法笔记|Day10栈与队列II☆☆☆☆☆leetcode150.逆波兰表达式求值题目分析代码☆☆☆☆☆leetcode239.滑动窗口最大值题目分析代码☆☆☆☆☆leetcode347.前K个高频元素(待补充)题目分析代码☆☆☆☆☆leetcode150.逆波兰表达式求值题目链接:leetcode150.......
  • 算法笔记|Day9栈与队列
    算法笔记|Day9栈与队列☆☆☆☆☆leetcode232.用栈实现队列题目分析代码☆☆☆☆☆leetcode225.用队列实现栈题目分析代码☆☆☆☆☆leetcode20.有效的括号题目分析代码☆☆☆☆☆leetcode1047.删除字符串中的所有相邻重复项题目分析代码☆☆☆☆☆leetcod......
  • C++自学笔记29(多维数组)
    我们在之前的笔记中知道数组解决了重复变量的赋值问题,也知道数组就是指针可以用指针的方式修改内容。现在有一个数组对50个变量赋值a[50],我们有50个这样的数组a[50][50],对于这样的数组我们还有50个a[50][50][50]。这就是一维数组、二维数组、三维数组......我们拿堆上建立......
  • C++自学笔记30(类型双关)
    上栗子#include<iostream>intmian(){inta=50;doublever=a;std::cout<<ver<<std::endl;std::cin.get();}a是一个占据4字节的数据,将a复制给ver并转换为double8个字节。这其中就是隐式的类型转换。第一个是int类型的50,第二个是类型转换后的......
  • 心电信号测量及multisim仿真笔记
    心电信号心电信号测量无源低通滤波仿真电路原理图(二阶低通滤波)电路作用知识点补充基础概念补充运放跟随器原理图作用原理:作用:双向模拟开关电路原理图基准电压电路原理图该电路的作用导联脱落检测电路原理图作用仪器仪表放大电路原理图作用右腿驱动电路原理图放大倍......