Мы используем структуру данных Doubly Linked List для хранения неупорядоченных данных (данные как таковые неупорядочены, однако порядок узлов в списке ссылок важен).Обычной операцией над этой структурой данных является NodeBeforeNode (Node N1, Node N2), которому присваиваются два указателя узлов в списке и определяется, какой из них предшествует другому.
Эта операция занимает линейное время, так как ей необходимоПройдите по списку, чтобы найти другой элемент, который довольно медленный.Чтобы ускорить это, мы кэшировали порядковый номер каждого узла в самом узле и обновляли этот кэш по мере необходимости.Однако обновление кэша является линейным, и операции, которые альтернативно изменяют список и получают доступ к этому кэшу, имеют тенденцию быть очень медленными.
Я ищу предложения по ускорению этого поведения.Мне в основном нужна структура данных, которая позволяет выполнять все следующие операции в постоянном или логарифмическом времени:
- Вставка (после или перед узлом)
- Удаление узла
- NodeBeforeNode
Может кто-нибудь предложить структуру, подобную связанному списку, которая поддерживает то же самое?
Спасибо!