Articulo de referencia

ordenación por fusión e inserción

En informática , el algoritmo de ordenación por inserción-fusión o algoritmo de Ford-Johnson es un algoritmo de ordenación por comparación publicado en 1959 por LR Ford Jr. y Se...

En informática , el algoritmo de ordenación por inserción-fusión o algoritmo de Ford-Johnson es un algoritmo de ordenación por comparación publicado en 1959 por LR Ford Jr. y Selmer M. Johnson . [ 1 ] [ 2 ] [ 3 ] [ 4 ] Utiliza menos comparaciones en el peor de los casos que los mejores algoritmos conocidos hasta entonces, la ordenación por inserción binaria y la ordenación por fusión , [ 1 ] y durante 20 años fue el algoritmo de ordenación con el menor número de comparaciones conocido. [ 5 ] Aunque no tiene relevancia práctica, sigue siendo de interés teórico en relación con el problema de la ordenación con un número mínimo de comparaciones. [ 3 ] Es posible que el mismo algoritmo también haya sido descubierto independientemente por Stanisław Trybuła y Czen Ping. [ 4 ]

Una animación del algoritmo de fusión que ordena una matriz de valores aleatorios.

Algoritmo

La ordenación por fusión e inserción realiza los siguientes pasos en una entrada.incógnita{\displaystyle X}denorte{\displaystyle n}elementos: [ 6 ]

  1. Agrupa los elementos deincógnita{\displaystyle X}ennorte/2{\displaystyle \lfloor n/2\rfloor }pares de elementos, arbitrariamente, dejando un elemento sin emparejar si hay un número impar de elementos.
  2. Llevar a cabonorte/2{\displaystyle \lfloor n/2\rfloor }comparaciones, una por par, para determinar el mayor de los dos elementos en cada par.
  3. Ordenar recursivamente elnorte/2{\displaystyle \lfloor n/2\rfloor }elementos más grandes de cada par, creando una secuencia ordenadaS{\displaystyle S}denorte/2{\displaystyle \lfloor n/2\rfloor }de los elementos de entrada, en orden ascendente, utilizando el algoritmo de ordenación por fusión e inserción.
  4. Insertar al inicio deS{\displaystyle S}el elemento que se emparejó con el primer y más pequeño elemento deS{\displaystyle S}.
  5. Inserta el restonorte/21{\displaystyle \lceil n/2\rceil -1}elementos deincógnitaS{\displaystyle X\setminus S}enS{\displaystyle S}, uno a la vez, con un orden de inserción especialmente elegido que se describe a continuación. Utilice la búsqueda binaria en subsecuencias deS{\displaystyle S}(como se describe a continuación) para determinar la posición en la que se debe insertar cada elemento.

El algoritmo está diseñado para aprovechar el hecho de que las búsquedas binarias utilizadas para insertar elementos enS{\displaystyle S}son más eficientes (desde el punto de vista del análisis del peor caso) cuando la longitud de la subsecuencia que se busca es uno menos que una potencia de dos . Esto se debe a que, para esas longitudes, todos los resultados de la búsqueda utilizan el mismo número de comparaciones entre sí. [ 1 ] Para elegir un orden de inserción que produzca estas longitudes, considere la secuencia ordenadaS{\displaystyle S}después del paso 4 del esquema anterior (antes de insertar los elementos restantes), y dejarincógnitai{\displaystyle x_{i}}denotan eli{\displaystyle i}el enésimo elemento de esta secuencia ordenada. Por lo tanto,

S=(incógnita1,incógnita2,incógnita3,),{\displaystyle S=(x_{1},x_{2},x_{3},\dots ),}

donde cada elementoincógnitai{\displaystyle x_{i}}coni3{\displaystyle i\geq 3}está emparejado con un elementoyi<incógnitai{\displaystyle y_{i}<x_{i}}que aún no se ha insertado. (No hay elementosy1{\displaystyle y_{1}}oy2{\displaystyle y_{2}}porqueincógnita1{\displaystyle x_{1}}yincógnita2{\displaystyle x_{2}}estaban emparejados entre sí.) Sinorte{\displaystyle n}es extraño, el elemento no emparejado restante también debe numerarse comoyi{\displaystyle y_{i}}coni{\displaystyle i}mayor que los índices de los elementos emparejados. Entonces, el paso final del esquema anterior se puede expandir en los siguientes pasos: [ 1 ] [ 2 ] [ 3 ] [ 4 ]

  • Dividir los elementos no insertadosyi{\displaystyle y_{i}}en grupos con índices contiguos. Hay dos elementosy3{\displaystyle y_{3}}yy4{\displaystyle y_{4}}En el primer grupo, y la suma de los tamaños de cada dos grupos adyacentes forma una secuencia de potencias de dos. Por lo tanto, los tamaños de los grupos son: 2, 2, 6, 10, 22, 42, ...
  • Ordena los elementos no insertados por sus grupos (índices más pequeños a índices más grandes), pero dentro de cada grupo ordénalos de índices más grandes a índices más pequeños. Por lo tanto, el orden se convierte en:
y4,y3,y6,y5,y12,y11,y10,y9,y8,y7,y22,y21{\ Displaystyle y_ {4},y_ {3},y_ {6},y_ {5},y_ {12},y_ {11},y_ {10},y_ {9},y_ {8},y_ {7},y_ {22},y_ {21}\dots}
  • Utilice este orden para insertar los elementos.yi{\displaystyle y_{i}}enS{\displaystyle S}. Para cada elementoyi{\displaystyle y_{i}}, utilice una búsqueda binaria desde el principio deS{\displaystyle S}hasta pero sin incluirincógnitai{\displaystyle x_{i}}para determinar dónde insertaryi{\displaystyle y_{i}}.

Análisis

Dejardo(norte){\displaystyle C(n)}denota el número de comparaciones que realiza el ordenamiento de fusión-inserción, en el peor de los casos, al ordenarnorte{\displaystyle n}elementos. Este número de comparaciones se puede desglosar como la suma de tres términos:

  • norte/2{\displaystyle \lfloor n/2\rfloor }comparaciones entre pares de elementos,
  • do(norte/2){\displaystyle C(\lfloor n/2\rfloor )}comparaciones para la llamada recursiva y
  • cierto número de comparaciones para las inserciones binarias utilizadas para insertar los elementos restantes.

En el tercer término, el número de comparaciones en el peor de los casos para los elementos del primer grupo es dos, porque cada uno se inserta en una subsecuencia deS{\displaystyle S}de longitud como máximo tres. Primero,y4{\displaystyle y_{4}}se inserta en la subsecuencia de tres elementos(incógnita1,incógnita2,incógnita3){\displaystyle (x_{1},x_{2},x_{3})}. Entonces,y3{\displaystyle y_{3}}se inserta en alguna permutación de la subsecuencia de tres elementos(incógnita1,incógnita2,y4){\displaystyle (x_{1},x_{2},y_{4})}, o en algunos casos en la subsecuencia de dos elementos(incógnita1,incógnita2){\displaystyle (x_{1},x_{2})}. De manera similar, los elementosy6{\displaystyle y_{6}}yy5{\displaystyle y_{5}}de los del segundo grupo se insertan cada uno en una subsecuencia de longitud como máximo siete, utilizando tres comparaciones. De manera más general, el número de comparaciones en el peor de los casos para los elementos en eli{\displaystyle i}el grupo esi+1{\displaystyle i+1}, porque cada uno se inserta en una subsecuencia de longitud como máximo2i+11{\displaystyle 2^{i+1}-1}. [ 1 ] [ 2 ] [ 3 ] [ 4 ] Sumando el número de comparaciones utilizadas para todos los elementos y resolviendo la relación de recurrencia resultante , este análisis puede utilizarse para calcular los valores dedo(norte){\displaystyle C(n)}, dando la fórmula [ 7 ]

do(norte)=i=1norteregistro23i4norteregistro2norte1.415norte{\displaystyle C(n)=\sum _{i=1}^{n}\left\lceil \log _{2}{\frac {3i}{4}}\right\rceil \approx n\log _{2}n-1.415n}

o, en forma cerrada , [ 8 ]

do(norte)=norteregistro23norte42registro26norte3+registro26norte2.{\displaystyle C(n)=n{\biggl \lceil }\log _{2}{\frac {3n}{4}}{\biggr \rceil }-{\biggl \lfloor }{\frac {2^{\lfloor \log _{2}6n\rfloor }}{3}}{\biggr \rfloor }+{\biggl \lfloor }{\frac {\log _{2}6n}{2}}{\biggr \rfloor }.}

Paranorte=1,2,{\displaystyle n=1,2,\dots }El número de comparaciones es [ 1 ]

0, 1, 3, 5, 7, 10, 13, 16, 19, 22, 26, 30, 34, ... (secuencia A001768 en el OEIS )

Relación con otros tipos de comparación

El algoritmo se denomina ordenación por fusión e inserción porque las comparaciones iniciales que realiza antes de su llamada recursiva (emparejar elementos arbitrarios y comparar cada par) son las mismas que las comparaciones iniciales de la ordenación por fusión , mientras que las comparaciones que realiza después de la llamada recursiva (utilizar la búsqueda binaria para insertar elementos uno a uno en una lista ordenada) siguen el mismo principio que la ordenación por inserción . En este sentido, es un algoritmo híbrido que combina la ordenación por fusión y la ordenación por inserción. [ 9 ]

Para entradas pequeñas (hastanorte=11{\displaystyle n=11}) su número de comparaciones es igual al límite inferior de la ordenación por comparación deregistro2norte¡norteregistro2norte1.443norte{\displaystyle \lceil \log _{2}n!\rceil \approx n\log _{2}n-1.443n}Sin embargo, para entradas más grandes, el número de comparaciones realizadas por el algoritmo de fusión-inserción es mayor que este límite inferior. La ordenación por fusión-inserción también realiza menos comparaciones que los números de ordenación , que cuentan las comparaciones realizadas por la ordenación por inserción binaria o la ordenación por fusión en el peor de los casos. Los números de ordenación fluctúan entrenorteregistro2norte0,915norte{\displaystyle n\log _{2}n-0.915n}ynorteregistro2nortenorte{\displaystyle n\log _{2}nn}, con el mismo término principal pero un factor constante peor en el término lineal de orden inferior. [ 1 ]

El algoritmo de ordenación por fusión e inserción es el algoritmo de ordenación con el mínimo número posible de comparaciones paranorte{\displaystyle n}artículos cuandonorte22{\displaystyle n\leq 22}y tiene la menor cantidad de comparaciones conocidas paranorte46{\displaystyle n\leq 46}. [ 10 ] [ 11 ] Durante 20 años, el algoritmo de ordenación por fusión e inserción fue el algoritmo de ordenación con el menor número de comparaciones conocido para todas las longitudes de entrada. Sin embargo, en 1979 Glenn Manacher publicó otro algoritmo de ordenación que utilizaba aún menos comparaciones, para entradas suficientemente grandes. [ 3 ] [ 5 ] Sigue siendo desconocido exactamente cuántas comparaciones se necesitan para la ordenación, para todasnorte{\displaystyle n}, pero el algoritmo de Manacher y los algoritmos de ordenación posteriores que batieron récords han utilizado modificaciones de las ideas de ordenación por fusión e inserción. [ 3 ]

Referencias

  1. 1 2 3 4 5 6 7 Ford, Lester R. Jr. ; Johnson, Selmer M. (1959), "Un problema de torneo", American Mathematical Monthly , 66 (5): 387– 389, doi : 10.2307/2308750 , JSTOR 2308750 , MR 0103159  
  2. 1 2 3 Williamson, Stanley Gill (2002), "2.31 Inserción por fusión (Ford–Johnson)" , Combinatoria para la informática , Dover books on mathematics, Courier Corporation, pp. 66–68 , ISBN  9780486420769
  3. 1 2 3 4 5 6 Mahmoud, Hosam M. (2011), "12.3.1 El algoritmo de Ford-Johnson" , Sorting: A Distribution Theory , Wiley Series in Discrete Mathematics and Optimization, vol. 54, John Wiley & Sons, pp. 286–288 , ISBN   9781118031131
  4. 1 2 3 4 Knuth, Donald E. (1998), "Inserción por fusión", El arte de la programación informática , vol. 3: Ordenación y búsqueda (2.ª ed.), págs. 184–186  
  5. 1 2 Manacher, Glenn K. (julio de 1979), "El algoritmo de ordenación de Ford-Johnson no es óptimo", Journal of the ACM , 26 (3): 441– 456, doi : 10.1145/322139.322145
  6. La descripción original de Ford y Johnson (1959) ordenaba los elementos en orden descendente. Los pasos que se detallan aquí invierten el orden de salida, siguiendo la descripción de Knuth (1998) . El algoritmo resultante realiza las mismas comparaciones, pero produce un orden ascendente.
  7. Knuth (1998) atribuye la fórmula de sumatoria a la tesis doctoral de A. Hadian de 1960. La fórmula de aproximación ya había sido dada por Ford y Johnson (1959) .
  8. Guy, Richard K.; Nowakowski, Richard J. (diciembre de 1995), " Problemas mensuales sin resolver, 1969-1995", American Mathematical Monthly , 102 (10): 921–926 , doi : 10.2307/2975272 , JSTOR 2975272 
  9. Knuth (1998) , p. 184: "Dado que implica algunos aspectos de fusión y algunos aspectos de inserción, lo llamamos inserción de fusión ."
  10. Peczarski, Marcin (2004), "Nuevos resultados en ordenación por comparación mínima", Algorithmica , 40 (2): 133– 145, doi : 10.1007/s00453-004-1100-7 , MR 2072769 
  11. Peczarski, Marcin (2007), "El algoritmo de Ford-Johnson sigue imbatible para menos de 47 elementos", Information Processing Letters , 101 (3): 126–128 , doi : 10.1016/j.ipl.2006.09.001 , MR 2287331