Я использую красно-черное двоичное дерево со связанными листьями в проекте (Java TreeMap
), чтобы быстро находить и перебирать элементы. Проблема в том, что я могу легко получить 35000 предметов или около того на дереве, и несколько раз мне нужно удалить «все элементы выше X», которые могут быть почти всем деревом (например, 30000 предметов сразу, потому что все они больше чем X), и это занимает слишком много времени, чтобы удалить их и каждый раз перебалансировать дерево.Удаление нескольких элементов из балансирующего двоичного дерева сразу
Есть ли какой-нибудь алгоритм, который может помочь мне здесь (чтобы я мог реализовать свою собственную реализацию дерева)?
Что еще вы обычно делаете с данными? Всегда есть компромисс, но вы можете оптимизировать структуру данных/алгоритмы для основных шаблонов использования. – AndrewC
Карта используется для компонента подсветки синтаксиса, он отслеживает каждый токен и его цвет, используя сопоставление от Integer to Token. Каждый цикл рисования мне нужно получить часть дерева («каждый токен между позициями X и Y»), и поэтому элементы также связаны для быстрой итерации. Всякий раз, когда пользователь набирает что-то на компоненте, каждый токен после его удаления ... поэтому, если он редактирует в начале файла, нужно удалить сразу несколько узлов. Если он редактирует в конце файла, нужно немного удалить из дерева. Я пытаюсь оптимизировать это поведение. =/ – paulotorrens