KD树学习口胡

KD树口胡


今天突发奇想想学一学kd树,于是就打开了一个博客这里,大概搞明白了KD树是个什么东西,然而并不会写。

前置知识

-线段树

-线段树套树

-平衡树


首先我们考虑线段树是什么状况。

线段树是通过对所有需要元素在某个维度上进行分治。

一颗线段树的大致结构

这样我们便获得了一个较为和谐的 O(log(n)) 级别的查询结构。

那么如何将这个优美的数据结构拓展到多维呢?

显然树套树可以解决这种问题。

一个简单的理解就是在维护的序列上每个节点挂了一个另一个维度的序列。

这样可以实现 O(log2(n)) 级别的查询。


little problem

显然线段树(维护序列的版本)需要的空间是 O(kn) 的(k是个常数)。
怎么优化这玩意呢?

平衡树。

实际上应该是二叉搜索树,然而可能被卡成 (O(n2)) ,因此默认平衡树==二叉搜索树

这种方法的思想就是利用每个实际存在的节点顺便完成线段树完成的对值域二分的操作。


考虑另一种二维线段树(平面树?)。

另一种鬼畜的实现

这个版本的二维线段树就比较类似于kd树的思想了。

kd树就是把上面那个版本的区间换成类似于平衡树的节点就完事了。

完了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值