KDTree 解析 、構建

其實KDTree 就是一個二叉樹,KDTree的創建、查詢和二叉樹方法都是類似的,只不過在劃分二叉樹的時候要考慮k維來劃分,而二叉樹只考慮一維。

定義:

KDTree是每個節點都爲k維點的二叉樹。所有非葉子節點可以視作用一個超平面把空間分割成兩部分。在超平面左邊的點代表節點的左子樹,在超平面右邊的點代表節點的右子樹。超平面的方向可以用(n mod k)(n可以認爲是數的層級數,比如k爲3 ,即x、

、z三維,那麼第一次分就是按x值來分(第一層級)、第二次分就按y值分(第二層級)。。。第四層級又按x值來分二叉樹等等。。。。來選擇:每個節點都與k維中垂直於超平面的那一維有關。因此,如果選擇按照x軸劃分,所有x值小於指定值的節點都會出現在左子樹,所有x值大於指定值的節點都會出現在右子樹。這樣,超平面可以用該x值來確定,其法矢爲x軸的單位向量。以使用在多種應用場合,如多維鍵值搜索。KDtree是二叉樹的一種特殊情況。如下圖所示:



第一次劃分(紅色)把根節點(白色)劃分成兩個節點,然後它們分別再次被劃分(綠色)爲兩個子節點。最後這四個子節點的每一個都被劃分(藍色)爲兩個子節點。至此已經不能再被劃分,最後得到的八個節點稱爲葉子節點。


有時間傳上具體代碼 作參考。。。。



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