23
METODO DE INTERCALACIÓN La ordenación de datos es un proceso muy frecuente en programación. Esta operación es también un proceso que las personas encuentran comúnmente en sus rutinas diarias. Por ejemplo, cada elemento de la colección de datos de una agenda telefónica tiene un campo nombre, dirección, y un número de teléfono. Una colección de datos clasificados se puede almacenar en un archivo, un vector o tabla, una lista enlazada o un árbol. Cuando los datos están almacenados en vectores, tablas (arrays), listas enlazadas o árboles, la ordenación se denomina ordenación interna. Cuando los datos a clasificar se encuentran almacenados en archivos, en soportes de almacenamiento masivo (cintas o discos) el proceso de ordenación se denomina ordenación externa. INTERCALACIÓN SIMPLE Se tienen dos archivos ordenados y se obtiene al final un solo archivo ordenado que contiene los elementos de los dos archivos iniciales. Este método utilizado por los jugadores de cartas o naipes para ordenar sus barajas. Consiste en mirar las cartas una a una y cuando se ve cada nueva carta se inserta en el lugar adecuado. Para desarrollar el algoritmo se piensa que las cartas se encuentran situadas en una fila encima del tapete; a medida que se ve una carta nueva, ésta se compara con la fila y se debe empujar alguna de ellas a la derecha para dejar espacio e insertar la nueva. Para utilizar el método se inicia con un vector de n posiciones. Comencemos con el subíndice i en la segunda posición incrementando en 1, el elemento del subíndice del vector se elimina de la secuencia y se reinserta en el vector en la posición adecuada. Consideremos un vector de n posiciones. Comencemos con el subíndice i en la segunda posición incrementando en 1, el elemento del subíndice del vector se elimina de la secuencia y se reinserta en el vector en la posición adecuada.

METODO DE INTERCALACIÓN

  • Upload
    jesp12

  • View
    6.032

  • Download
    7

Embed Size (px)

Citation preview

Page 1: METODO DE INTERCALACIÓN

METODO DE INTERCALACIÓN

La ordenación de datos es un proceso muy frecuente en programación. Esta operación es también un proceso que las personas encuentran comúnmente en sus rutinas diarias. Por ejemplo, cada elemento de la colección de datos de una agenda telefónica tiene un campo nombre, dirección, y un número de teléfono. Una colección de datos clasificados se puede almacenar en un archivo, un vector o tabla, una lista enlazada o un árbol. Cuando los datos están almacenados en vectores, tablas (arrays), listas enlazadas o árboles, la ordenación se denomina ordenación interna. Cuando los datos a clasificar se encuentran almacenados en archivos, en soportes de almacenamiento masivo (cintas o discos) el proceso de ordenación se denomina ordenación externa.

INTERCALACIÓN SIMPLE

Se tienen dos archivos ordenados y se obtiene al final un solo archivo ordenado que contiene los elementos de los dos archivos iniciales. Este método utilizado por los jugadores de cartas o naipes para ordenar sus barajas. Consiste en mirar las cartas una a una y cuando se ve cada nueva carta se inserta en el lugar adecuado. Para desarrollar el algoritmo se piensa que las cartas se encuentran situadas en una fila encima del tapete; a medida que se ve una carta nueva, ésta se compara con la fila y se debe empujar alguna de ellas a la derecha para dejar espacio e insertar la nueva.Para utilizar el método se inicia con un vector de n posiciones. Comencemos con el subíndice i en la segunda posición incrementando en 1, el elemento del subíndice del vector se elimina de la secuencia y se reinserta en el vector en la posición adecuada.

Consideremos un vector de n posiciones. Comencemos con el subíndice i en la segunda posición incrementando en 1, el elemento del subíndice del vector se elimina de la secuencia y se reinserta en el vector en la posición adecuada.Algoritmon=tamaño del vector int i,k,aux; boolean band=false; for (k=1;k < n; k++){ aux=vect[k]; i=k-1; band=false; while( i>=0 && !band ){ if(aux < vect){ vect=vect; i--; } 

Page 2: METODO DE INTERCALACIÓN

else{ band=true; } } vect=aux; 

INTERCALACIÓN BINARIA

El algoritmo de ordenación por intercalación simple requiere una exploración o búsqueda secuencial para localizar la posición de un elemento en la sublista ordenada. Si en lugar de considerar una búsqueda secuencial se realizara una búsqueda binaria se mejoraría considerablemente el algoritmo y se aumentaría la velocidad de ejecución. Esta modificación se conoce como método de intercalación binaria.

Este algoritmo utiliza la técnica de dividir y conquistar por lo tanto, divide el vector y toma un elemento pivote y compara contra él los elementos del vector dividido.

Algoritmo:

n=tamaño del vector int i,j,izq,der,m,aux; for(i=1; i < n; i++){ aux=vect; izq=0; der=i-1; while( izq<=der ){ m=(izq+der)/2; if(aux<=vect[m]) der=m-1; else izq=m+1; } j=i-1; while(j>=izq){ vect[j+1]=vect[j]; j--; } vect=aux; 

Page 3: METODO DE INTERCALACIÓN

INTERCALACIÓN MERGE

Cuando se dispone de dos vectores ya ordenados y se desea obtener un tercer vector también ordenado, se puede realizar la ordenación con un método denominado Mezcla (Merge en ingles). Supongamos que A es un vector ordenado de m elementos y B es otro vector ordenado de n elemetos. La operación de mezcla producirá un nuevo vector de m + n elementos.

El método más sencillo, pero menos eficaz, consiste en colocar una lista detrás de la otra y luego ordenarla. Sin embargo este método no aprovecha la propiedad de que los vectores A y B ya están ordenados, por ello debe recurrir normalmente al sistema de mezcla el cual cosiste en comparar los dos primeros elementos de los vectores (A y B) y enviar al menor al tercer vector, continuando con el elemento comparado pero no enviado con el siguiente elemento del vector que contiene al elemento menor comparado anteriormente y así sucesivamente. Una vez que se terminaron los elementos de un vector, se procede a vaciar los elementos restantes del otro vector.

Algoritmo:

m=tamaño del vector1 n=tamaño del vector2 int m,n,i=0,j=0,k=0,p; while( i < m && j < n ){ if( vec1 <= vec2[j] ){ mezcla[k]=vec1; i++; } else{ mezcla[k]=vec2[j]; j++; } k++; } if( i>= m){ for( p=j; p < n; p++){ mezcla[k]=vec2[p]; k++; } } if( j>=n ){ for( p=i; p < m; p++ ){ 

Page 4: METODO DE INTERCALACIÓN

mezcla[k]=vec1[p]; k++; } } 

INTERCALACION BALANCEADA

Una intercalación balanceada de m vías utiliza m archivos de entrada y m archivos de salidaLas k listas ordenadas se distribuyen en forma uniforme en los m archivos de entrada.

Se intercalan las listas de cada uno de los archivos, distribuyendo en forma uniforme las listas resultantes en los archivos de salida (de mayor tamaño que las iniciales).

Se repite el último paso hasta que un archivo de salida contiene una lista ordenada.

INTERCALACION POLIFASICA

Una intercalación polifásica de m vías utiliza 2*m-1 archivos de entrada y 1 archivo de salida. 

Las k listas se distribuyen en forma no uniforme en los 2*m-1 archivos de entrada.

Se intercalan las listas (de mayor tamaño) en el archivo de salida. El archivo de entrada que primero queda vacío pasa a ser archivo de salida y el archivo de salida pasa a ser de entrada. Se repiten los 2 últimos pasos hasta que un archivo de salida contenga las lista ordenada.

bibliografia

Loomiz: "Estructuras de Datos y Organización de Archivos"

http://www.itlp.edu.mx/publica/tutoriales/estructdatos2/tema%203_1.htm

http://www.estructuradedatos.galeon.com/insercion_simple.htm 

Page 5: METODO DE INTERCALACIÓN

Intercalación: no es propiamente un método de ordenación, consiste en la unión de dos arrays ordenados de modo que la unión esté también ordenada. Para ello, basta con recorrer los arrays de izquierda a derecha e ir cogiendo el menor de los dos elementos, de forma que sólo aumenta el contador del array del que sale el elemento siguiente para el array-suma. Si quisiéramos sumar los arrays {1,2,4} y {3,5,6}, los pasos serían:

Inicialmente: i1=0, i2=0, is=0.Primer elemento: mínimo entre 1 y 3 = 1. Suma={1}. i1=1, i2=0, is=1.Segundo elemento: mínimo entre 2 y 3 = 2. Suma={1,2}. i1=2, i2=0, is=2.Tercer elemento: mínimo entre 4 y 3 = 3. Suma={1,2,3}. i1=2, i2=1, is=3.Cuarto elemento: mínimo entre 4 y 5 = 4. Suma={1,2,3,4}. i1=3, i2=1, is=4.Como no quedan elementos del primer array, basta con poner los elementos que quedan del segundo array en la suma:Suma={1,2,3,4}+{5,6}={1,2,3,4,5,6}                                                            

MÉTODO DE INTERCALACIÓNALGORITMO ORDENACIÓN POR INTERCALACIÓN

OBJETIVOS

Conocer los pasos y procedimientos que lleva a cabo el algoritmo de

ordenación por intercalación.

Identificar las ventajas y desventajas que este algoritmo tiene contra los otros

ya vistos en el curso de la materia.

Enunciar las características del algoritmo de ordenación por intercalación y

demostrar mediante un código dicho algoritmo.

Analizar en donde, cuando y por qué podemos utilizar el mencionado

algoritmo.

DESARROLLO

El resultado al aplicar la operación de ordenamiento es encontrar una

permutación de un conjunto de elementos tal que exista una relación de orden

entre los N elementos tomados en secuencia, ya sea en orden ascendente o

Page 6: METODO DE INTERCALACIÓN

descendente.

PARÁMETRO DE EVALUACIÓN PARA ORDENAMIENTOS

Los principales parámetros que se tienen en cuenta para un ordenamiento son

los siguientes:

La rapidez para ejecutar.

La cantidad de memoria utilizada (su importancia ha disminuido).

Respecto a la rapidez para ordenar, normalmente se trata de medir la calidad

del algoritmo con base en el número de comparaciones que se deben efectuar.

Se encuentra que los ordenamientos lineales (basados en listas) son en general

más lentos que los ordenamientos no lineales (basados en estructuras de

árbol).

La diferencia del número de comparaciones se debe a la estructura que

utilizan.

En cuanto a la memoria a utilizar (a pesar de su incremento en los

computadores en los últimos años), en muchos casos no es suficiente debido a

que la cantidad de datos por ordenar normalmente es grande, lo que hace que

no toda la información se pueda almacenar en memoria principal.

ORDENACIÓN POR INTERCALACIÓN (MERGESORT)

El proceso de intercalar consiste en unir N listas ordenadas para conformar una

lista ordenada única. Las listas que se van a intercalar se ordenan por un

campo y la resultante después de la operación de intercalamiento es una lista

ordenada de acuerdo con dicho campo.

El tiempo de ejecución es de O(n log n), y el número de comparaciones es casi

óptimo. Se trata de un buen ejemplo fino de un algoritmo recursivo.

Debido a que las listas están ordenadas, esto se puede hacer en una pasada

sobre la entrada, si la salida se pone en una tercera lista. El algoritmo de

intercalación básico toma dos arreglos de entrada a y b, un arreglo de salida c,

Page 7: METODO DE INTERCALACIÓN

y tres contadores, apa, apb, apc, los cuales primero se ponen al inicio de sus

arreglos respectivos. El menor de a[apa] y b[apb] se copia en la siguiente

entrada de c, y se avanzan los contadores apropiados. Cuando se agota

cualquier lista de entrada, los datos que queden en la otra lista se copian en c.

Un ejemplo de cómo funciona la rutina se da para la siguiente entrada.

1 13 24 26 2 15 27 38

i j k

Si el arreglo a contiene 1, 13, 24, 26 y b 2, 15, 27, 38, el algoritmo procede

como sigue: primero, se hace una comparación entre 1 y 2. El elemento 1 se

agrega a c, y después se comparan 13 y 2.

El 2 se agrega a c, y luego se comparan 13 y 15.

1 13 24 26 2 15 27 38 1 2

i j k

El 13 se agrega a c, y después se comparan 24 y 15. Esto continua hasta

comparar 26 y 27.

1 13 24 26 2 15 27 38 1 2 13

i j k

1 13 24 26 2 15 27 38 1 2 13 15

i j k

1 13 24 26 2 15 27 38 1 2 13 15 24

i j k 

26 se agrega a c, y se agota el arreglo a.

1 13 24 26 2 15 27 38 1 2 13 15 24 26

i j k

Page 8: METODO DE INTERCALACIÓN

El resto del arreglo b se copia en c.

1 13 24 26 2 15 27 38 1 2 13 15 24 26 27 38

i j k

Desde luego, el tiempo para combinar dos arreglos ordenados es lineal porque

a lo más se hacen n-1 comparaciones, donde n es el número total de

elementos. Para ver esto, observe que todas las comparaciones agregan un

elemento al arreglo c, excepto la última, que agrega dos.

Por lo tanto es fácil describir el algoritmo mergesort. Si n = 1, solo hay un

elemento por ordenar, y la respuesta está a la mano. Este algoritmo es una

estrategia clásica de “divide y vencerás”. El problema se divide en dos

problemas menores y se resuelve recursivamente. La fase de vencer consiste

en pegar las dos respuestas. “Divide y vencerás” es un uso muy potente de la

recursión que veremos muchas veces.

El algoritmo mergesort utiliza como auxiliar al metodo de intercalación. El

metodo de fusión empieza de datos desordenados, divede en dos el número de

elementos del vector, reconoce una parte izquierda y una parte derecha. De la

parte izquierda divide en dos nuevamente para reducir el número de

elementos en diferentes vectores y así sucesivamente hasta que los vectores

quedan con un solo elemento para después comparar de dos en dos y

ordenarlos aplicando el método de intercalación hasta llegar a ordenar la parte

izquierda del vector original. Se aplica el mismo procedimiento para ordenar el

vector de la parte derecha.

Métodos de Ordenamiento por intercalación

Page 9: METODO DE INTERCALACIÓN

Los métodos de intercalación se basan el el hecho de dados elementos dentro de dos o más arreglos se ordenen los datos deaciuerdo a un criterio (ascendente, descendente).

Estos métodos son una útili herramienta para manejar ordenamientos en datos que se encuentran en diferentes ficheros también

Intercalación (simple)No es propiamente un método de ordenación, consiste en la unión de dos arrays ordenados de modo que la unión esté también ordenada. Para ello, basta con recorrer los arrays de izquierda a derecha e ir cogiendo el menor de los dos elementos, de forma que sólo aumenta el contador del array del que sale el elemento siguiente para el array-suma. Si quisiéramos sumar los arrays {1,2,4} y {3,5,6}, los pasos serían:

Inicialmente: i1=0, i2=0, is=0.Primer elemento: mínimo entre 1 y 3 = 1. Suma={1}. i1=1, i2=0, is=1.Segundo elemento: mínimo entre 2 y 3 = 2. Suma={1,2}. i1=2, i2=0, is=2.Tercer elemento: mínimo entre 4 y 3 = 3. Suma={1,2,3}. i1=2, i2=1, is=3.Cuarto elemento: mínimo entre 4 y 5 = 4. Suma={1,2,3,4}. i1=3, i2=1, is=4.Como no quedan elementos del primer array, basta con poner los elementos que quedan del segundo array en la suma:Suma={1,2,3,4}+{5,6}={1,2,3,4,5,6}

Ver Código | Archivo Ejecutable

 

Intercalación cuadráticaLa complejidad para ordenar una lista de n elementos es: cuadrática en el peor caso (n * n) -que se da cuando la lista inicial ya está ordenada- y lineal en el mejor (n) -que se da cuanda la lista inicial está ordenada de forma inversa.Para hacer algo más rápido el algoritmo se puede implementar modificando los enlaces entre los elementos de la lista en lugar de aplicar la idea propuesta anteriormente, que requiere crear una nueva lista y borrar la lista no ordenada.

Fusión: Consta de dos partes, una parte de intercalación de listas y otra de divide y vencerás.

- Primera parte: ¿Cómo intercalar dos listas ordenadas en una sola lista ordenada de forma eficiente?

Page 10: METODO DE INTERCALACIÓN

Suponer que se tienen estas dos listas de enteros ordenadas ascendentemente:

lista 1: 1 -> 3 -> 5 -> 6 -> 8 -> 9lista 2: 0 -> 2 -> 6 -> 7 -> 10

Tras mezclarlas queda:

lista: 0 -> 1 -> 2 -> 3 -> 5 -> 6 -> 6 -> 7 -> 8 -> 9 -> 10

Esto se puede realizar mediante un único recorrido de cada lista, mediante dos punteros que recorren cada una. En el ejemplo anterior se insertan en este orden -salvo los dos 6 que puede variar según la implementación-: 0 (lista 2), el 1 (lista 1), el 2 (lista 2), el 3, 5 y 6 (lista 1), el 6 y 7 (lista 2), el 8 y 9 (lista 1), y por llegar al final de la lista 1, se introduce directamente todo lo que quede de la lista 2, que es el 10.

En la siguiente implementación no se crea una nueva lista realmente, sólo se modifican los enlaces destruyendo las dos listas y fusionándolas en una sola. Se emplea un centinela que apunta a sí mismo y que contiene como clave el valor más grande posible. El último elemento de cada lista apuntará al centinela, incluso si la lista está vacía.

Ver Código

Segunda parte: divide y vencerás. Se separa la lista original en dos trozos del mismo tamaño (salvo listas de longitud impar) que se ordenan recursivamente, y una vez ordenados se fusionan obteniendo una lista ordenada. Como todo algoritmo basado en divide y vencerás tiene un caso base y un caso recursivo.

Caso base: cuando la lista tiene 1 ó 0 elementos (0 se da si se trata de ordenar una lista vacía). Se devuelve la lista tal cual está.

Caso recursivo: cuando la longitud de la lista es de al menos 2 elementos. Se divide la lista en dos trozos del mismo tamaño que se ordenan recursivamente. Una vez ordenado cada trozo, se fusionan y se devuelve la lista resultante.

El esquema es el siguiente:

Ordenar(lista L)iniciosi tamaño de L es 1 o 0 entoncesdevolver Lsi tamaño de L es >= 2 entoncesseparar L en dos trozos: L1 y L2.L1 = Ordenar(L1)L2 = Ordenar(L2)L = Fusionar(L1, L2)devolver Lfin

El algoritmo funciona y termina porque llega un momento en el que se obtienen listas de 2 ó 3 elementos que se dividen en dos listas de un elemento (1+1=2) y en dos listas de uno y dos elementos (1+2=3, la lista de 2 elems. se volverá a dividir) respectivamente. Por tanto se vuelve siempre de la recursión con listas ordenadas (pues tienen a lo sumo un elemento) que hacen que el algoritmo de fusión reciba siempre listas ordenadas.

Page 11: METODO DE INTERCALACIÓN

Se incluye un ejemplo explicativo donde cada sublista lleva una etiqueta identificativa.

Dada: 3 -> 2 -> 1 -> 6 -> 9 -> 0 -> 7 -> 4 -> 3 -> 8 (lista original)

se divide en:

3 -> 2 -> 1 -> 6 -> 9 (lista 1)

0 -> 7 -> 4 -> 3 -> 8 (lista 2)·

se ordena recursivamente cada lista:·

3 -> 2 -> 1 -> 6 -> 9 (lista 1)

se divide en:

3 -> 2 -> 1 (lista 11)

6 -> 9 (lista 12)

se ordena recursivamente cada lista:

3 -> 2 -> 1 (lista 11)

se divide en:

3 -> 2 (lista 111)

1 (lista 112)

se ordena recursivamente cada lista:

3 -> 2 (lista 111)

se divide en:

3 (lista 1111, que no se divide, caso base).

Se devuelve 3

2 (lista 1112, que no se divide, caso base).

Se devuelve 2

Page 12: METODO DE INTERCALACIÓN

se fusionan 1111-1112 y queda

2 -> 3. Se devuelve 2 -> 3

1 (lista 112)1 (lista 1121, que no se divide, caso base). Se devuelve 1se fusionan 111-112 y queda:

1 -> 2 -> 3 (lista 11).

Se devuelve 1 -> 2 -> 3··6 -> 9 (lista 12)

se divide en:···6 (lista 121, que no se divide, caso base).

Se devuelve 6···9 (lista 122, que no se divide, caso base).

Se devuelve 9

se fusionan 121-122 y queda:

6 -> 9 (lista 12). Se devuelve 6 -> 9se fusionan 11-12 y queda:

1 -> 2 -> 3 -> 6 -> 9.

Se devuelve 1 -> 2 -> 3 -> 6 -> 9·0 -> 7 -> 4 -> 3 -> 8 (lista 2)·

tras repetir el mismo procedimiento se devuelve 0 -> 3 -> 4 -> 7 -> 8

se fusionan 1-2 y queda:·0 -> 1 -> 2 -> 3 -> 3 -> 4 -> 6 -> 7 -> 8 -> 9, que se devuelve y se termina.

La implementación propuesta emplea un centinela sobre la lista inicial que apunte hacia sí mismo y que además contiene el máximo valor de un entero. La lista dispone de cabecera y centinela, pero obsérvese como se elimina durante la ordenación.

Ver Código

 

Método de intercalación MergeSe aplica la técnica divide-y-vencerás, dividiendo la secuencia de datos en dos subsecuencias hasta que las subsecuencias tengan un único elemento, luego se ordenan mezclando dos subsecuencias ordenadas en una secuencia ordenada, en forma sucesiva

Page 13: METODO DE INTERCALACIÓN

hasta obtener una secuencia única ya ordenada. Si n = 1 solo hay un elemento por ordenar, sino se hace una ordenación de mezcla de la primera mitad del arreglo con la segunda mitad. Las dos mitades se ordenan de igual forma. Ejemplo: Se tiene un arreglo de 8 elementos, se ordenan los 4 elementos de cada arreglo y luego se mezclan. El arreglo de 4 elementos, se ordenan los 2 elementos de cada arreglo y luego se mezclan. El arreglo de 2 elementos, como cada arreglo sólo tiene n = 1 elemento, solo se mezclan.

Intercalación es el proceso de combinar dos o más archivos ordenados en un tercer archivo ordenado. Un ejemplo de una rutina que acepta dos arreglos ordenados a y b de n1 y n2 elementos respectivamente, intercalándolos dentro de un tercer arreglo c que contienen n3 elementos.

Podemos usar esta técnica para ordenar un archivo de la siguiente manera.

1. Dividir el archivo en n susbarchivos de tamaño 1 e intercambiar paresadyacentes (inconexos) de archivos. Entonces tenemos más o menos n/2 archivos de tamaños 2.

2. Repertir el preceos hasta que sólo reste un archivo de tamaño n.

 

La figura que se muestra a continuación ilustra como opera este proceso en el archivo muestra.

METODO DE INTERCALACIÓN: Consiste en la unión de dos arreglos ordenados de modo que la unión esté también ordenada. Para ello, basta con recorrer los arreglos de izquierda a

Page 14: METODO DE INTERCALACIÓN

derecha e ir cogiendo el menor de los dos elementos, de forma que sólo aumenta el contador del arreglo del que sale el elemento siguiente para el arreglo-suma. 

{1,2,4} y {3,5,6}, los pasos serían:Inicialmente: i1=0, i2=0, is=0.Primer elemento: mínimo entre 1 y 3 = 1. Suma={1}. i1=1, i2=0, is=1.Segundo elemento: mínimo entre 2 y 3 = 2. Suma={1,2}. i1=2, i2=0, is=2.Tercer elemento: mínimo entre 4 y 3 = 3. Suma={1,2,3}. i1=2, i2=1, is=3.Cuarto elemento: mínimo entre 4 y 5 = 4. Suma={1,2,3,4}. i1=3, i2=1, is=4.Como no quedan elementos del primer array, basta con poner los elementos que quedan del segundo array en la suma:Suma={1,2,3,4}+{5,6}={1,2,3,4,5,6}

INTERCALACIÓN MERGE:El algoritmo Merge Sort divide el arreglo original en dos arreglos y los coloca en arreglos separados. Cada arreglo es recursivamente ordenado y finalmente se unen los arreglos en un arreglo ordenado. Como cualquiera de los algoritmos de ordenamiento recursivo el algoritmo Merge tiene complejidad de O(n log n). Fue desarrollado por John Von Neumann.

El proceso del Merge es fusionar mitades de arreglos ordenados dentro de un arreglo. Sin embargo, estas mitades de arreglos tienen que ser ordenadas primero, por lo que se requiere de fusionar mitades de arreglos ya ordenados de estas mitades. Este proceso de partición de arreglos en dos mitades termina cuando el arreglo tiene por lo menos dos elementos. El algoritmo es recursivo y su pseudocódigo es el siguiente: 

mergesort(array)if array //tiene por lo menos dos elementosmergesort(mitad izquierda de array)mergesort(mitad derecha de array)merge(ambas mitades dentro de una lista ordenada)

merge(array1,array2,array3)i1, i2, i3 son inicializadoswhile(ambos array2 y array3 contienen elementos)if(array2[i2] < array3[i3]array1[i1++] = array2[i2++]elsearray1[i1++] = array3[i3++]almacenar dentro de array1 los restantes elementos de cualquiera de los arreglos array2 y array3

Page 15: METODO DE INTERCALACIÓN

Este algoritmo es efectivo para grandes cantidades de datos los cuales están almacenados en arreglos. Se basa en lo siguiente:1.- La fusión de dos listas ordenadas. 2.- Si se comienza con una colección pequeña de listas ordenadas, entonces se pueden fusionar repetidas veces las listas pequeñas hasta que al final se fusionen en una lista ordenada final. 3.- Cualquier lista de datos puede ser dividida en pequeñas piezas(con uno o más elementos por pieza), donde cada pieza es ordenada. 

Ventajas:*Mucho más rápido que el heap sort para grandes cantidades de datos

Desventajas:*Uso de más memoria(varios arreglos), recursivo. *Complejo

El algoritmo de Mergesort es un ejemplo clásico de algoritmo que utiliza el principio de dividir para conquistar. Si el vector tiene más de dos elementos se lo divide en dos mitades, se invoca recursivamente al algoritmo y luego se hace una intercalación de las dos mitades ordenadas. Para el ejemplo {40,21,4,9,10,35}, se tiene:

{40,21,4},{9,10,35} <-- Dividimos el arreglo en dos{40},{21,4},{9,10,35} <-- Dividimos el primer arreglo nuevamente{40},{21},{4},{9,10,35} <-- {40} ya está ordenado así que dividimos {21,4}{40},{4,21},{9,10,35} <-- {21} y {4} están ordenados así que se intercalan{4,21,40},{9,10,35} <-- se intercala {40} con {4,21}{4,21,40},{9},{10,35} <-- Se divide el segundo arreglo en dos{4,21,40},{9},{10},{35} <-- Se divide el último arreglo en dos{4,21,40},{9},{10,35} <-- Intercalamos {10} y {35}{4,21,40},{9,10,35} <-- Intercalamos {9} y {10,35}{4,9,10,21,35,40} <-- Intercalamos los dos arreglos y obtenemos el resultado final.

BIBLIOGRAFIA• Komaroff Al. Algorithms and the art of medicine. Am J of Public Health 1982: 72:10-1 • Kantor .G. Automate Medical Algorithms Issue for Anesthesiologists. ASA 2001 Anaheim ,CA. 

Page 16: METODO DE INTERCALACIÓN

6.1.EVALUAR LAS VENTAJAS Y DESVENTAJAS DE LOS METODOS

Para los programadores existen métodos que son buenos, malos y los llamados "chapuzas".

Una chapuza es un método que funciona pero de forma lenta e ineficaz. METODO DE LA BURBUJA VENTAJAS Y DESVENTAJAS El método de la Burbuja tiene las siguientes ventajas:

El algoritmo es compacto Es sencillo ya que comienza al final del array que se va a ordenar y

va hacia atrás hasta llegar al principio del array

El método de la burbujas es un ejemplo de los métodos llamados "chapuzas", ya que algunas veces para poder ordenar los datos puede demorarse de 1 a 2 días. Esta es una de su principal desventaja en comparación con los otros métodos.

El punto flaco de la Ordenación de la Burbuja radica en que solo compara los elementos adyacentes del array.

Si el método comparase primero elementos separados por un amplio intervalo y después se centrase progresivamente en intervalos más pequeños, el proceso sería más eficaz.

Debido a esto se penso en otros algoritmos que son : el algoritmo de ordenación Shell y Ordenación Rápida.

METODO SHELL

VENTAJAS Y DESVENTAJAS Es más eficaz que la Ordenación de la Burbuja.

Las desventajas que tiene son:

Los algoritmos eficientes tienen a ser más complejos que los ineficientes por lo que son más difíciles de expresar con palabras.

Aún siendo la ordenación Shell tan eficiente como es, la ordenación rápida es 2 o 3 veces más eficiente.

Page 17: METODO DE INTERCALACIÓN

METODO DE INTERCALACION(Mezcla)

El método de fusión de listas, además de servir para esta operación será la base de un método de ordenación.

ORDENACION RAPIDA(QUICKSORT)

VENTAJAS El rey de los algoritmos de ordenación es el de Ordenación Rápida.

Es el algoritmo de Ordenación de Propósito general más rápido disponible.

Ordena las cosas de forma muy similar a como lo hacen las personas.

EVALUACION DE LOS ALGORITMOS

Para evaluar los algoritmos debemos tomar en cuenta el COSTO, ESPACIO y TIEMPO.

Para que un algoritmo sea eficiente debemos analizar lo siguiente:

El tiempo de ProcesoEl espacio de Memoria: Ram, DiscoLa estructura de datos UtilizadaEl lenguaje de ProgramaciónUn punto muy importante es el costo por lo que intervienen los siguientes factores:

Espacio de memoria(costo)Volumen de datosTipos de métodos (externo o interno)Que el algoritmo sea Oportuno (TIEMPO)Contar con la información oportunaintegridad(confianza)Tiempo de análisis y Desarrollo(COSTO)CompiladorDurabilidad

COMPARACION DE LOS METODOS DE ORDENACION

Page 18: METODO DE INTERCALACIÓN

La medida universal por la que se juzgan todos los métodos de Ordenación es el número de comparaciones necesarias para ordenar una lista. Para la mayoría de los programadores encuentran más fácil la comparación de métodos de ordenación a base de contar el tiempo que tarda cada método en ordenar un mismo array.

La única desventaja de la ordenación rápida es la cantidad de espacio que necesita en la pila. Al estar implementada la Ordenación con un procedimiento recursivo cada vez que el procedimiento se llama así mismo se asigna espacio en la pila. Si la mayor preocupación al elegir un método de ordenación es el espacio en la pila, será mejor que se utilice la Ordenación Shell.

Los algoritmos de burbuja, selección e Insección (directa, shell) presentan una eficiencia de tipo cuadrático O(n2), lo que implica un aumento en el tiempo de ejecución de los mismos a medida que aumenta el valor de n. Por ello, no son recomendables si el valor de n es grande. El algoritmo de Shell ofrece mejores prestaciones.

Algunos aspectos que influyen en las comparaciones son:

Optimización del Código.

Estructura de datos a implementar.

Determinar el tipo de dato.

cantidad de datos.