Согласно Wiki и GFG временная сложность поиска/вставки/удаления B-дерева составляет O(log n). Дерево B может иметь > 2 дочерних элементов, т. е. это не бинарное дерево. Так что я не понимаю, почему это log n - разве это не должно быть быстрее, чем log n? Например, поиск должен быть в наихудшем случае O(h), где h — высота дерева.
Почему сложность B-дерева равна O (log n), это не двоичное дерево
Ответы (3)
B-дерево — это обобщение двоичного дерева, в котором каждый узел может иметь более двух дочерних элементов. Но это не точно. Если, например, количество дочерних элементов для каждого узла было определено как x, тогда сложность будет . Однако, когда минимальное количество дочерних элементов равно 2 (как в B-Tree), максимальная высота дерева будет , и, как упоминалось в предыдущем ответе, Big-O рассматривает наихудший сценарий, который представляет собой дерево с наибольшей высотой (логарифмическая база 2). Следовательно, сложность B-дерева составляет .
да, это не бинарное дерево. Но если мы выполняем алгоритм бинарного поиска внутри узла (для ключа внутри узла), сложность времени можно рассматривать как O (logn).
Давайте рассмотрим,
степень B-дерева (максимальное количество детей на узел) ≤ m. общее количество узлов в узле: n
если дело обстоит так, как указано выше,
высота дерева равна
O(logmn) ----------(1)
, так как количество дочерних элементов может быть изменено на узел, придется выполнять логарифмический поиск по порядку узлов (lgm) ----------(2)
поэтому общая сложность поиска в двоичном дереве равна
O(logmn) . O(lgm) ----------(3)
согласно логарифмической операции ,
{logba = logca / logcb
}
применяя вышеуказанную операцию к (3)
O(logmn) . O(lgm) = O(lgn/lgm) . O(lgm)
= O(lgn)
поэтому временная сложность дерева B для операции поиска составляет O(lgn)
Big-O — это мера наихудшей сложности; поскольку узлы B-дерева не обязаны иметь более 2 дочерних элементов, в худшем случае ни один узел не имеет более 2 дочерних элементов.
loga(b)
— это всего лишьlog(b)/log(a)
, следовательно, это постоянный коэффициент. - person Willem Van Onsem   schedule 16.08.2019