Бродал и соавт. в своей статье ESA '06 продемонстрировали существование чисто функциональной структуры с логарифмическим поиском, обновлением и вставкой, а также слиянием в постоянное время. (Заметьте, я не говорю о кучах Бродала, которые представляют собой другую структуру данных, довольно широко используемую для реализации чисто функциональных очередей с приоритетами.) Это кажется очень прибыльным результатом и должно привести к эффективным чисто функциональным наборам и картам, но Я не вижу, чтобы они использовались нигде:
- Haskell
containers
использует деревья Адамса; - Стандартная библиотека OCaml использует деревья AVL;
- Сортированные неизменные карты Scala реализованы с использованием красно-черных деревьев.
Если деревья Brodal действительно дают такие хорошие результаты, почему они не были адаптированы в стандартные библиотеки функциональных языков программирования? На самом деле, я даже не видел ни одной реализации бродальских деревьев!
В частности, это потому, что:
- их очень трудно (или практически невозможно) реализовать правильно;
- константы очень велики, а реальные выгоды кажутся маленькими;
- другие причины;
- или комбинация вышеупомянутого?