Я читал о реализации B-Tree из Робер Sedgewik и нашел этот фрагмент в else
части search
метода по этой ссылке: http://algs4.cs.princeton.edu/62btrees/BTree.java.htmlB-Tree Реализация
// 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
с j+1
-й элемент от children
и не j
th. Может ли кто-нибудь пролить свет на этот конкретный момент?
Правильно, я понял. Но при этом, разве он НЕ СРАВНИТЕЛЬНЫЙ ключ с элементом 'j'th вообще? Мне было интересно, что, если 'ключ' самого элемента' j'th больше, чем 'key'? Он не должен даже идти на «j + 1» тогда, верно? –
Я не думаю, что он пытается сравнить с j. Если вы прочитаете остальную часть функции поиска, это оператор if-else, что заставляет меня предположить, что сравнение j выполняется в инструкции if. Часть «else» (часть, которую вы отправили) находится там, чтобы убедиться, что он не получает NPE (если нет следующего значения) – Aify
На самом деле условие 'if' для листовых узлов (' if (ht == 0) ') и' else' для внутренних узлов. Кроме того, обратите внимание, что в этом блоке 'if' он проверяет от' j = 0'. –