Итак, у меня есть проблема, которая, я уверен, разрешима, но после многих, много часов мышления и обсуждения, был достигнут лишь частичный прогресс.
Проблема заключается в следующем. Я создаю БТРИ, возможно, несколько миллионов ключей. При поиске в BTree он вызывается по требованию с диска в память, и каждая страница в операции относительно дорога. Это фактически означает, что мы хотим, чтобы они проходили как можно меньше узлов (хотя после прохождения node стоимость прохода через этот node, до этого node равна 0). В результате мы не хотим тратить пространство, поскольку количество узлов приближается к минимальной емкости. Теоретически это должно быть предотвратимо (в пределах разумного), так как структура дерева зависит от порядка, в который были вставлены ключи.
Итак, вопрос заключается в том, как изменить порядок ключей таким образом, чтобы после создания BTree использовалось наименьшее количество узлов. Вот пример:
Я наткнулся на этот вопрос В каком порядке вы должны вставить набор известных ключей в B-Tree, чтобы получить минимальную высоту?, к сожалению, вопрос. Ответы также не решают мою проблему. Также стоит добавить, что мы хотим, чтобы математические гарантии возникали из-за невозможности создания дерева вручную и только с использованием опции insert. Мы не хотим строить дерево вручную, ошибаться, а затем находить его непознаваемым!
Я также наткнулся на две исследовательские работы, которые так близки к решению моего вопроса, но не совсем там! Оптимизация времени и пространства в B-деревьях и оптимальных 2,3-деревьях (где я фактически взял вышеупомянутое изображение) обсуждают и количественно определяют различия между оптимальным пространством и пространственным пессимальным БТРС, но не доходят до как я могу видеть, как создать порядок вставки.
Любая помощь по этому поводу была бы очень признательна.
Спасибо
Исследовательские работы можно найти по адресу:
http://www.uqac.ca/rebaine/8INF805/Automne2007/Sujets2007Automne/p174-rosenberg.pdf
http://scholarship.claremont.edu/cgi/viewcontent.cgi?article=1143&context=hmc_fac_pub
EDIT:: Я закончил заполнение скелета btree, построенного, как описано в вышеупомянутых работах, с алгоритмом FILLORDER. Как уже упоминалось ранее, я надеялся избежать этого, однако я закончил его реализацию до того, как были опубликованы 2 отличных ответа!