版权声明:此文为作者原创,若觉得写得好请点个赞再离开。当然,也欢迎在讨论区指出本文的不足,作者会及时加以改正。转载请注明地址: https://blog.csdn.net/chenxiaoran666/article/details/83409338
前言
是一个十分神奇的东西,其实本质上类似于一个 维的二叉搜索树。
二叉搜索树 详见博客 二叉搜索树(BST)学习笔记
核心思想
的核心思想与 是差不多的(插入等操作也都基本上一样)。
唯一的区别就在于,它每次比较的是某一维度上的值。
但是,与 一样, 也有可能会在某些情况下退化成一条链。
怎么办呢?
呃, 有平衡树,我们的 有… …
平衡KD-Tree(不存在的)
其实,我们可以采用替罪羊树的思想,对不平衡的子树直接重构。
替罪羊树 详见博客 简析平衡树(一)——替罪羊树 Scapegoat Tree
这样就能使复杂度较为稳定了。
有什么用?
呃,话说 有什么用?
其实 的主要应用如下:
-
求多维偏序:如【洛谷3810】【模板】三维偏序(陌上花开)(
但是我不会) -
存储和处理一些多维度数据:
例题被吃掉了,记得我不会 的时候,有一次模拟赛要求重复的三元组个数,果断写 了… … -
乱搞:如【BZOJ2648】SJY摆棋子 -
… …(
我也不知道还有什么了)
所以,其实 还是有很多用途的。
【BZOJ2648】SJY摆棋子 的题解 详见博客 【BZOJ2648】SJY摆棋子(KD-Tree)
后记
的某些用法还是非常玄学的,强烈推荐去做一做文中提到的【BZOJ2648】SJY摆棋子一题,毕竟我是看到它是模板题才去做的。