背景
看到了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),牛皮