Окрім пунктів Macneils ...
Червоно-чорні дерева можуть бути кориснішими безпосередньо, оскільки є корисні ефективні операції, які не підтримуються широко в стандартних реалізаціях бібліотеки, таких як C ++ std::map
(принаймні, AFAIK). Червоно-чорні дерева можуть підтримувати "розщеплення" (розрізання дерева на два, одна, що містить клавіші менше вказаної клавіші, а одна, що містить ключі більше), і "з'єднання" (зворотне поєднання дерева великих ключів з деревом малого ключі) можуть бути виконані в O (log n) час, але якщо вони підтримуються в стандартних бібліотеках контейнерів, це здається добре прихованою справою.
Однак "збільшення" структур даних є загальним явищем. Простий приклад - додавання інформації про розмір піддію до вузлів майже в будь-якій структурі даних дерева для підтримки підписки на O (log n). Більш складні приклади включають інтервальні дерева.
Як тільки ви зрозумієте, як збільшити структури даних, існує велика кількість варіантів, які можуть бути корисні для конкретних програм - і дуже мало доступних попередньо упакованих у вигляді бібліотеки. Існуючі структури даних стандартної бібліотеки (наприклад, такі як std::map
) не можуть бути доповнені за рахунок копіювання вихідного коду та його зміни безпосередньо - ви не можете додати їх за допомогою параметрів шаблону.
Зрозуміло, щоб розробити розширену структуру даних, вам потрібно зрозуміти основну нерозширену структуру даних.
Дерева AVL можуть бути швидшими, ніж червоно-чорні дерева, якщо ви здійснюєте набагато більше пошукових запитів, ніж вставки / видалення (і за умови, що вам не потрібні ці операції розділення / приєднання), тому залежно від програми вони можуть бути дуже хорошою базою для нарощування.