Давным-давно в дни, предшествующие STL, я написал свой собственный алгоритм B-Tree (BST), потому что у меня был довольно большой набор данных в то время (примерно 700 тысяч элементов в 2 деревьях, которые были взаимозависимыми). Я обнаружил, что перебалансировка после каждых 100-200 вставок / удалений - это максимальная производительность, которую я мог получить в то время, основываясь на экспериментах на 486 и оборудовании SGI. Это число может отличаться сейчас, а может и нет, так как оно кажется пределом алгоритмической оптимизации, если вы не преобразуетесь в параллельную модель.
Короче говоря, вы можете применить триггер модификации для перебалансировки и разрешить принудительную перебалансировку, когда вы завершите все свои модификации.
Улучшение было замечательным. Начальная прямая нагрузка не была завершена через 25 м (убил процесс). Перебалансировка, когда мы шли, также была убита после 15м. Ограниченная модификация загружается с балансировкой через каждые 100 загруженных модов и работает менее чем за 3 метра. Обратите внимание, что во время части «run» в исходной записи было 0-8 модификаций дерева. Вам действительно нужно подумать о том, всегда ли вам нужно балансировать, когда дерево будет снова модифицировано в ближайшем будущем.