As árvores dinâmicas desempenham um papel importante na resolução de problemas como fluxos de rede, gráficos dinâmicos, problemas combinatórios ("Árvores dinâmicas na prática" de Tarjan e Werneck) e a fusão recente de dicionários ("Um dicionário mesclável simples" de Adam Karczmarz),
Por árvores dinâmicas, refiro-me à definição declarada no artigo de Sleator & Tarjan "Uma estrutura de dados para árvores dinâmicas" em 1983. Poucos esforços foram publicados na área de pesquisa em programação funcional desde então.
- Edward Kmett implementou uma versão das árvores ST principalmente como uma tradução da contrapartida em C ++, consulte Link-cut trees .
- Chris Okasaki escreveu uma implementação limitada das árvores Splay em seu renomado livro "Estruturas de dados puramente funcionais".
- Ralf Hinze e Ross Paterson introduziram uma estrutura de dados funcional chamada 2-3 árvores de dedos, mas com um objetivo um pouco diferente daquele da definição original de árvores dinâmicas.
A implementação (e talvez o desempenho) de árvores dinâmicas são divididas de acordo com três abordagens:
- Linearização, onde as árvores ET (tour de Euler) desempenham um grande papel. Não foi encontrado um estudo puramente funcional.
- A decomposição de caminho, onde as árvores ST são o carro-chefe, acabou de encontrar a versão de Kmett.
- Contração de árvore, onde as árvores de topo, árvores de topologia e árvores de RC são os jogadores. Não foi encontrado um estudo puramente funcional.
A análise e implementação puramente funcionais podem ser encontradas em Splay, AVL, árvore vermelho-preta, mas essas NÃO são árvores dinâmicas. Os primeiros são considerados a estrutura de dados de sombra (também chamada virtual ou auxiliar) do último.
Então, minha pergunta é:
Quais são as razões (desvantagens, fraquezas) para a comunidade de pesquisa em Programação Funcional não participar da estrutura de dados das árvores dinâmicas?