¿Qué se sabe sobre las estructuras de datos que pueden mantener una secuencia de elementos sujetos a las siguientes dos operaciones?
- Push (x): agrega x al final de la secuencia y devuelve un identificador para su posición en la secuencia
- Extracto (S): dado un conjunto desordenado de identificadores, eliminar los elementos en esas posiciones de la secuencia y devolver una lista de los elementos eliminados en orden de secuencia
Si lo desea, puede pensar en esto como una pila o una cola con una operación dividida que lo divide en dos pilas: la operación de extracción se puede utilizar para implementar una operación pop o de cola, y la secuencia extraída de elementos también se puede poner de nuevo en una pila o cola diferente.
Lo que ya sé: se puede mantener la secuencia como una lista doblemente vinculada, donde cada identificador es solo un puntero a un nodo de lista vinculada, y cada nodo también almacena un número de posición que permite comparaciones rápidas entre las posiciones de dos elementos no relacionados en la secuencia No es difícil actualizar los números de posición a medida que avanza la estructura de datos para que todos sean enteros positivos de valor máximo , donde es el número actual de elementos en la lista. Con esta estructura de datos, la única parte difícil de una operación de extracción es ordenar los elementos extraídos por sus números de posición. Una extracción de elementos toman k O ( k √ tiempo aleatorio esperado utilizando el algoritmo de clasificación de números enteros de Han y Thorup de FOCS 2002, por ejemplo, y una operación de inserción toma tiempo constante.
Lo que no sé: ¿es posible manejar el extracto en tiempo y presionar en tiempo constante? ¿Hay literatura sobre este problema? ¿Es tan difícil como la clasificación de enteros?
Motivación: este es el paso básico necesario para ordenar los elementos en el algoritmo de programación de Coffman-Graham, que también tiene aplicaciones en el dibujo de gráficos. La parte difícil de Coffman-Graham es un ordenamiento topológico lexicográfico. Esto puede hacerse manteniendo, para cada grado diferente, una secuencia de los vértices con ese grado en el subgrafo inducido por los vértices restantes. Luego, elimine repetidamente el primer vértice de la secuencia de vértices de cero grados y agréguelo al orden topológico; extraer los vecinos de de los grados a los que pertenecían anteriormente y empujarlos a la secuencia para el siguiente grado menor. Entonces unv O ( k ) El tiempo para las operaciones de extracción en esta estructura de datos conduciría a una implementación de tiempo lineal del algoritmo de Coffman-Graham.
Desde que originalmente pregunté esto, encontré un artículo de Sethi de 1976 que permite que el algoritmo Coffman-Graham se implemente en tiempo lineal, y lo incluí en mi artículo de Wikipedia sobre el algoritmo Coffman-Graham , por lo que la motivación original es menos significativa. Sin embargo, todavía tengo curiosidad por saber cuál es la respuesta.