ordenamiento de datos jorge méndez sánchez eliúh cuecuecha hernández mauricio quintero espinoza

49
ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

Upload: elvira-rodriguez-moreno

Post on 03-Feb-2016

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

ORDENAMIENTO DE DATOSJorge Méndez Sánchez

Eliúh Cuecuecha Hernández

Mauricio Quintero Espinoza

Page 2: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

ORDENAMIENTO

El ordenar un grupo de datos significa mover los datos o sus referencias para que queden en una secuencia tal que represente un orden, el cual puede ser numérico, alfabético o incluso alfanumérico, ascendente o descendente.

El ordenamiento se efectúa con base en el valor de algún campo en un registro.

Page 3: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

ORDENAMIENTO

El propósito principal de un ordenamiento es el de facilitar las búsquedas de los miembros del conjunto ordenado.

Recomendable cuando se requiere hacer una cantidad considerable de búsquedas y es importante el factor tiempo.

Page 4: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

ORDENAMIENTO EFICIENTE

Contar el # de comparaciones (C) Contar el # de movimientos de items (M) Estos están en función de el #(n) de items a

ser ordenados.

Page 5: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

TIPOS DE ORDENAMIENTO

Los internos:Los valores a ordenar están

en memoria principal, por lo que se asume que el tiempo que se requiere para acceder cualquier elemento sea el mismo (a[1], a[500], etc).

Los externos:Son aquellos en los que los valores a

ordenar están en memoria secundaria (disco, cinta, cilindro magnético, etc), por lo que se asume que el tiempo que se requiere para acceder a cualquier elemento depende de la última posición accesada (posición 1, posición 500, etc).

Page 6: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

ALGORITMOS DE ORDENAMIENTO

Algoritmos de inserción:Este método toma cada elemento del

arreglo para ser ordenado y lo compara con los que se encuentran en posiciones anteriores a la de él dentro del arreglo. Si resulta que el elemento con el que se está comparando es mayor que el elemento a ordenar, se recorre hacia la siguiente posición superior. Si por el contrario, resulta que el elemento con el que se está comparando es menor que el elemento a ordenar, se detiene el proceso de comparación pues se encontró que el elemento ya está ordenado.

Page 7: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

ALGORITMOS DE ORDENAMIENTO

Algoritmos de inserción:Entre estos algoritmos se encuentran el

de: INSERCION DIRECTA SHELL SORT INSERCION BINARIA.

Page 8: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

ORDENACION POR INSERCION DIRECTAAlgoritmo

1.- Partimos de un arreglo aleatoriamente ordenado, y marcamos su primer elemento como parte ordenada, el resto como desordenada.

Page 9: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

2.- Tomamos el primer numero de la parte no ordenada, y se almacena en una variable temporal.

Page 10: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

3.- Comparamos empezando por el final de la parte ordenada, hasta que se encuentra un elemento menor.

Page 11: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

4.- Se desplaza una posición a la derecha los elementos que han resultado mayores que el que queremos insertar y se coloca el valor de la variable temporal en el lugar encontrado.

Page 12: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

Supóngase que se desea ordenar los siguientes claves del arreglo A utilizando el método de inserción directa el cual consiste en insertar un elemento del arreglo en la parte izquierda del mismo que ya se encuentra ordenada. Este proceso se repite desde el segundo hasta el n-esimo elemento.

Ejemplo 1:A= 15, 67, 08, 16, 44, 27, 12, 35Comparaciones realizadas:1ª pasada A[2] < A[1] 67 < 15 No hay intercambioA= 15, 67, 08, 16, 44, 27, 12, 352ª pasada A[3] < A[2] 08 < 67 Si hay intercambioA= 15, 08, 67, 16, 44, 27, 12, 353ª pasada A[4] < A[3] 08 < 15 Si hay intercambioA= 08, 15, 67, 16, 44, 27, 12, 35Y así sucesivamente...

Page 13: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

INSERCIÓN BINARIA

Page 14: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

Para hablar de este método de ordenación es necesario que esta basado en la búsqueda binaria o dicotómica.

Diatómico = algo que se divide en dos.

Page 15: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

Algoritmo 1.- Hallamos el elemento central del área

comprendida por la parte ordenada más la posición del elemento a insertar

Page 16: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

2.- Comparamos el elemento central con el elemento central es menor o igual, nos quedamos con la parte derecha (sin incluir el elemento central) en caso contrario nos quedamos con la parte izquierda incluyendo el elemento central.

Page 17: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

3.- Repetimos el mismo proceso sobre el área con la que nos quedamos, hasta que dicha área sea nula.

Page 18: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

4.- Cuando el área sea nula, tendremos la posición de inserción.

Page 19: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

código

Page 20: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

METODO DE SHELL SORT

Page 21: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

Es una mejora del método de inserción directa que se utiliza cuando el número de elementos a ordenar es grande. El método se denomina “shell” –en honor de su inventor Donald shell – y también método de inserción con incrementos decrecientes.

En el método de clasificación por inserción, cada elemento se compara con los elementos contiguos de su izquierda, uno tras otro.

Page 22: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

Shell propone que las comparaciones entre elementos se efecto en con saltos de mayor tamaño pero con incrementos decrecientes, así, los elementos quedarán ordenados en el arreglo más rápidamente.

Page 23: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

E l algoritmo Shell Sort mejora el ordenamiento por inserción comparando elementos separados por un espacio de varias posiciones. Esto permite que un elemento haga "pasos más grandes" hacia su posición esperada. Los pasos múltiples sobre los datos se hacen con tamaños de espacio cada vez más pequeños. El último paso del Shell Sort es un simple ordenamiento por inserción, pero para entonces, ya está garantizado que los datos del vector están casi ordenados.

Page 24: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

Para ordenar una secuencia de elementos se procede así: se selecciona una distancia inicial y se ordenan todos los elementos de acuerdo a esa distancia, es decir, cada elemento separado de otro a distancia estará ordenado con respecto a él.

Se disminuye esa distancia progresivamente, hasta que se tenga distancia 1 y todos los elementos estén ordenados.

Page 25: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza
Page 27: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

ALGORITMOS DE ORDENAMIENTO

Algoritmos de intercambio:En este tipo de algoritmos se toman los

elementos de dos en dos, se comparan y se INTERCAMBIAN si no están en el orden adecuado. Este proceso se repite hasta que se ha analizado todo el conjunto de elementos y ya no hay intercambios.

Entre estos algoritmos se encuentran el: BURBUJA QUICK SORT.

Page 28: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

MÉTODO BURBUJA

Se recorre el arreglo intercambiando los elementos adyacentes que estén desordenados. Se recorre el arreglo tantas veces hasta que ya no haya cambios. Prácticamente lo que hace es tomar el elemento mayor y lo va recorriendo de posición en posición hasta ponerlo en su lugar.

Page 29: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

MÉTODO BURBUJA

Page 30: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

QUICK SHORT

El algoritmo trabaja de la siguiente forma:Elegir un elemento de la lista de elementos a ordenar,

al que llamaremos pivote.Resituar los demás elementos de la lista a cada lado del

pivote, de manera que a un lado queden todos los menores que él, y al otro los mayores. Los elementos iguales al pivote pueden ser colocados tanto a su derecha como a su izquierda, dependiendo de la implementación deseada. En este momento, el pivote ocupa exactamente el lugar que le corresponderá en la lista ordenada.

La lista queda separada en dos sublistas, una formada por los elementos a la izquierda del pivote, y otra por los elementos a su derecha.

Repetir este proceso de forma recursiva para cada sublista mientras éstas contengan más de un elemento. Una vez terminado este proceso todos los elementos estarán ordenados.

Page 31: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

QUICK SHORTEjemplo: A: 15,67,08,16,44,27,12,35 Se selecciona A[i] x=15

Primera pasada (DER-IZQ) A[8] >= x 35 >= 15 No hay intercambio A[7] >= x 12 >= 15 Si hay intercambio A: 12,67,08,16,44,27,15,35 (IZQ-DER) A[2] < = X 67 < = 15 Si hay intercambio

A:12,15,08,16,44,27,67,35 2da. Pasada (DER-IZQ) A[6] >= x 27 >= 15 No hay intercambio

A[5] >= x 44 >= 15 No hay intercambio A[4] >= x 16 >= 15 No hay intercambio A[3] >= x 08 >= 15 Si hay intercambio A: 12,08,15,16,44,27,67,35

Page 32: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

QUICK SHORT X=16 (DER-IZQ) A[8]>=x No hay intercambio

A[7]>=x No hay intercambio A[6]>=x No hay intercambio A[5]>=x No hay intercambio A: 12, 08, 15, 16, 44, 27, 67, 35 x=44 (DER-IZQ) A[8]>= x Si hay intercambio A: 12, 08, 15, 16, 35, 27, 67, 44 (IZQ-DER) A[6] < = x No hay intercambio A[7] < = x Si hay intercambio 12, 08, 15, 16, 35,

27, 44, 67

Page 33: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

QUICK SHORT

X=35 (DER-IZQ) A[8] >= x No hay intercambio A[7] >= x No hay intercambio A[6] >= x Si hay intercambio 12, 08, 15, 16, 35, 27, 44, 67 12, 08, 15, 16, 27, 35, 44, 67 12,08 x=12 (DER-IZQ) A[2]>=x Si hay intercambio EL VECTOR ORDENADO:

08,12,15,16,27,35,44,67

Page 34: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

QUICK SHORT void ordena( int vect[], int izq, int der ){ 

            int i = 0, j = 0;             int x = 0, aux = 0;             i = izq;             j = der;             x = vect [ (izq + der) /2 ];             do{                 while( (vect[i] < x) && (j <= der) ){                        i++;}                 while( (x < vect[j]) && (j > izq) ){                        j--;}                 if( i <= j ){                     aux = vect[i];                     vect[i] = vect[j];                     vect[j] = aux;                     i++;  j--;                 }             }while( i <= j );             if( izq < j )                 ordena( vect, izq, j );             if( i < der )                 ordena( vect, i, der );         }

Page 35: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

ALGORITMOS DE ORDENAMIENTO

Algoritmos de selección:En este tipo de algoritmos se

SELECCIONA o se busca el elemento más pequeño (o más grande) de todo el conjunto de elementos y se coloca en su posición adecuada. Este proceso se repite para el resto de los elementos hasta que todos son analizados.Entre estos algoritmos se encuentra el de SELECCION DIRECTA.

Page 36: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

SELECCIÓN DIRECTA

1ª pasada: buscamos entre los últimos n (es decir, 5) elementos el menor de todos, y lo intercambiaremos con la primera posición.45, 52, 21, 37, 49 → Para buscar el menor, necesitaremos un bucle for que recorra los n últimos elementos.45, 52, 21, 37, 49 → El menor es el 21, colocado en tercera posición.45, 52, 21, 37, 49 → Lo intercambiamos con el de la primera posición.21, 52, 45, 37, 49 → Ya tenemos uno en orden. Nos quedan los n-1 últimos.

Page 37: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

SELECCIÓN DIRECTA2ª pasada: buscamos entre los últimos n-1 (es decir, 4) elementos el menor de todos, y lo intercambiaremos con la segunda posición.21, 52, 45, 37, 49 → Recorremos los cuatro últimos y el menor es el 37.21, 37, 45, 52, 49 → Lo intercambiamos con la segunda posición y ya hay dos en orden.3ª pasada: buscamos entre los últimos n-2 (es decir, 3) elementos el menor de todos, y lo intercambiaremos con la tercera posición.21, 37, 45, 52, 49 → El menor es el 45, en tercera posición.21, 37, 45, 52, 49 → El 45 ya estaba en 3ª posición, así que al intercambiarlo con él mismo, se queda donde está. Ya tenemos tres en orden.

Page 38: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

SELECCIÓN DIRECTA

4ª y última pasada: buscamos entre los últimos n-3 (es decir, 2) elementos el menor de todos, y lo intercambiaremos con la cuarta posición.21, 37, 45, 52, 49 → El menor es el 49, en quinta posición.21, 37, 45, 49, 52 → Lo intercambiamos con la cuarta posición. Ya hay cuatro en orden.21, 37, 45, 49, 52 → El último está necesariamente en orden también.

Page 39: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

SELECCIÓN DIRECTA

para i=1 hasta n-1 minimo = i; para j=i+1 hasta n si lista[j] < lista[minimo] entonces minimo = j /* (!) */ fin si fin para intercambiar(lista[i], lista[minimo]) fin para

Page 40: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

ALGORITMOS DE ORDENAMIENTO

Algoritmos de enumeración:En este tipo de algoritmos cada elemento es comparado contra los demás. En la comparación se cuenta cuántos elementos son más pequeños que el elemento que se está analizando, generando así una ENUMERACION. El número generado para cada elemento indicará su posición. Ejemplo : Hashing

Page 41: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

HASHING

Page 42: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

Hash: se refiere a una función o método para generar claves o llaves que representen de manera casi unívoca a un documento, registro, archivo, etc., resumir o identificar un dato a través de la probabilidad, utilizando una función hash o algoritmo hash.

Page 43: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

Consiste en asignar a cada elemento un índice mediante una transformación del elemento. Esta correspondencia se realiza mediante una función de conversión, llamada función hash. 

Correspondencia más sencilla es la identidad, esto es, al número 0 se le asigna el índice 0, al elemento 1 el índice 1, y así sucesivamente. Pero si los números a almacenar son demasiado grandes esta función es inservible.

Page 44: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

Por ejemplo, se quiere guardar en un array la información de los 1000 usuarios de una empresa, y se elige el número de DNI como elemento identificativo. Es inviable hacer un array de 100.000.000 elementos, sobre todo porque se desaprovecha demasiado espacio. Por eso, se realiza una transformación al número de DNI para que nos de un número menor, por ejemplo coger las 3 últimas cifras para guardar a los empleados en un array de 1000 elementos. Para buscar a uno de ellos, bastaría con realizar la transformación a su DNI y ver si está o no en el array.

Page 45: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

1.- Restas sucesivas:Esta función se emplea con claves numéricas entre las

que existen huecos de tamaño conocido, obteniéndose direcciones consecutivas. Un ejemplo serian los alumnos de ingeniería en sistemas que entraron en el año 2005 sus números de control son consecutivos y esta definido el numero de alumnos.

05210800 -05210800»» 005210801 -05210800»» 105210802 -05210800»» 2…05210899 -05210800»» 99

Page 46: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

2.- Aritmética modular:El índice de un número es resto de la división de ese número entre un

número N prefijado, preferentemente primo. Los números se guardarán en las direcciones de memoria de 0 a N-1. Este método tiene el problema de que dos o más elementos pueden producir el mismo residuo y un índice puede ser señalado por varios elementos. A este fenómeno se le llama colisión. Si el número N es el 7, los números siguientes quedan transformados en:

1679 »> 64567 »> 38471 »> 10435 »> 15033 »> 0Mientras mas grande sea número de elementos es mejor escoger un

número primo mayor para seccionar el arreglo en más partes. El número elegido da el número de partes en que se secciona el arreglo, y las cada sección esta compuesta por todos los elementos que arrojen el mismo residuo, y mientras mas pequeñas sean las secciones la búsqueda se agilizara mas que es lo que nos interesa.

Page 47: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

3.- Mitad del cuadrado:Consiste en elevar al cuadrado la clave y coger las cifras centrales. Este método también presenta problemas de colisión.709^2=502681 –> 26456^2=207936 –> 79105^2=11025 –> 10879^2=772641 –> 26619^2=383161 –> 31Nota: en caso de que la cifra resultante sea impar se toma el valor número y el anterior.

Page 48: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

5.- Truncamiento:Consiste en ignorar parte del número y utilizar los elementos restantes como índice. También se produce colisión. Por ejemplo, si un número de 7 cifras se debe ordenar en un arreglo de elementos, se pueden tomar el segundo, el cuarto y el sexto para formar un nuevo número:5700931 »> 7033498610 »> 4810056241 »> 0649134720 »> 1425174829 »> 142

Page 49: ORDENAMIENTO DE DATOS Jorge Méndez Sánchez Eliúh Cuecuecha Hernández Mauricio Quintero Espinoza

5.- Plegamiento:Consiste en dividir el número en diferentes partes, y operar con ellas (normalmente con suma o multiplicación). También se produce colisión. Por ejemplo, si dividimos el número de 7cifras en 2, 2 y 3 cifras y se suman, dará otro número de tres cifras (y si no, se toman las tres últimas cifras): 5700931 »> 57 + 00 + 931 = 9883498610 »> 34 + 98 + 610 = 7420056241 »> 00 + 56 + 241 = 2979134720 »> 91 + 34 + 720 = 8455174929 »> 51 + 74 + 929 = 1054Nota: Estas solo son sugerencias y que con cada problema se pude implementar una nueva función hash que incluso tu puedes inventar o formular.