[英]B-Tree Implementation
我正在阅读Rober Sedgewik的有关实现B-Tree的内容,并通过以下链接在search
方法的else
部分中找到了该代码段: http : //algs4.cs.princeton.edu/62btrees/BTree.java.html
// internal node
else {
for (int j = 0; j < x.m; j++) {
if (j+1 == x.m || less(key, children[j+1].key))
return search(children[j].next, key, ht-1);
}
}
我敲了敲头,但不明白为什么他直接开始将key
与children
第j+1
个元素而不是第j
个进行比较。 有人可以对这个具体问题有所了解吗?
如果看一下他对less()
方法的声明,您会注意到它使用了compareTo
。
本质上,他想做的是key.compareTo(children[j+1].key)
但是为什么他要用j+1
代替j
? 要理解这一点,请看他的条件陈述的第一部分; 他使用j+1 == xm
,这意味着他想测试以查看j + 1是否为极限。 如果j+1 = xm
,他不想继续递增j,所以他返回。 但是,如果还没有达到极限,请检查比较当前密钥与列表中的下一个密钥(因为存在下一个密钥)。 如果列表中的下一个键“小于”当前键,则搜索当前键。
简而言之:如果j+1
不存在,则if语句的前半部分将捕获它,并且它将脱离for
循环。 否则,请检查j+1
的键。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.