Quais estruturas de dados do dicionário funcional são importantes para se conhecer?
Árvores binárias com altura equilibrada e suas tentativas são um bom compromisso geral. Além disso:
- Patricia árvores.
- Hash tenta.
Quais são os prós e os contras dessas abordagens?
Árvores binárias com altura equilibrada e suas tentativas são um bom compromisso geral para chaves atômicas. Tentativas são as mesmas para chaves que são sequências, por exemplo, chaves de sequência.
As árvores Patricia podem ser várias vezes mais rápidas, mas apenas permitem chaves inteiras.
As tentativas de hash podem ser várias vezes mais rápidas que as árvores binárias balanceadas, principalmente se o hash for mais barato que a comparação e o polimorfismo tiver uma sobrecarga (por exemplo, strings no .NET) e escrever ponteiros no heap for rápido (por exemplo, VMs como a JVM e CLR que foram otimizado para linguagens imperativas em vez de linguagens funcionais). As tentativas de hash também permitem o uso interno da mutação como uma otimização.
As árvores preto-vermelho são menos importantes porque não têm benefícios significativos em relação às árvores de altura equilibrada, mas têm a desvantagem significativa de não permitirem união, interseção e diferença eficientes.
Da mesma forma, as árvores de dedos não são muito melhores na prática.
Quando faz sentido usar uma estrutura de dados mais imperativa?
Quando o seu dicionário é preenchido uma vez e depois usado apenas para pesquisas, ou seja, congelado.
Quando você precisa de desempenho (uma tabela de hash decente como o .NET Dictionary
geralmente é 10-40 × mais rápida que qualquer dicionário genérico puramente funcional).
Quando você precisa de um dicionário fraco, porque não há um dicionário fraco puramente funcional conhecido.