k-d樹 原理 圖文解析

背景

看到了Lucene -》 Bkd樹 -》 k-d樹
what the f*ck are all of these?

本文就先從k-d樹介紹吧

參考

維基百科

首先這是幹嘛的?

用於多維度搜索的。例如在二維平面搜一個點,在三維空間搜一個點,在多維空間搜一個點。。。。

上個圖最好理解了

在這裏插入圖片描述

假設我們要搜索的平面就是上面這個圖的正方形平面。

那麼我們建立的k-d樹就是下面這個圖這樣。

樹的每一層級劃分一個平面,循環地劃分。在上面這個例子裏,第一級是按照X維度劃分平面,第二級按照Y維度劃分平面,第三級又按照X維度劃分平面。

詳細說明:

第一級:按照X維度劃分,劃分點是(7,2),左子樹都要在X維度比(7,2)小,也就是x<7。也就是,左子樹都在(7,2)這個點的左邊。右子樹都在(7,2)這個點的右邊

第二級:按照Y維度劃分,劃分點是(5,4),他的左子樹在Y維度上都要比(5,4)小,也就是y<4

以此類推。。就可以把整個平面劃分成很多個小平面。

搜索怎麼弄?

假設我們要搜索(4,7)。

上來到根節點(7,2),是X維度的,我要搜索的(4,7),4<7,所以應該在左子樹搜,到左子樹

來到第二級(5,4),這個是Y維度的,我要搜索的(4,7),7>4,所以應該在右子樹搜

來到第三級,找到了(4,7),牛皮

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章