Tenemos un conjunto, , de listas de elementos del conjunto . Cada elemento de aparece en una única lista en . Estoy buscando una estructura de datos que pueda realizar las siguientes actualizaciones:N = { 1 , 2 , 3 , . . . , n } N L
: concatena la lista que contiene al final de la lista que contienex
: divide la lista que contiene directamente después dex
También debe realizar las siguientes consultas:
: devuelve si e están en la misma lista e viene después de (pero no es necesariamente adyacente a )x y y x x
: devuelve el primer elemento de la lista que contiene
: devuelve el siguiente elemento después de en la lista que contienex
Ya se me ocurrió una estructura de datos que realiza estas actualizaciones en y consultas en tiempo . Estoy interesado principalmente en si ya existe una estructura de datos que pueda hacer esto (¿ojalá más rápido?).O ( l
Motivación: los bosques dirigidos enraizados pueden representarse con dos de estos conjuntos de listas y permiten un cálculo rápido de la accesibilidad en dichos bosques. Quiero ver para qué más se pueden usar y si todo esto ya se sabe.
El problema ancestral menos común se puede usar para resolver el problema de accesibilidad en árboles dinámicos enraizados, por lo que imagino que también le interesará lo siguiente: Algoritmos óptimos para encontrar antepasados comunes más cercanos en árboles dinámicos , por Alstrup y Thorup. Este documento proporciona un límite de tiempo de para enlaces y consultas nca en una máquina de puntero. n mO(n+mloglogn) n m
fuente