Стандартная библиотека OCaml имеет замечательную реализацию Set
, которая использует очень эффективный алгоритм разделения и покоя для вычисления union
двух наборов. Я считаю, что он берет целые поддеревья (а не только отдельные элементы) из одного набора и вставляет их в другой набор, при необходимости перебалансируя.
Мне интересно, требуется ли эта информация о высоте, которая хранится в дереве AVL, который использует OCaml, или если это также возможно с красно-черными деревьями. Например, можно ли более эффективно конкатенировать пару красно-черных деревьев, чем просто повторять по второму дереву, добавляя его элементы в конец первого дерева?