Почему B -дерево предпочтительнее кучи Фибоначчи в реализации системы базы данных?

#database #tree #fibonacci #b-tree #fibonacci-heap

#База данных #дерево #фибоначчи #b-дерево #куча фибоначчи

Вопрос:

введите описание изображения здесь

Есть ли особая причина, по которой B -дерево предпочтительнее при реализации более масштабной системы баз данных, чем куча Фибоначчи? Из анализа сложности на изображении может показаться, что куча Фибоначчи быстрее.

Комментарии:

1. Кучи Фибоначчи имеют репутацию медленных на практике [18] из-за большого потребления памяти на узел и высоких постоянных коэффициентов для всех операций. [19] cs.princeton.edu /~уэйн/ кляйнберг-тардос/pdf/FibonacciHeaps.pdf , стр. 79 web.stanford.edu/class/cs166/lectures/07/Small07.pdf , стр. 72

2. Дерево B не является двоичной кучей. Изображение и упоминание B tree не совпадают. Дерево B — это дерево поиска ; куча — нет. Дерево поиска — это практическое решение для индексов базы данных, куча имеет другое назначение.

Ответ №1:

Дерево B — это дерево поиска, а не куча. Изображение сравнивает не кучу Фибоначчи с B -деревом, а с двоичной кучей.

Сравнение кучи и дерева поиска

Куча — это структура данных, которая обеспечивает отложенный порядок, т. Е. Чтобы получить i значение в отсортированном порядке, вам придется изменять кучу по мере извлечения из нее значений. Это верно для обеих реализаций кучи в изображении, которым вы поделились.

Дерево поиска больше ориентировано на порядок. Вы можете перебирать его значения по порядку за O (n) раз, не внося никаких изменений в дерево. Для кучи, которая будет равна O (nlogn), поскольку вам потребуется n extract-min операций, и куча теряет значения, которые вы извлекаете из нее.

Вы написали:

Есть ли особая причина, по которой B -дерево предпочтительнее при реализации более масштабной системы баз данных

Куча не является полезной структурой данных для индексации данных в системах баз данных, поскольку порядок не известен без изменений, а узлы при чтении в упорядоченной последовательности разбросаны по разным местам на диске.

Дерево поиска лучше подходит для этой цели. Среди деревьев поиска те, которые хорошо сочетаются с большими размерами блоков, являются интересным выбором для баз данных, данные которых хранятся на относительно медленных дисках. Таким примером является B-дерево. B -деревья имеют преимущество перед B-деревьями в том, что они хранят значения по порядку внутри связанных конечных блоков, так что они оптимизируются при упорядоченной итерации, в то время как B-деревья занимают немного меньше места, чем B -деревья.

Сравнение двоичной кучи и кучи Фибоначчи

Разница во временной сложности между двоичной кучей и кучей Фибоначчи может быть фактором, влияющим на кучу Фибоначчи. Но поскольку куча Фибоначчи имеет большие накладные расходы, выигрыш будет появляться только для больших наборов данных. В Википедии говорится:

Хотя кучи Фибоначчи выглядят очень эффективными, у них есть следующие два недостатка (как упоминалось в статье «Куча сопряжения: новая форма самонастраивающейся кучи»):

«Они сложны, когда дело доходит до их кодирования. Также они не так эффективны на практике по сравнению с теоретически менее эффективными формами куч, поскольку в их простейшей версии они требуют хранения и обработки четырех указателей на узел по сравнению с двумя или тремя указателями на узел, необходимыми для других структур «.

Эти другие структуры называются двоичной кучей, биномиальной кучей, кучей сопряжения, кучей Бродала и кучей спаривания ранга.

Хотя общее время выполнения последовательности операций, начинающихся с пустой структуры, ограничено приведенными выше границами, выполнение некоторых (очень немногих) операций в последовательности может занять очень много времени (в частности, delete и delete minimum в худшем случае имеют линейное время выполнения). По этой причине кучи Фибоначчи и другие амортизированные структуры данных могут не подходить для систем реального времени.