繁体   English   中英

B树实施

[英]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);
            }
        }

我敲了敲头,但不明白为什么他直接开始将keychildrenj+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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM