背景
前文介紹了 k-d樹 和 k-d-b樹 今天再來這個b-k-d樹已經幾乎沒啥可以參考的資料了
只能硬啃兩篇文章了
一個是:medium
一個是發明者的論文
挺好的,人還是要耐着性子讀一些難啃的東西
開始介紹
關鍵點
這個b-k-d樹是基於k-d-b樹再做的改進,整體的結構是個森林。。(多個k-d-b樹)
前文介紹,k-d-b樹在做靜態查詢的時候效果特別好,但是動態插入就不好了。
爲了解決這種問題,作者研究了這種炸天的算法,用一個森林來做。。
仔仔細細地看插入算法:
在內存中有一個完全二叉樹作爲buffer,size=M。外部存儲(硬盤)裏保存的第i棵樹,要麼是空的,要麼是2^i * M 這麼大
1、每次插入的時候,如果buffer沒滿,那就直接在內存裏插入
2、如果內存沒滿,return;如果滿了,找到第一個空的樹,將前面所有做merge!
舉個例子!
像上面這個圖,內存M滿了
- 第0棵樹,size=2^0 * M = M
- 第1棵樹,size=2^1 * M = 2M
- 第2棵樹,空的,這時候merge的話,就正好是 M+M+2M = 2^2 * M = 4M
秒啊,數學之美
雖然沒全搞懂,但是搞懂到這兒就已經有很開心的感覺,得到了正反饋,後面有機會繼續研究吧!學無止境!耐住性子好好讀文章,終究會讀懂的,不要害怕,不要着急,奧利給!