在B-Tree中使用二进制搜索

时间:2018-06-11 14:54:10

标签: algorithm

在CLRS(算法导论)一书中,B-Tree在第18章介绍。它具有以下属性(P488)

  

x.n键本身,x.key 1 ,...,x.key x.n 以非递减顺序存储

但是在搜索B-Tree中的元素,将元素插入B-Tree的过程中,CLRS在搜索特定节点中的密钥时使用线性搜索而不是二进制搜索。

为什么这样做?它会通过二分搜索获得更好的性能吗?

1 个答案:

答案 0 :(得分:1)

如果您希望允许订单发生变化,那么您是对的:进行二元搜索仍会导致O(log n)的时间复杂度,而线性搜索会导致O(t log n)。但是如果你认为B树的顺序(最大程度)是固定的,那么你是进行二元搜索还是线性搜索对时间复杂度并不重要。由于订单通常由缓存行大小等因素决定,因此这是一个合理的简化。

在实践中,线性搜索通常会为您提供更好的性能,因为它可以通过较少的分支来完成,并且更适合SIMD处理。实际的B树实现将仅使用线性搜索,或者使用初始二进制搜索,然后使用线性搜索。搜索的挂钟时间将主要取决于等待获取节点的时间,而不是搜索适当的子节点。