kd树的原理简述
1️⃣定义:给定一个二叉树与点集 P = { x 1 , x 2 , . . . , x N } ⊆ R 2 P=\{x_1,x_2,...,x_N\}\subseteq{}\mathbb{R}^2 P={x1,x2,...,xN}⊆R2
- 对应关系: { 叶结点 i ↔ 一一对应 点 x i 中间结点 u ↔ 一多对应 以 u 为根子树的叶结点 ( P u ) ↔ 一一对应 包住 P u 所有点的矩形 Δ u 根结点 r ↔ 一一对应 所有点 ( P r = P ) \small\begin{cases} 叶结点i\xleftrightarrow{一一对应}点x_i\\\\ 中间结点u\xleftrightarrow{一多对应}以u为根子树的叶结点(P_u)\xleftrightarrow{一一对应}包住P_u所有点的矩形\Delta_u\\\\ 根结点r\xleftrightarrow{一一对应}所有点(P_{r}=P) \end{cases} ⎩ ⎨ ⎧叶结点i一一对应 点xi中间结点u一多对应 以u为根子树的叶结点(Pu)一一对应 包住Pu所有点的矩形Δu根结点r一一对应 所有点(Pr=P)
- 分割操作:从 u u u开始下降 → { level ( u ) 为偶数 → 将原矩形竖切 level ( u ) 为奇数 → 将原矩形横切 \small\to{}\begin{cases}\text{level}(u)为偶数\to{}将原矩形竖切\\\\\text{level}(u)为奇数\to{}将原矩形横切\end{cases} →⎩ ⎨ ⎧level(u)为偶数→将原矩形竖切level(u)为奇数→将原矩形横切
2️⃣示例: