我正在閱讀論文making B+-trees cache conscious in main memory。在第3.1.2節中,作者描述了在CSB +樹節點內搜索的幾種方法。在CSB +樹上的節點內搜索
Tha basic方法是簡單地使用常規while循環進行二分搜索。
的均勻方法是通過代碼擴充,展開而循環進入if-then-else
語句假定所有的鍵被使用。
作者給出了下面的例子,展示了對一個節點的搜索展開,最多9個鍵。在一個節點的數字表示在if
測試所使用的鍵的位置
4
/ \
2 6
/\ /\
1 3 5 8
/\
7 9
然後是混淆的部分:
如果只有5個鍵是實際存在,我們可以遍歷這個樹正好與比較。另一方面,將最深的子樹置於左側而不是右側的展開將需要某些分支上的比較。
那麼,爲什麼它需要更多的比較在下面的樹:
6
/ \
4 8
/\ /\
2 5 7 9
/\
1 3
此外,
如果我們知道我們只有五個有效按鍵,我們可以硬編碼樹,平均而言,使用2.67比較而不是3.
2.67是怎麼產生的?
任何提示將不勝感激。此外,一個鏈接指向我代碼擴展知識將是有益的。
實際上,我不確定在紙上提出問題是否合適,因爲在此處轉錄時可能遺漏了一些關鍵信息(問題可能需要重新格式化)。我只希望能有人碰巧看過這篇論文。
由於
我不知道這是否是一個天真的問題,但你的例子給出的平均值是2.8而不是2.67。 – manuzhang
我更新了我的答案。現在它正確地解釋了爲什麼我們需要2.67比較。 –