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 ]

Algoritmo
La ordenación por fusión e inserción realiza los siguientes pasos en una entrada.deelementos: [ 6 ]
- Agrupa los elementos deenpares de elementos, arbitrariamente, dejando un elemento sin emparejar si hay un número impar de elementos.
- Llevar a cabocomparaciones, una por par, para determinar el mayor de los dos elementos en cada par.
- Ordenar recursivamente elelementos más grandes de cada par, creando una secuencia ordenadadede los elementos de entrada, en orden ascendente, utilizando el algoritmo de ordenación por fusión e inserción.
- Insertar al inicio deel elemento que se emparejó con el primer y más pequeño elemento de.
- Inserta el restoelementos deen, 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 de(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 enson 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 ordenadadespués del paso 4 del esquema anterior (antes de insertar los elementos restantes), y dejardenotan elel enésimo elemento de esta secuencia ordenada. Por lo tanto,
donde cada elementoconestá emparejado con un elementoque aún no se ha insertado. (No hay elementosoporqueyestaban emparejados entre sí.) Sies extraño, el elemento no emparejado restante también debe numerarse comoconmayor 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 insertadosen grupos con índices contiguos. Hay dos elementosyEn 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:
- Utilice este orden para insertar los elementos.en. Para cada elemento, utilice una búsqueda binaria desde el principio dehasta pero sin incluirpara determinar dónde insertar.
Análisis
Dejardenota el número de comparaciones que realiza el ordenamiento de fusión-inserción, en el peor de los casos, al ordenarelementos. Este número de comparaciones se puede desglosar como la suma de tres términos:
- comparaciones entre pares de elementos,
- 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 dede longitud como máximo tres. Primero,se inserta en la subsecuencia de tres elementos. Entonces,se inserta en alguna permutación de la subsecuencia de tres elementos, o en algunos casos en la subsecuencia de dos elementos. De manera similar, los elementosyde 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 elel grupo es, porque cada uno se inserta en una subsecuencia de longitud como máximo. [ 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 de, dando la fórmula [ 7 ]
o, en forma cerrada , [ 8 ]
ParaEl número de comparaciones es [ 1 ]
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 (hasta) su número de comparaciones es igual al límite inferior de la ordenación por comparación deSin 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 entrey, 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 paraartículos cuandoy tiene la menor cantidad de comparaciones conocidas para. [ 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 todas, 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 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
- 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
- 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
- 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
- 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
- ↑ 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.
- ↑ 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) .
- ↑ 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
- ↑ 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 ."
- ↑ 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
- ↑ 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
- Clasificación por comparación
- 1959 en informática