Cette réponse combine certains de mes commentaires à la question et les développe.
L'opération de sous-plage sur les arbres rouge-noir peut être effectuée dans le pire des cas O (log n), où n est le nombre d'éléments dans l'arbre d'origine. Étant donné que l'arbre résultant partagera certains nœuds avec l'arbre d'origine, cette approche ne convient que si les arbres sont immuables (ou si les arbres sont mutables, mais l'arbre d'origine n'est plus nécessaire).
Remarquez tout d'abord que l'opération de sous-plage peut être implémentée par deux opérations fractionnées. Ici, l' opération de division prend un arbre rouge-noir T et une clé x et produit deux arbres L et R tels que L se compose de tous les éléments de T inférieurs à x et R les éléments de T supérieurs à x. Par conséquent, notre objectif est maintenant d'implémenter l'opération de division sur des arbres rouge-noir dans le pire des cas O (log n).
Comment effectuer l'opération de division sur des arbres rouge-noir en temps O (log n)? Eh bien, il s'est avéré qu'il y avait une méthode bien connue. (Je ne le savais pas, mais je ne suis pas un expert des structures de données.) Considérons l' opération de jointure , qui prend deux arbres L et R de telle sorte que chaque valeur dans L est inférieure à chaque valeur dans R et produit un arbre composé de tous les valeurs dans L et R. L'opération de jointure peut être implémentée dans le pire des cas O (| r L −r R | +1), où r L et r Rsont les rangs de L et R, respectivement (c'est-à-dire le nombre de nœuds noirs sur le chemin de la racine à chaque feuille). L'opération de division peut être implémentée en utilisant l'opération de jointure O (log n) fois, et le temps total le plus défavorable est toujours O (log n) en considérant une somme télescopique.
Les sections 4.1 et 4.2 d'un livre [Tar83] de Tarjan décrivent comment implémenter les opérations de jointure et de division sur des arbres rouge-noir dans le pire des cas O (log n). Ces implémentations détruisent les arborescences originales, mais il est facile de les convertir en implémentations fonctionnelles immuables en copiant les nœuds au lieu de les modifier.
Comme une note de côté, l'ensemble et les modules Carte de Objective Caml fournissent l'opération de scission, ainsi que d' autres opérations standard sur (immuable) équilibrée des arbres binaires de recherche. Bien qu'ils n'utilisent pas d'arbres rouge-noir (ils utilisent des arbres de recherche binaires équilibrés avec la contrainte que la hauteur gauche et la hauteur droite diffèrent d'au plus 2), regarder leurs implémentations pourrait également être utile. Voici l'implémentation du module Set .
Les références
[Tar83] Robert Endre Tarjan. Structures de données et algorithmes de réseau . Volume 44 de CBMS-NSF Regional Conference Series in Applied Mathematics , SIAM, 1983.