Ця відповідь поєднує деякі мої коментарі до питання та розширює їх.
Операція піддіапазону на червоно-чорних деревах може виконуватися в гіршому випадку O (log n), де n - кількість елементів у вихідному дереві. Оскільки отримане дерево поділить деякі вузли з початковим деревом, такий підхід підходить лише в тому випадку, якщо дерева незмінні (або дерева змінні, але оригінальне дерево більше не потрібне).
Спочатку зауважте, що операція з піддіапазоном може бути реалізована двома розділеними операціями. Тут операція роздвоєння бере червоно-чорне дерево T і ключ x і створює два дерева L і R таким чином, що L складається з усіх елементів T менше, ніж x, а R елементів з T більше x. Тому наша мета зараз - здійснити роздільну операцію на червоно-чорних деревах у гіршому випадку O (log n).
Як ми виконуємо операцію розщеплення на червоно-чорних деревах за час O (log n)? Ну, виявилося, що був відомий метод. (Я цього не знав, але я не знаю структур даних.) Розгляньте операцію з'єднання , яка приймає два дерева L і R таким чином, що кожне значення в L менше, ніж кожне значення в R, і створює дерево, що складається з усіх значення L та R. Операція приєднання може бути реалізована у найгіршому випадку O (| r L −r R | +1), де r L і r R- це ряди L і R відповідно (тобто кількість чорних вузлів на шляху від кореня до кожного листка). Операція розбиття може бути реалізована за допомогою операцій з'єднання O (log n) разів, а загальний найгірший час все ще O (log n), враховуючи телескопічну суму.
Розділи 4.1 та 4.2 книги [Tar83] Тарджана описують, як реалізувати операції з’єднання та розколювання на червоно-чорних деревах у гіршому випадку O (log n). Ці реалізації знищують оригінальні дерева, але їх легко перетворити на незмінні, функціональні реалізації, копіюючи вузли, а не змінювати їх.
Як бічна примітка, модулі Set і Map від Objective Caml забезпечують роздільну операцію, а також інші стандартні операції на (незмінних) збалансованих деревах бінарного пошуку. Хоча вони не використовують червоно-чорні дерева (вони використовують збалансовані дерева бінарного пошуку з тим обмеженням, що ліва висота та права права відрізняються щонайбільше на 2), дивлячись на їх реалізацію теж може бути корисно. Ось реалізація модуля Set .
Список літератури
[Tar83] Роберт Ендре Тарджан. Структури даних та мережеві алгоритми . Том 44 серії регіональних конференцій CBMS-NSF з прикладної математики , SIAM, 1983 р.