Articulo de referencia

Problema de mantenimiento de pedidos

En informática , el problema del mantenimiento del orden implica mantener un conjunto totalmente ordenado que admita las siguientes operaciones: insert(X, Y) , que inserta X inm...

En informática , el problema del mantenimiento del orden implica mantener un conjunto totalmente ordenado que admita las siguientes operaciones:

  • insert(X, Y), que inserta X inmediatamente después de Y en el orden total;
  • order(X, Y), que determina si X precede a Y en el orden total; y
  • delete(X), lo que elimina X del conjunto.

Paul Dietz introdujo por primera vez una estructura de datos para resolver este problema en 1982. [ 1 ] Esta estructura de datos admite insert(X, Y)enO(registronorte){\displaystyle O(\log n)}(en notación Big O ) tiempo amortizadoorder(X, Y) y en tiempo constante, pero no admite eliminación. Athanasios Tsakalidis utilizó árboles BB[α] con los mismos límites de rendimiento que admiten eliminación enO(registronorte){\displaystyle O(\log n)}y mejoró el rendimiento de inserción y eliminación para O(1){\displaystyle O(1)}tiempo amortizado con indirección. [ 2 ] Dietz y Daniel Sleator publicaron una mejora al tiempo constante del peor caso en 1987. [ 3 ] Michael Bender, Richard Cole y Jack Zito publicaron alternativas significativamente simplificadas en 2002. [ 4 ] Bender, Fineman, Gilbert, Kopelowitz y Montes también publicaron una solución desamortizada en 2017. [ 5 ]

Las estructuras de datos eficientes para el mantenimiento del orden tienen aplicaciones en muchas áreas, incluyendo la persistencia de estructuras de datos , [ 6 ] algoritmos de grafos [ 7 ] [ 8 ] y estructuras de datos tolerantes a fallos. [ 9 ]

Etiquetado de listas

Un problema relacionado con el problema de mantenimiento del orden es el problema de etiquetado de listas, en el que en lugar de la order(X, Y)operación, la solución debe mantener una asignación de etiquetas a partir de un universo de enteros.{1,2,,metro}{\displaystyle \{1,2,\ldots ,m\}}a los elementos del conjunto tales que X precede a Y en el orden total si y solo si a X se le asigna una etiqueta menor que a Y. También debe admitir una operación label(X)que devuelva la etiqueta de cualquier nodo X. Nótese que order(X, Y)se puede implementar simplemente comparando label(X)y label(Y)de modo que cualquier solución al problema de etiquetado de listas proporciona inmediatamente una al problema de mantenimiento del orden. De hecho, la mayoría de las soluciones al problema de mantenimiento del orden son soluciones al problema de etiquetado de listas aumentadas con un nivel de indirección de la estructura de datos para mejorar el rendimiento. Veremos un ejemplo de esto más adelante.

Para un problema de etiquetado de listas en conjuntos de tamaño hastanorte{\displaystyle n}El costo del etiquetado de listas depende de cuán grande seametro{\displaystyle m}es una función denorte{\displaystyle n}. El rango de parámetros relevantes para el mantenimiento de pedidos es parametro=norte1+Θ(1){\displaystyle m=n^{1+\Theta (1)}}, para lo cual unO(registronorte){\displaystyle O(\log n)}Se conoce la solución de costo amortizado, [ 10 ] y2Ω(norte){\displaystyle 2^{\Omega (n)}}para la cual se conoce una solución amortizada en tiempo constante [ 11 ]

Inserción amortizada O(1) mediante indirección

La indirección es una técnica utilizada en estructuras de datos en la que un problema se divide en múltiples niveles de una estructura de datos para mejorar la eficiencia. Típicamente, un problema de tamañonorte{\displaystyle n}se divide en norte/registronorte{\displaystyle n/\log n}problemas de tamañoregistronorte{\displaystyle \log n}Por ejemplo, esta técnica se utiliza en los tries y-rápidos . Esta estrategia también funciona para mejorar el rendimiento de inserción y eliminación de la estructura de datos descrita anteriormente a un tiempo amortizado constante. De hecho, esta estrategia funciona para cualquier solución del problema de etiquetado de listas conO(registronorte){\displaystyle O(\log n)}tiempo amortizado de inserción y eliminación.

Representación de la indirección en una solución basada en árboles para el problema del mantenimiento del orden.
La estructura de datos de mantenimiento de pedidos con indirección. Los elementos totales del pedido se almacenan enO(norte/registronorte){\displaystyle O(N/\log N)}sublistas contiguas de tamañoO(registronorte){\displaystyle O(\log N)}, cada uno de los cuales tiene un representante en el árbol del chivo expiatorio .

La nueva estructura de datos se reconstruye por completo cada vez que crece demasiado o demasiado poco.norte{\displaystyle N}sea ​​el número de elementos del orden total cuando se reconstruyó por última vez. La estructura de datos se reconstruye siempre que el invariantenorte3norte2norte{\displaystyle {\tfrac {N}{3}}\leq n\leq 2N}se incumple mediante una inserción o eliminación. Dado que la reconstrucción se puede realizar en tiempo lineal, esto no afecta al rendimiento amortizado de las inserciones y eliminaciones.

Durante la operación de reconstrucción, elnorte{\displaystyle N}Los elementos del pedido total se dividen enO(norte/registronorte){\displaystyle O(N/\log N)}sublistas contiguas, cada una de tamañoΩ(registronorte){\displaystyle \Omega (\log N)}El problema de etiquetado de listas se resuelve en el conjunto de nodos que representan cada una de las sublistas en su orden original. Se considera que las etiquetas para este subproblema son polinómicas, por ejemplo:metro=norte2{\displaystyle m=N^{2}}, de modo que puedan compararse en tiempo constante y actualizarse en amortizadoO(registronorte){\displaystyle O(\log N)}tiempo.

Para cada sublista se construye una lista doblemente enlazada de sus elementos, almacenando con cada elemento un puntero a su representante en el árbol, así como una etiqueta entera local. Las etiquetas enteras locales también se toman de un rango.metro=norte2{\displaystyle m=N^{2}}, de modo que se puedan comparar en tiempo constante, pero debido a que cada problema local involucra soloΘ(registronorte){\displaystyle \Theta (\log N)}artículos, las etiquetas varíanmetro{\displaystyle m}es exponencial en el número de elementos etiquetados. Por lo tanto, se pueden actualizar enO(1){\displaystyle O(1)}tiempo amortizado.

Consulte el problema de etiquetado de listas para obtener detalles sobre ambas soluciones.

Orden

Dados los nodos de la sublista X e Y, order(X, Y)se puede responder comprobando primero si ambos nodos pertenecen a la misma sublista. Si es así, se determina su orden comparando sus etiquetas locales. En caso contrario, se comparan las etiquetas de sus representantes en el primer problema de etiquetado de listas. Estas comparaciones requieren un tiempo constante.

Insertar

Dado un nuevo nodo de sublista para X y un puntero al nodo de sublista Y, insert(X, Y)inserta X inmediatamente después de Y en la sublista de Y, si hay espacio para X en la lista, es decir, si la longitud de la lista no es mayor que2registronorte{\displaystyle 2\log N}después de la inserción. Su etiqueta local viene dada por el algoritmo de etiquetado de lista local para etiquetas exponenciales. Este caso tomaO(1){\displaystyle O(1)}tiempo amortizado.

Si la lista local se desborda, se divide equitativamente en dos listas de tamañoregistronorte{\displaystyle \log N}Los elementos de cada lista reciben nuevas etiquetas a partir de sus rangos (independientes). Esto crea una nueva sublista, que se inserta en la lista de sublistas, y el algoritmo de etiquetado de listas asigna una etiqueta al nodo de la nueva sublista. Finalmente, X se inserta en la lista correspondiente.

Esta secuencia de operaciones tomaO(registronorte){\displaystyle O(\log N)}tiempo, pero ha habidoΩ(registronorte){\displaystyle \Omega (\log N)}inserciones desde que se creó la lista o se dividió por última vez. Por lo tanto, el tiempo amortizado por inserción esO(1){\displaystyle O(1)}.

Borrar

Dado un nodo de sublista X que se va a eliminar, delete(X)simplemente se elimina X de su sublista en tiempo constante. Si esto deja la sublista vacía, entonces necesitamos eliminar el representante de la lista de sublistas. Dado que al menosΩ(registronorte){\displaystyle \Omega (\log N)} Se eliminaron elementos de la sublista desde que se construyó por primera vez, podemos permitirnos gastar elO(registronorte){\displaystyle O(\log N)}tiempo, el costo amortizado de una eliminación esO(1){\displaystyle O(1)}.

Referencias

  1. Dietz, Paul F. (1982), "Manteniendo el orden en una lista enlazada", Actas del 14.º Simposio Anual de la ACM sobre Teoría de la Computación (STOC '82) , Nueva York, NY, EE. UU.: ACM, págs. 122–127 , doi : 10.1145/800070.802184 , ISBN  978-0897910705.
  2. Tsakalidis, Athanasios K. (1984), "Manteniendo el orden en una lista enlazada generalizada", Acta Informatica , 21 (1): 101– 112, doi : 10.1007/BF00289142 , MR 0747173 .
  3. Dietz, P.; Sleator, D. (1987), "Dos algoritmos para mantener el orden en una lista", Actas del 19.º Simposio Anual de la ACM sobre Teoría de la Computación (STOC '87) , Nueva York, NY, EE. UU.: ACM, págs. 365–372 , doi : 10.1145/28395.28434 , hdl : 1802/5693 , ISBN  978-0897912211Versión completa, Informe técnico CMU-CS-88-113 , Universidad Carnegie Mellon, 1988.
  4. Bender, Michael A. ; Cole, Richard ; Demaine, Erik D. ; Farach-Colton, Martin ; Zito, Jack (2002), "Dos algoritmos simplificados para mantener el orden en una lista", en Möhring, Rolf H.; Raman, Rajeev (eds.), Algorithms – ESA 2002, 10.º Simposio Europeo Anual, Roma, Italia, 17-21 de septiembre de 2002, Actas , Lecture Notes in Computer Science, vol. 2461, Springer, pp. 152-164 , doi : 10.1007/3-540-45749-6_17 , ISBN   978-3-540-44180-9
  5. Bender, Michael A .; Fineman, Jeremy T.; Gilbert, Seth; Kopelowitz, Tsvi; Montes, Pablo (2017), "Mantenimiento de archivos: ¡En caso de duda, cambie el diseño!", en Klein, Philip N. (ed.), Actas del Vigésimo Octavo Simposio Anual ACM-SIAM sobre Algoritmos Discretos, SODA 2017, Barcelona, ​​España, Hotel Porta Fira, 16-19 de enero , Society for Industrial and Applied Mathematics, pp. 1503-1522 , doi : 10.1137/1.9781611974782.98 , ISBN  978-1-61197-478-2
  6. Driscoll, James R.; Sarnak, Neil; Sleator, Daniel D .; Tarjan, Robert E. (1989), "Making data structures persistent", Journal of Computer and System Sciences , 38 (1): 86–124 , doi : 10.1016/0022-0000(89)90034-2 , MR 0990051 .
  7. Eppstein, David ; Galil, Zvi ; Italiano, Giuseppe F .; Nissenzweig, Amnon (1997), "Sparsification—a technique for speeding up dynamic graph algorithms", Journal of the ACM , 44 (5): 669–696 , doi : 10.1145/265910.265914 , MR 1492341 .
  8. Katriel, Irit; Bodlaender, Hans L. (2006), "Ordenación topológica en línea", ACM Transactions on Algorithms , 2 (3): 364– 379, CiteSeerX 10.1.1.78.7933 , doi : 10.1145/1159892.1159896 , MR 2253786  .
  9. Aumann, Yonatan; Bender, Michael A. (1996), "Estructuras de datos tolerantes a fallos", Actas del 37.º Simposio Anual sobre Fundamentos de la Informática (FOCS 1996) , págs. 580–589 , doi : 10.1109/SFCS.1996.548517 , ISBN  978-0-8186-7594-2.
  10. Itai, Alon; Konheim, Alan G.; Rodeh, Michael ( 1981), "Una implementación de colas de prioridad mediante tablas dispersas", ICALP , págs. 417–431 
  11. Bulánek, Jan; Koucký, Michal; Saks, Michael E. (2015), "Límites inferiores ajustados para el problema de etiquetado en línea", SIAM Journal on Computing , vol. 44, pp. 1765-1797  .
  • Dos algoritmos simplificados para mantener el orden en una lista. - Este artículo ( Michael A. Bender , Richard Cole, Erik D. Demaine , Martin Farach-Colton y Jack Zito, 2002) presenta una estructura de datos para el etiquetado de listas con un rendimiento amortizado que no almacena explícitamente un árbol. El análisis presentado es más sencillo que el proporcionado por (Dietz y Sleator, 1987) para una estructura de datos similar.
Obtenido de " https://en.wikipedia.org/w/index.php?title=Order-maintenance_problem&oldid=1276127356 "