Articulo de referencia

Splaysort

En ciencias de la computación , splaysort es un algoritmo de ordenación por comparación adaptativo basado en la estructura de datos de árbol splay . [ 1 ] Algoritmo Los pasos de...

En ciencias de la computación , splaysort es un algoritmo de ordenación por comparación adaptativo basado en la estructura de datos de árbol splay . [ 1 ]

Algoritmo

Los pasos del algoritmo son:

  1. Inicializa un árbol splay vacío
  2. Para cada elemento de datos en el orden de entrada, insértelo en el árbol splay.
  3. Recorre el árbol splay para encontrar el orden ordenado de los datos.

Por lo tanto, el algoritmo puede considerarse una forma de ordenación por inserción o de ordenación por árbol , que utiliza un árbol splay para acelerar cada inserción.

Análisis

Basándonos en el análisis amortizado de los árboles splay, el tiempo de ejecución en el peor de los casos de splaysort, en una entrada con n elementos de datos, es O ( n  log n ), lo que coincide con los límites de tiempo de algoritmos no adaptativos eficientes como quicksort , heap sort y merge sort . 

Para una secuencia de entrada en la que la mayoría de los elementos se colocan cerca de su predecesor en el orden ordenado, o están fuera de orden con solo un pequeño número de otros elementos, splaysort puede ser más rápido que O ( n  log n ), lo que demuestra que es un ordenamiento adaptativo . Para cuantificar esto, sea d x el número de posiciones en la entrada que separan a x de su predecesor, y sea i x el número de elementos que aparecen a un lado de x en la entrada y al otro lado de x en la salida (el número de inversiones que involucran a x ). Entonces, del teorema del dedo dinámico para árboles splay se deduce que el tiempo total para splaysort está acotado por 

incógnitaregistrodincógnita{\displaystyle \sum _{x}\log d_{x}}

y por

incógnitaregistroiincógnita{\displaystyle \sum _{x}\log i_{x}}. [ 2 ]

También se puede demostrar que Splaysort se adapta a la entropía de la secuencia de entrada. [ 3 ]

Resultados experimentales

En experimentos realizados por Moffat, Eddy y Petersson (1996) , splaysort fue entre 1,5 y 2 veces más lento que quicksort en tablas de números aleatorios, y por factores menores que mergesort. Para datos que consistían en registros más grandes, también en orden aleatorio, la cantidad adicional de movimiento de datos realizada por quicksort lo ralentizó significativamente en comparación con los algoritmos basados ​​en punteros, y los tiempos de splaysort y mergesort fueron muy similares. Sin embargo, para secuencias de entrada casi preordenadas (medidas en términos del número de subsecuencias monótonas contiguas en los datos, el número de inversiones, el número de elementos que deben eliminarse para formar una subsecuencia ordenada o el número de subsecuencias monótonas no contiguas en las que se puede particionar la entrada), splaysort se volvió significativamente más eficiente que los otros algoritmos. [ 1 ]

Elmasry y Hammad (2005) compararon splaysort con varios otros algoritmos que se adaptan al número total de inversiones en la entrada, así como con quicksort. Descubrieron que, en las entradas que tenían pocas inversiones como para que un algoritmo adaptativo fuera más rápido que quicksort, splaysort era el algoritmo más rápido. [ 4 ]

Variaciones

Saikkonen y Soisalon-Soininen (2012) modifican splaysort para que sea más adaptable al número de subsecuencias monótonas contiguas en la entrada, e informan sobre experimentos que muestran que el algoritmo resultante es más rápido en entradas que están casi preordenadas según esta medida. [ 5 ]

Referencias

  1. 1 2 Moffat, Alistair; Eddy, Gary; Petersson, Ola (julio de 1996), "Splaysort: rápido, versátil y práctico", Software: Practice and Experience , 26 (7): 781–797 , doi : 10.1002/(SICI)1097-024X(199607)26:7 < 781::AID-SPE35 > 3.3.CO ; 2-2
  2. Cole, Richard (2000), "Sobre la conjetura del dedo dinámico para árboles splay. II. La demostración", SIAM Journal on Computing , 30 (1): 44–85 , CiteSeerX 10.1.1.36.2713 , doi : 10.1137/S009753979732699X , MR 1762706  .
  3. Gagie, Travis (2005), Sorting a low-entropy sequence , arXiv : cs/0506027 , Bibcode : 2005cs........6027G.
  4. Elmasry, Amr; Hammad, Abdelrahman (2005), "Un estudio empírico para algoritmos de ordenación sensibles a las inversiones", Algoritmos experimentales y eficientes: 4.º Taller internacional, WEA 2005, Isla de Santorini, Grecia, 10-13 de mayo de 2005, Actas , Lecture Notes in Computer Science , vol. 3503, Springer, pp. 597–601 , doi : 10.1007/11427186_52 , ISBN   978-3-540-25920-6.
  5. Saikkonen, Riku; Soisalon-Soininen, Eljas (2012), "Un método general para mejorar la ordenación adaptativa basada en inserción", Algoritmos y computación: 23.º Simposio Internacional, ISAAC 2012, Taipéi, Taiwán, 19-21 de diciembre de 2012, Actas , Lecture Notes in Computer Science, vol. 7676, Springer, pp. 217–226 , doi : 10.1007/978-3-642-35261-4_25 , ISBN   978-3-642-35260-7.