Estructura de datos unidad 5

March 25, 2018 | Author: Kevin Daniel Roman Martinez | Category: Areas Of Computer Science, Algorithms, Computer Data, Discrete Mathematics, Applied Mathematics


Comments



Description

INSTITUTO TECNOLÓGICODE LÁZARO CÁRDENAS Estructura de datos Ingeniería en Sistemas Computacionales Unidad 5 Equipo: Erick Amando Hernández Toledo Dominic Campos Avilés Kevin Daniel Román Martínez Profesor: Gabriel Nava Fombona Cd. Y PUERTO LÁZARO CÁRDENAS MICHOACÁN 30 de Octubre del 2014 Unidad 5 Introducción .............................................................................................................. 3 5.1. Algoritmos de Ordenamiento Internos ........................................................... 3 5.1.1 Burbuja........................................................................................................... 3 Ejemplo: .............................................................................................................. 5 5.1.2 Quicksort ....................................................................................................... 6 Ejemplo: .............................................................................................................. 7 5.1.3 Shell Sort........................................................................................................ 9 Ejemplo: ............................................................................................................ 10 5.1.4 Radix ............................................................................................................ 13 Ejemplo: ............................................................................................................ 14 5.2. Algoritmos de ordenamiento Externos ......................................................... 18 5.2.1 Intercalación ................................................................................................ 18 Ejemplo: ............................................................................................................ 18 5.2.2 Mezcla Directa ............................................................................................ 20 Ejemplo: ............................................................................................................ 21 5.2.3 Mezcla Natural ............................................................................................ 22 Ejemplo: ............................................................................................................ 22 La ordenación interna o de arreglos. Realiza numerosas comparaciones. 5. Algoritmos de Ordenamiento Internos 5. Realiza numerosos intercambios. recibe este nombre ya que los elementos o componentes del arreglo se encuentran en la memoria principal de la computadora.Introducción En esta unidad veremos el uso de los algoritmos de ordenamiento.1 Burbuja El método de ordenación por intercambio directo o método de la burbuja.1. la cual puede ser de dos formas distintas: Ascendente (menor a mayor) o Descendente (mayor a menor). Los métodos de ordenación se clasifican en dos categorías: Ordenación interna (de arreglos) y Ordenación externa (de archivos). consiste en ciclar repetidamente a través de la lista. Este algoritmo es uno de los más pobres en rendimiento. comparando elementos adyacentes de dos en dos. Si un elemento es mayor que el que está en la siguiente posición se intercambian. Desventajas:     Muy lento. No requiere memoria adicional. Ventajas:   Fácil implementación. . Ordenar significa reagrupar o reorganizar un conjunto de datos u objetos en una secuencia específica.1. conoceremos sus ventajas y desventajas y así saber cuál usar en diferentes ocasiones que se nos puedan presentar en un futuro cuando queramos realizar algún programa. Para realizar el intercambio se genera un almacenamiento temporal. el segundo elemento toma el lugar del primero y en el lugar del segundo se coloca lo que contiene el almacenamiento temporal. es menor ya que cada pasada que se le da al arreglo se realiza una comparación menos que en la pasada anterior. 2. el cual guarda el dato del primer elemento. Generar un ciclo que inicie desde uno hasta el número de elementos del arreglo. Dentro del segundo ciclo debe existir una comparación que determina el tipo de ordenamiento (ascendente o descendente) entre el primer elemento (posición generado por el segundo ciclo) y el segundo elemento (el que le sigue). Generar un segundo ciclo dentro del anterior que inicie desde cero hasta el número de elementos del arreglo menos dos. 3.Primer procedimiento del método de la burbuja: 1. el cual guarda el dato del primer elemento. Generar un segundo ciclo desde el valor del ciclo anterior más uno hasta el número de elementos menos uno. si la respuesta a la condición es verdadera se realiza un intercambio entre los dos elementos. Una vez que los ciclos terminan la estructura debe quedar ordenada de forma ascendente o descendente. pero este procedimiento es considerado como el pero de los casos ya que si el número de elementos de la estructura es de 100. . Una vez que los ciclos terminan la estructura debe quedar ordenada. la diferencia con el procedimiento anterior radica en el número de comparaciones y posibles intercambios que se presentan. el segundo elemento toma el lugar del primero y en el lugar del segundo se coloca lo que contiene el almacenamiento temporal. 3. Generar un ciclo que inicie desde cero hasta el número de elementos menos dos. se tienen que realizar 9900 comparaciones entes de terminar la ejecución del método. si la respuesta a la condición es verdadera se realiza un intercambio entre los dos elementos. Segundo procedimiento del método de la burbuja: 1. 4. Dentro del segundo ciclo debe existir una comparación que determina el tipo de ordenamiento (ascendente o descendente) entre el primer elemento (posición generada por el primer ciclo) y el segundo elemento (posición generada por el segundo ciclo). 2. 4. Para realizar el intercambio se genera un almacenamiento temporal. en este segundo procedimiento. } } .length-i-1. for(i=0.length-1. j. A[j]=aux.j++) if(A[j+1]<A[j]){ aux=A[j+1].j<A.i++) for(j=0. A[j+1]=A[j]. aux.Ejemplo: public static void burbuja(int [] A){ int i.i<A. 2 Quicksort El ordenamiento rápido (quicksort) es un algoritmo que permite. El algoritmo original es recursivo. En el mejor caso. Elegir un pivote:  El pivote será el primer elemento del arreglo. y otra por los elementos a su derecha. Algoritmo fundamental:        Elegir un elemento de la lista de elementos a ordenar. o  Que el pivote se elija de entre tres elementos del arreglo (cualesquiera). Repetir este proceso de forma recursiva para cada sublista mientras éstas contengan más de un elemento. En el peor caso. La lista queda separada en dos sublistas. Resituar los demás elementos de la lista a cada lado del pivote. continuamos el movimiento a la derecha. al que llamaremos pivote.  El pivote será el elemento que esta a la mitad del arreglo. dividiéndola en dos sublistas de igual tamaño.  Mientras el arreglo en su posición der (arreglo[der]) sea mayor que el pivote.1. ordenar n elementos en un tiempo proporcional a n log n. En el caso promedio. continuamos el movimiento a la izquierda.  Repetir los pasos anteriores hasta que se crucen los índices (izq sea menor o igual a der).  Terminando los movimientos se compara los índices y si izq es menor o igual al der. y por la derecha con der(desde el último elemento). el pivote termina en un extremo de la lista. . el orden es O(n·log n). una formada por los elementos a la izquierda del pivote.  Mientras el arreglo en su posición izq (arreglo[izq]) sea menor que el pivote. en promedio. Técnica de reacomodo de los elementos del lado izquierdo y derecho:  Recorrer el arreglo simultáneamente con izq y der: por la izquierda con izq (desde el primer elemento). los cuales se deben comparar para seleccionar el valor intermedio de los tres y considerarlo como el pivote. Es la técnica de ordenamiento más rápida conocida.5. se intercambian los elementos en esas posiciones y las posiciones se cambian izq a la derecha y der a la izquierda. el pivote termina en el centro de la lista. 120.99.10. int array[] = {12. porque sabemos que a un lado los elementos son todos menores y al otro son todos mayores (o habrían sido intercambiados). .El punto en que se cruzan los índices es la posición adecuada para colocar el pivote.9.1.4. Ejemplo: public class QuickSort{ public static void main(String a[]){ int i.3.13}. out.print( array[i]+" "). } quick_srt(array. lo = T. n).println("Valores antes de QuickSort:\n").print("\n\n\nValores despues de QuickSort:\n\n"). lo). low.length-1). System. lo == low ? lo+1 : lo. } } if (hi < lo) { int T = hi. i < array.println(" Quick Sort\n"). System. } while (lo<hi && array[hi] > mid) { hi--. for(i = 0.out. } public static void quick_srt(int array[]. i++) System. for(i = 0. i++) System. } } .out.out. hi = lo. System.length. i <array. quick_srt(array.println(). System.out. array[lo] = array[hi]. } int mid = array[(lo + hi) / 2]. array[hi] = T. int n){ int lo = low.length.int low.print(array[i]+" ").array. } if (lo < hi) { int T = array[lo].System.println().0. int hi = n. while (lo < hi) { while (lo<hi && array[lo] < mid) { lo++. if (lo >= n) { return.out.out. quick_srt(array. y así sucesivamente hasta que el salto vale 1. los elementos quedaran ordenados en el arreglo más rápidamente. en promedio. . Este salto es constante. Shell Propone que las comparaciones entre elementos se efectúen con salto de mayor tamaño pero con incrementos decrecientes. es una mejora del método de inserción directa. y su valor inicial es N/2 (siendo N el número de elementos. y se vuelven a dar pasadas hasta que no se intercambie ningún elemento. así. En este método no se compara a cada elemento con el de su izquierda.3 Shell Sort Este método se conoce con el nombre de inserción por incrementos decrecientes. utilizado cuando el array tiene un gran número de elementos.1.5. y siendo división entera). con dos observaciones en mente: La ordenación por inserción es eficiente si la entrada está "casi ordenada". La ordenación por inserción es ineficiente. porque se mueve valores sólo una posición a la vez. como en el de inserción. Shell sort es una generalización de la ordenación por inserción. Entonces el salto se reduce a la mitad. Este método. Se van dando pasadas hasta que en una pasada no se intercambie ningún elemento de sitio. sino con el que está a un cierto número de lugares (llamado salto) a su izquierda. Ejemplo: . INT  N+1 Repetir mientras (INT  >1) INT  parte entera ( INT entre 2 ) Bandera True Repetir mientras (Bandera == True) BAND FALSO i1 Repetir mientras ( ( i + INT )  N ) .Algoritmo ENTERO  N+1 Repetir mientras ( ENTERO  >1 ) ENTERO  parte entera ( ENTERO entre 2) Y BAND VERDADERO Repetir mientras ( BAN = VERDADERO) BAND FALSO i1 Repetir mientras (( i + ENTERO)  N) Si A [ I ] > L[I + ENTERO ] entonces aux  L[I] L[I]  L[I+ENTERO]  A[I+ ENTERO] AUX BAND VERDADER O Fin del condicional } Hacer I  I + 1 {Fin del paso ciclo } {Fin del ciclo de paso} {Fin del ciclo del paso} (INT. I y AUX son variables de tipo entero Band es una variable de tipo booleano). .(3ª-1)/2 Donde ª = 0.3. .. .11.1... .40. .Si L [ i ] > L[ i + INT ] entonces aux  L[ i ] L[ i ]  L[ i + INT ] L[ i + INT ] aux Bandera  True FinSi ii+1 FinRepetir FinRepetir FinRepetir Analisis de Eficiencia del Metodo de Shell No se ha podido establecer hasta el momento la mejor secuencia de incrementos cuando N es grande. En l969 Pratt descubrió que el tiempo de ejecución del algoritmo es del orden de n*(log n).2ª-1 SECUENCIAS 1.5.13....(2ª1)/3 1. .4.9. ..3... .2ª +1 1.3..2.15..5. 1. . Se mencionará que en unos estudio realizados en la universidad de Stanford en 1971 por Peterson y Rusell muestran que las mejores secuencia para los valores de N comprendidos entre 100 y 60 000 son las presentadas a continuación. .3.7... 3. 7. 7) B = 16  Hexadecimal . B = 10  Decimal (0. 4. 1. 6. 3. 5.1. 1) B = 8  Octal (0.4 Radix El método de Radix considera la estructura de los elementos a ordenar. 6. el sistema considerado es el decimal. 5. 2. 1. 4.5. 2. Considera que los datos que serán ordenados están representados en una Base B del sistema de números ( B = Base = Radix = Raíz) Si B = 10. 9) B = 2  Binario (0. La ordenación se realiza comparando números o carácter en la misma posición. 8. Ejemplo: . Ordenación Radix: . Ordenación Radix: . Ordenación Radix: Si B = 2. los datos a clasificar están en forma Binaria: 00012 = 110 00102 = 210 00112 = 310 01002 = 410 Datos Iniciales 1ra Columna 2da Columna Datos Clasificados . . El proceso se repite hasta que alguno de los archivos quede vacío y los elementos del otro archivo se almacenan directamente en el archivo resultado.out.2. n= dato. } intercalacion (arreglo.2. System. que permite organizar los elementos de un archivo. arreglo [i]= dato. int n = 0.println("Longitud de arreglo: "). int[] arreglo = new int [n].i<=n-1 .1 Intercalación Algoritmo de ordenación externa.nextInt().out. Algoritmos de ordenamiento Externos 5. de forma ascendente o descendente. i++) { System.util. Ejemplo: import java.println("Elemento [" +i+ "]= ").n).in).nextInt().Scanner.5. el menor es almacenando en el archivo de resultado y el otro se compara con el siguiente elemento del archivo si existe. Public class Intercalacion { public static void main (String[] args) { Scanner dato = new Scanner (System. Consiste en leer un registro de cada archivo y compararlos. for (int i=0 . i++) x[i] = aux[i].i<n . int tam = 1. int n) { int[] aux = new int[n]. "). i++) aux[k++] = x[i].println("arreglo[i]+". for (i=0 . tam = 2 } . } public static void intercalacion (int[] x.i<=n-1 . LinfUno = u2 + 1 } for (i=LinfUno. k<n.for (int i=0 . i++) System.out. la fuente se convierte en el nuevo destino y viceversa..Dividir la secuencia A en dos mitades denominadas B y C.. El destino de los elementos combinados se cambia después de que cada par ha sido ordenado para llenar uniformemente las dos secuencias que son el destino.. . 3.Mezclar B y C combinando cada elemento en pares ordenados. b) Algoritmo 1.Repetir los pasos anteriores duplicando cada vez la longitud de las secuencias combinadas hasta que quede ordenada la secuencia original.Fin del Algoritmo.2..Llamar A la secuencia mezclada y repetir los pasos 1 y 2. Un arreglo individual puede usarse en lugar de dos secuencias si se considera como de doble extremo..2 Mezcla Directa a) Descripción Este método de llama mezcla porque combina dos o más secuencias en una sola secuencia ordenada por medio de la selección repetida de los componentes accesibles en ese momento. 5. Después de cada pasada los dos extremos del arreglo intercambian de papel.. En este caso se tomaran elementos de los dos extremos del arreglo para hacer la mezcla.5.Inicio 2. 4. esta vez combinando los pares en cuádruples ordenados. 6. Ejemplo: . el segundo archivo de salida quede vacío y el primero queda completamente ordenado. La idea central de este algoritmo consiste en realizar particiones tomando secuencias ordenadas de máxima longitud en lugar de secuencias ordenadas de tamaño fijo previamente determinadas. como la intercalación directa. alternándolas entre los dos archivos auxiliares.3 Mezcla Natural La mezcla natural o mezcla equilibrada es un algoritmo de ordenación externa. El archivo original y tres archivos auxiliares. El proceso termina cuando al finalizar un paso. Ejemplo: . Para aplicar este algoritmo. Repitiendo este proceso. se logra que el archivo quede completamente ordenado.2. alternativamente en cada paso del algoritmo.5. que se encarga de organizar los elementos de un archivo de forma ascendente o descendente. Posteriormente se realiza la fusión de esas secuencias ordenadas. De estos cuatro archivos. dos serán considerados de entrada y dos de salida. se necesitarán cuatro archivos.
Copyright © 2024 DOKUMEN.SITE Inc.