METODOS DE ORDENACION ORDENAMIENTO Y BUSQUEDA (ALGORITMOS)
1. UNIDAD TEMÁTICA 4: REPRESENTACIÓN Y
MANIPULACIÓN DE ESTRUCTURAS: ALGORITMOS DE
ORDENAMIENTO Y DE BÚSQUEDA
1. Introducción
2. Estructura de datos
3. Clasificación de Estructuras de datos
4. Estructuras de datos Estáticas.- Arreglos
5. Algoritmos de Ordenamiento:
* Burbuja * Shell
* Selección * Mezcla
* Inserción * Montículo
* Rápido
2. UNIDAD TEMÁTICA 4: REPRESENTACIÓN Y
MANIPULACIÓN DE ESTRUCTURAS: ALGORITMOS DE
ORDENAMIENTO Y DE BÚSQUEDA
6. Algoritmos de Búsqueda:
* Lineal o Secuencial
* Binaria
3. 1. Introducción
La información que se maneja de manera cotidiana puede
ser organizada y analizada, de tal manera que nos ofrezca
una serie de alternativas para en su momento utilizarla de
forma adecuada.
La idea es obtener el mayor beneficio del análisis y
concentración de toda la información.
Para esto podemos hacer uso de las estructuras de datos.
4. 2. Estructura de datos
Una estructura de datos es una colección de datos que
tienen el mismo nombre.
Los medios por los cuales se relacionan unos elementos
con otros determinan el tipo de estructura de datos.
El valor de la estructura de datos se determina por:
El valor de los elementos.
La composición de los elementos.
5. 3.Clasificación de Estructura
de datos
Las estructuras de datos se pueden clasificar en dos
grandes grupos:
Estáticas Arreglos (vectores y
matrices)
Registros (struct)
Archivos (file)
Dinámicas Lineales
Pilas
Colas
Listas
No lineales
Árboles
Grafos
6. 4.Estructura de datos Estática:
Arreglos
Un arreglo (disposición, vector o lista, tabla o matriz)
es una estructura de datos utilizada para almacenar un
conjunto de datos del mismo tipo.
Un arreglo se identifica por su nombre y se le asocia
con un nombre válido de variable.
Los componentes individuales de un arreglo se llaman
elementos y se distinguen entre ellos por el nombre del
arreglo seguido de uno o varios índices o subíndices entre
corchetes.
7. 4.Estructura de datos Estática:
Arreglos
Los elementos de un arreglo se almacenan en la memoria
de la computadora en posiciones adyacente (un elemento
por posición).
Los elementos del arreglos se pueden procesar
individualmente todas las veces que se desee, o bien todo
el arreglo completo.
Los arreglos se clasifican en: unidimensionales,
bidimensionales y multidimensionales.
8. 4.Estructura de datos Estática:
Arreglos
Para poder utilizar arreglos en un problema es necesario
declararlos previamente al comienzo del programa
indicando el número y tipo de elementos que puede
contener.
4
12
3 4 12 3 0 7 14
0
7
14
9. 4.Estructura de datos Estática:
Arreglos
Un arreglo unidimensional o vector es una secuencia de
elementos en la que todos son del mismo tipo y en los que
el orden es significativo.
El orden viene dado por el subíndice del vector.
K[0] 4
K[1] 12
4 12 3 0 7 14
K[2] 3
K[0] K[1] K[2] K[3] K[4] K[5]
K[3] 0
K[4] 7
K[5] 14
10. 4.Estructura de datos Estática:
Arreglos
La declaración del número y el tipo de elementos se
realiza de diferentes formas según el tipo de lenguaje en
el que se vaya a implementar.
int A[10]; float x[7]; char p[12];
Las operaciones con los vectores o listas se pueden
realizar en forma individual o sobre el vector completo
mediante las instrucciones básicas y estructuras de
control.
11. 4.Estructura de datos Estática:
Arreglos
Operaciones Asignación Operaciones Recorrido
sobre los Lectura sobre el vector Búsqueda
elementos Escritura completo Inserción
Eliminación
12. 4.Estructura de datos Estática:
Arreglos
Un arreglo bidimensional es un vector de vectores.
Es un conjunto de elementos, todos del mismo tipo, en los
que el orden de los componentes es significativo y en el
que se necesitan dos subíndices para definir cualquier
elemento.
Se le llama también tabla o matriz. 4 10
12 25
3 7
0 4
7 12
14 9
13. 5. ALGORITMOS DE ORDENAMIENTO
La ordenación (sort) de datos consiste en la disposición de
los mismos de acuerdo a cierta característica.
Una colección de datos clasificados se pueden almacenar
en un archivo, vector o tabla, una lista enlazada o árbol.
14. 5. ALGORITMOS DE ORDENAMIENTO
Clasificación de ordenación:
Interna.- cuando los datos son almacenados en vectores,
listas enlazadas, tablas o arboles.
Externa.- aquellos que están almacenados en archivos,
cintas o dispositivos electrónicos.
15. 5. ALGORITMOS DE ORDENAMIENTO
Clasificación de ordenación:
Ascendente.- cuando se tiene de menor a mayor los
elementos de la lista, ya sea alfabéticamente o
numéricamente.
Descendente.- cuando se tiene de mayor a menor los
elementos de la lista.
16. 5. ALGORITMOS DE ORDENAMIENTO
Burbuja
Llamado también de intercambio directo o bubble sort.
Es uno de los mas conocidos.
Mas sencillo.
Mas fácil de implementar.
17. 5. ALGORITMOS DE ORDENAMIENTO
Burbuja
Idea Básica:
Comparar elementos consecutivos en cada paso a lo largo
del arreglo.
Cada vez que se realiza una comparación, los elementos se
intercambian entre si en caso de no estar en orden.
Se le llama de burbuja, porque en la ordenación los
elementos mas ligeros suben en la lista.
18. 5. ALGORITMOS DE ORDENAMIENTO
Burbuja
Idea Básica:
Se pasa varias veces a través del arreglo en forma
secuencial.
Cada paso consiste en la comparación de cada elemento con
su sucesor, y el intercambio de los dos elementos si no están
en el orden correcto.
19. 5. ALGORITMOS DE ORDENAMIENTO
Burbuja
Simulación del funcionamiento del método de burbuja
usando un programa de C.
Programa-ordenamiento-burbuja
Programa en C de burbuja
20. 5. ALGORITMOS DE ORDENAMIENTO
Burbuja
Analisis de eficiencia.-
Hay n-1 comparaciones y pasos en este método. Por lo que el
numero total de comparaciones es O(n ).
El numero de intercambios depende del orden original del
archivo.
21. 5. ALGORITMOS DE ORDENAMIENTO
Burbuja
Análisis de eficiencia.-
La única característica redentora de este ordenamiento, es
que requiere de poco espacio adicional para guardar el valor
temporal para el intercambio y de algunas variables enteras
simples.
Que es O(n) en el caso de un arreglo ordenado en su
totalidad o casi desordenado en su totalidad.
22. 5. ALGORITMOS DE ORDENAMIENTO
Selección
La idea básica de esta ordenación es :
Encontrar el elemento menor ( o mayor) de la lista y
colocarlo en la primera posición, a continuación, el elemento
siguiente menor (o mayor) se lleva a la segunda posición y
así sucesivamente hasta que queda ordenado.
Cualquier ordenamiento pos selección puede
conceptualizarse como un algoritmo que usa una cola de
prioridad descendente.
23. 5. ALGORITMOS DE ORDENAMIENTO
Selección
Simulación del funcionamiento del método de selección
usando un programa de C.
Programa-ordenamiento-selección
Programa en C del método de selección
24. 5. ALGORITMOS DE ORDENAMIENTO
Selección
Análisis de eficiencia.-
En el primer paso se efectúan n-1 comparaciones, en el
segundo n-2 comparaciones y así sucesivamente. O sea que
es del orden de O(n2).
El numero de intercambios es siempre n-1.
Solo se requiere un poco de memoria adicional, para guardar
unas variables temporales.
25. 5. ALGORITMOS DE ORDENAMIENTO
Selección
Análisis de eficiencia.-
El ordenamiento puede ser categorizado como mas rápido
que el de burbuja.
No hay mejora si el arreglo esta ordenado o desordenado.
A pesar de ser fácil de codificar, es improbable que se use
este método, solamente cuando son arreglos pequeños.
26. 5. ALGORITMOS DE ORDENAMIENTO
Rápido o QuickSort
Se le llama de Intercambio por partición.
Se define como un proceso recursivo.
Se basa en la técnica «divide y vencerás»
Se basa en el método de burbuja
27. 5. ALGORITMOS DE ORDENAMIENTO
Rápido o QuickSort
Idea Básica:
Se escoge un elemento a la mitad de la lista, llamado
pivote.
Se tienen los elementos <= a la izquierda del pivote.
Se tienen los elementos >= a la derecha del pivote.
28. 5. ALGORITMOS DE ORDENAMIENTO
Rápido o QuickSort
Simulación del funcionamiento del método rápido usando
un programa de C.
Programa-ordenamiento-rápido
Programa en C del método rápido
29. 5. ALGORITMOS DE ORDENAMIENTO
Rápido o QuickSort
Análisis de eficiencia
Tiene aparente propiedad de trabajar mejor para
elementos desordenados completamente, que para
elementos semiordenados.
En promedio para todos los elementos, el método hace
O(nlogn) comparaciones, el cual indica que es eficiente.
Para listas grandes consume mas memoria.
Se considera el método mas eficiente de los algoritmos.
30. 5. ALGORITMOS DE ORDENAMIENTO
Inserción
Se le llama de Inserción directa.
Es relativamente sencillo.
Se basa en intentar construir una lista ordenada.
También llamado método de la baraja o naipes.
31. 5. ALGORITMOS DE ORDENAMIENTO
Inserción
Idea Básica:
Hacer comparaciones, en donde en cada iteración forma
una lista ordenada.
Donde la primera pasada compara los dos primeros
elementos y los ordena.
La siguiente pasada, toma el tercer elemento y lo
compara con los dos anteriores, colocando a este en su
posición correcta.
Y así sucesivamente, hasta que queda ordenado.
32. 5. ALGORITMOS DE ORDENAMIENTO
Inserción
Simulación del funcionamiento del método de inserción
usando un programa de C.
Programa-ordenamiento-inserción
Programa en C del método de inserción
33. 5. ALGORITMOS DE ORDENAMIENTO
Inserción
Ventajas:
Fácil de implementar.
Requerimientos minimos de memoria.
Desventajas:
Lento
Realiza numerosas comparaciones.
34. 5. ALGORITMOS DE ORDENAMIENTO
Inserción
Análisis de eficiencia
Es de utilidad para listas ordenadas o semiordenadas, ya
que realiza pocos desplazamientos.
Da mejores resultados que el de Selección y el de Burbuja.
En promedio para todos los elementos, el método tiene
complejidad O(n2), el cual indica que es eficiente.
Estabilidad.- nunca intercambia datos con claves iguales.
Requerimientos de memoria.- una variable adicional para
los intercambios.
35. 5. ALGORITMOS DE ORDENAMIENTO
Shell
Versión mejorada de Inserción.
Se le conoce como de inserción con decrementos
(incrementos decrecientes).
Es una generalización de inserción tomando en cuenta
que:
El ordenamiento por inserción es eficiente si la lista
esta casi ordenada.
El ordenamiento por inserción es ineficiente porque
mueve los valores una posición a la vez.
36. 5. ALGORITMOS DE ORDENAMIENTO
Shell
Idea básica:
Compara elementos no contiguos, y separados a una gran
distancia.
Si los elementos no están en orden se intercambian.
Comienza especificando un salto, comparando elementos
separados por dicho salto y se intercambian si es
necesario.
Se divide el intervalo por dos y se repite el proceso.
Al finalizar el recorrido del arreglo, el salto es de uno y la
ordenación funciona como burbuja.
37. 5. ALGORITMOS DE ORDENAMIENTO
Shell
Simulación del funcionamiento del método de Shell usando
un programa de C.
Programa-ordenamiento-shell
Programa en C del método shell
38. 5. ALGORITMOS DE ORDENAMIENTO
Shell
Análisis de eficiencia
Los requerimientos reales de tiempo para un
ordenamiento especifico depende del numero de
elementos en la lista y de sus valores reales.
Se ha demostrado que el orden de Shell sort puede
aproximarse a O(n(logn) 2) si se usa una secuencia
adecuada de incrementos.
39. 5. ALGORITMOS DE ORDENAMIENTO
Mezcla
Se le llama también método de intercalación por fusión.
Llamado Merge Sort.
Es un algoritmo recursivo con un mínimo de
comparaciones.
Aplicación clásica de la estrategia para resolución de
algoritmos «divide y vencerás».
40. 5. ALGORITMOS DE ORDENAMIENTO
Mezcla
Idea básica:
Dividir el arreglo en dos listas y ordenar cada una por
separado.
Cuando están ordenadas, se pueden ir mezclando para así
generar la lista ordenada original mas fácilmente.
La fusión de arreglos permite un método de ordenación
rápido y potente.
41. 5. ALGORITMOS DE ORDENAMIENTO
Mezcla
Simulación del funcionamiento del método de Mezcla o
Merge Sort usando un programa de C.
Programa-ordenamiento-mezcla
Programa en C del método mezcla
42. 5. ALGORITMOS DE ORDENAMIENTO
Mezcla
Análisis de eficiencia
Trabaja con una lista auxiliar, lo cual consume memoria y
obviamente trabajo extra al copiar las listas.
43. 5. ALGORITMOS DE ORDENAMIENTO
Heap
Algoritmo de ordenación recursivo.
Es no estable.
Su complejidad es de O(nlogn).
Se basa en una propiedad de los montículos, en la que, la
cima contiene el menor elemento (o el mayor) de todos
los almacenados en el.
Heap.- significa cola de prioridades.
44. 5. ALGORITMOS DE ORDENAMIENTO
Heap
Idea Básica:
Consiste en almacenar todos los elementos de la lista en
un heap (árbol), y luego extraer el nodo que queda como
raíz del árbol (cima).
Se realiza en sucesivas iteraciones, obteniendo así la lista
ordenada.
45. 5. ALGORITMOS DE ORDENAMIENTO
Heap o Montículo
Idea Básica:
Se mapea un árbol binario de tal forma en el arreglo que el
nodo en la posición i es el padre de los nodos en las
posiciones (2*i) y (2*i+1).
El valor de un nodo es mayor o igual a los valores de sus
hijos. El nodo padre tiene el valor mayor de todo su
subárbol .
46. 5. ALGORITMOS DE ORDENAMIENTO
Heap o Montículo
Procedimiento:
Convertir la lista en un árbol.
Construir una lista ordenada de atrás hacia adelante
(mayor a menor) haciendo lo siguiente:
Sacar el valor máximo en el árbol (el de la posición 1).
Poner el valor en la lista ordenada.
Reconstruir el árbol con un elemento menos.
Usar el mismo arreglo para el árbol y la lista ordenada.
47. 5. ALGORITMOS DE ORDENAMIENTO
Heap o Montículo
Simulación del funcionamiento del método de Monticulo o
Heap Sort usando un programa de C.
Programa-ordenamiento-heap
Programa en C del método heap
Grafico del funcionamiento del Heap sort.
48. 5. ALGORITMOS DE ORDENAMIENTO
Heap o Montículo
Análisis de eficiencia
En el caso promedio, el heapsort no es tan eficiente como
el qucksort.
El heapsort requiere 2 veces mas tiempo que el quicksort.
No es muy eficiente para pocos elementos, por la creacion
del árbol y el calculo de la ubicación de padres e hijos.
Requerimientos.- de una sola variable para guardar el
valor de intercambio.