fbpx
Wikipedia

Library sort

Library sort es un algoritmo de ordenación que usa ordenación por inserción, pero con espacios vacíos en el arreglo para acelerar inserciones subsiguientes. El nombre proviene de una analogía:

Suponga que un bibliotecario almacene sus libros alfabéticamente en una estante, empezando por la A desde la izquierda, y continuando a la derecha a lo largo del estante sin espacios entre los libros hasta que termine por la Z. Si el bibliotecario adquiere un libro nuevo que pertenece a la sección B, una vez que encuentra el espacio correcto en la sección B, tiene que mover cada libro a partir de ese hasta el último libro en la sección Z para abrir espacio al libro nuevo. Esto es ordenación por inserción. Sin embargo, si dejara un espacio vacío después de cada letra, mientras hubiera un espacio vacío después de B, sólo tendría que mover unos cuantos libros para poder ubicar el nuevo libro. Esto es el principio básico de Library Sort.

El algoritmo estuvo propuesto por Michael Un. Bender, Martín Farach-Colton, y Miguel Mosteiro en 2004 y estuvo publicado en 2006.[1][2]

Como la ordenación por inserción, Library sort es un algoritmo de ordenamiento por comparación estable y puede ser corrido como un algoritmo en línea; aun así, ha mostrado tener una probabilidad alta de correr en un tiempo O(n log n) (comparable a quicksort), mejor que el tiempo de ordenación por inserción O(n2). El mecanismo utilizado para esta mejora es muy similar a aquello de un skip list.No hay una implementación completa escrita, ni los algoritmos exactos de partes importantes, como la inserción y el re-equilibrio. Sería necesaria más información para discutir cómo la eficiencia de Library sort se compara con otros métodos de ordenamiento en realidad.

Comparado a la ordenación por inserción básica, la desventaja de Library sort es que requiere espacio extra para los espacios vacíos. La cantidad y la distribución del espacio extra depende de la implementación. En principio, la medida del arreglo necesitada es (1 + ε)n, pero sin recomendaciones de cómo escoger ε.[2]

Una debilidad de ordenación por inserción es que puede requerir un número alto de operaciones de intercambio y ser costoso si la memoria de escritura es costosa. Library sort puede mejorar un poco en el paso de inserción, mientras necesite mover menos elementos para abrir el espacio, pero también está añadiendo un sobrecosto en el paso de re-equilibrio. Además, la ubicación de las referencias será pobre comparado a mergesort ya que cada inserción de un conjunto de datos aleatorio puede acceder a memoria que ya no está en la cache, especialmente con conjuntos de datos grande.

Implementación

Algoritmo

Tenemos una arreglo de n elementos. Escogemos el tamaño de espacio vacío que pretendemos dar. Entonces tendríamos una arreglo de medida (1 + ε)n. El algoritmo trabaja en log n rondas. En cada ronda insertamos tantos elementos como hayan, en el arreglo, antes del re-equilibrio de este. Para encontrar la posición donde insertar, aplicamos Búsqueda Binaria en el arreglo y entonces intercambiamos los elementos siguientes hasta que damos con un espacio vacío. Una vez la ronda terminada, nosotros balanceamos el arreglo insertando espacios entre cada elemento.

Siguiendo los tres pasos importantes del algoritmo:

1. Búsqueda binaria: Encontrando la posición de inserción aplicando búsqueda binaria dentro de los elementos ya insertados. Esto puede ser hecho moviéndose por las partes izquierda o derecha de forma recursiva y viendo si encontramos un espacio vacío en el medio.

2. Inserción: Insertando el elemento en la posición encontrada e intercambiando los elementos siguientes 1 por 1 hasta que choquemos con un espacio vacío.

3. Re-Equilibrando: Insertando espacios entre cada par de elementos en el arreglo. Esto toma tiempo lineal, y producto que hay log n rondas en el algoritmo, el re-equilibrio total toma O(n logn).

Pseudocódigo

proc rebalance(A, begin, end) r ← end w ← end * 2 while r >= begin A[w+1] ← gap A[w] ← A[r] r ← r - 1 w ← w - 2 
proc sort(A) n ← length(A) S ← new array of n gaps for i ← 1 to floor(log2(n) + 1) for j ← 2^i to 2^(i+1) ins ← binarysearch(A[j], S, 2^(i-1)) insert A[j] at S[ins] 

Aquí, binarysearch(A, k) efectua búsqueda binaria en los primeros k elementos de A de la ubicación donde se insertará el elemento A[j], saltándose los vacíos. La inserción tendría que favorecer los vacíos sobre los ocupados.

Referencias

  1. http://arxiv.org/abs/cs/0407003
  2. Bender, M. A.; Farach-Colton, M.; Mosteiro M. (2006). «Insertion Sort is O(n log n)». Theory of Computing Systems 39 (3): 391. doi:10.1007/s00224-005-1237-z. 

Enlaces externos

  • Gapped Insertion Sort[1]
  •   Datos: Q3495147

library, sort, algoritmo, ordenación, ordenación, inserción, pero, espacios, vacíos, arreglo, para, acelerar, inserciones, subsiguientes, nombre, proviene, analogía, suponga, bibliotecario, almacene, libros, alfabéticamente, estante, empezando, desde, izquierd. Library sort es un algoritmo de ordenacion que usa ordenacion por insercion pero con espacios vacios en el arreglo para acelerar inserciones subsiguientes El nombre proviene de una analogia Suponga que un bibliotecario almacene sus libros alfabeticamente en una estante empezando por la A desde la izquierda y continuando a la derecha a lo largo del estante sin espacios entre los libros hasta que termine por la Z Si el bibliotecario adquiere un libro nuevo que pertenece a la seccion B una vez que encuentra el espacio correcto en la seccion B tiene que mover cada libro a partir de ese hasta el ultimo libro en la seccion Z para abrir espacio al libro nuevo Esto es ordenacion por insercion Sin embargo si dejara un espacio vacio despues de cada letra mientras hubiera un espacio vacio despues de B solo tendria que mover unos cuantos libros para poder ubicar el nuevo libro Esto es el principio basico de Library Sort El algoritmo estuvo propuesto por Michael Un Bender Martin Farach Colton y Miguel Mosteiro en 2004 y estuvo publicado en 2006 1 2 Como la ordenacion por insercion Library sort es un algoritmo de ordenamiento por comparacion estable y puede ser corrido como un algoritmo en linea aun asi ha mostrado tener una probabilidad alta de correr en un tiempo O n log n comparable a quicksort mejor que el tiempo de ordenacion por insercion O n2 El mecanismo utilizado para esta mejora es muy similar a aquello de un skip list No hay una implementacion completa escrita ni los algoritmos exactos de partes importantes como la insercion y el re equilibrio Seria necesaria mas informacion para discutir como la eficiencia de Library sort se compara con otros metodos de ordenamiento en realidad Comparado a la ordenacion por insercion basica la desventaja de Library sort es que requiere espacio extra para los espacios vacios La cantidad y la distribucion del espacio extra depende de la implementacion En principio la medida del arreglo necesitada es 1 e n pero sin recomendaciones de como escoger e 2 Una debilidad de ordenacion por insercion es que puede requerir un numero alto de operaciones de intercambio y ser costoso si la memoria de escritura es costosa Library sort puede mejorar un poco en el paso de insercion mientras necesite mover menos elementos para abrir el espacio pero tambien esta anadiendo un sobrecosto en el paso de re equilibrio Ademas la ubicacion de las referencias sera pobre comparado a mergesort ya que cada insercion de un conjunto de datos aleatorio puede acceder a memoria que ya no esta en la cache especialmente con conjuntos de datos grande Indice 1 Implementacion 1 1 Algoritmo 1 2 Pseudocodigo 2 Referencias 3 Enlaces externosImplementacion EditarAlgoritmo Editar Tenemos una arreglo de n elementos Escogemos el tamano de espacio vacio que pretendemos dar Entonces tendriamos una arreglo de medida 1 e n El algoritmo trabaja en log n rondas En cada ronda insertamos tantos elementos como hayan en el arreglo antes del re equilibrio de este Para encontrar la posicion donde insertar aplicamos Busqueda Binaria en el arreglo y entonces intercambiamos los elementos siguientes hasta que damos con un espacio vacio Una vez la ronda terminada nosotros balanceamos el arreglo insertando espacios entre cada elemento Siguiendo los tres pasos importantes del algoritmo 1 Busqueda binaria Encontrando la posicion de insercion aplicando busqueda binaria dentro de los elementos ya insertados Esto puede ser hecho moviendose por las partes izquierda o derecha de forma recursiva y viendo si encontramos un espacio vacio en el medio 2 Insercion Insertando el elemento en la posicion encontrada e intercambiando los elementos siguientes 1 por 1 hasta que choquemos con un espacio vacio 3 Re Equilibrando Insertando espacios entre cada par de elementos en el arreglo Esto toma tiempo lineal y producto que hay log n rondas en el algoritmo el re equilibrio total toma O n logn Pseudocodigo Editar proc rebalance A begin end r end w end 2 while r gt begin A w 1 gap A w A r r r 1 w w 2 proc sort A n length A S new array of n gaps for i 1 to floor log2 n 1 for j 2 i to 2 i 1 ins binarysearch A j S 2 i 1 insert A j at S ins Aqui binarysearch A k efectua busqueda binaria en los primeros k elementos de A de la ubicacion donde se insertara el elemento A j saltandose los vacios La insercion tendria que favorecer los vacios sobre los ocupados Referencias Editar http arxiv org abs cs 0407003 a b Bender M A Farach Colton M Mosteiro M 2006 Insertion Sort is O n log n Theory of Computing Systems 39 3 391 doi 10 1007 s00224 005 1237 z Enlaces externos EditarGapped Insertion Sort 1 Datos Q3495147 Obtenido de https es wikipedia org w index php title Library sort amp oldid 126507924, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos