Динамические деревья играют важную роль в решении таких проблем, как сетевые потоки, динамические графы, комбинаторные задачи («Динамические деревья на практике» Тарьяна и Вернека) и недавно объединенные словари («Простой объединяемый словарь» Адама Карчмара),
Под динамическими деревьями я ссылаюсь на определение, изложенное в статье Слеатора и Тарьяна «Структура данных для динамических деревьев» в 1983 году. С тех пор в области исследований функционального программирования было опубликовано мало усилий.
- Эдвард Кметт реализовал версию деревьев ST в основном как перевод аналога C ++, см. Деревья с разрезом ссылок .
- Крис Окасаки написал ограниченную реализацию деревьев Splay в своей известной книге «Чисто функциональные структуры данных».
- Ральф Хинце и Росс Патерсон представили функциональную структуру данных, называемую деревьями 2-3 пальца, но с целью, несколько отличной от первоначального определения динамических деревьев
Реализация (и, возможно, производительность) динамических деревьев делятся в соответствии с тремя подходами:
- Линеаризация, где инопланетные деревья (тур Эйлера) играют большую роль. Не найдено чисто функциональное исследование.
- Разложение пути, где деревья ST являются флагманами, только что нашло версию Kmett.
- Сжатие деревьев, где топ-деревья, топологические деревья и RC-деревья являются игроками. Не найдено чисто функциональное исследование.
Чисто функциональный анализ и реализацию можно найти на Splay, AVL, красно-чёрном дереве, но это НЕ динамические деревья. Первые считаются теневой (также называемой виртуальной или вспомогательной) структурой данных последних.
Итак, мой вопрос:
По каким причинам (недостаткам, слабым сторонам) исследовательское сообщество по функциональному программированию не принимает участия в структуре данных динамических деревьев?