У нас есть набор, списков элементов из множества , Каждый элемент из появляется в одном списке в , Я ищу структуру данных, которая может выполнять следующие обновления:
: объединяет список, содержащий в конец списка, содержащего
: разбивает список, содержащий сразу после
Также необходимо выполнить следующие запросы:
: возвращается если а также находятся в том же списке и идет после (но не обязательно соседствует с )
: возвращает первый элемент списка, содержащий
: возвращает следующий элемент после в списке, содержащем
Я уже придумал структуру данных, которая выполняет эти обновления в и запросы в время. Меня больше всего интересует, существует ли уже структура данных, которая может это сделать (надеюсь, быстрее?).
Мотивация: укорененные направленные леса могут быть представлены двумя из этих наборов списков, и они позволяют быстро вычислить достижимость в таких лесах. Я хочу посмотреть, для чего еще они могут быть использованы, и если все это уже известно.
Наименьший общий предок проблема может быть использован для решения проблемы достижимости в динамических корневых деревьев, так что я полагаю , вы будете также заинтересованы в следующих: Оптимальные алгоритмы поиска ближайшего общего Предков в динамических деревьев , по Alstrup и Thorup. Эта статья дает ограничение по времениO(n+mloglogn) за n ссылки и m NCA запрашивает указатель машины.
источник