Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes...

32
ESTRUCTURA DE DATOS: Tema 5. Ordenamiento y Búsqueda Presenta: David Martínez Torres Universidad Tecnológica de la Mixteca Instituto de Computación Oficina No. 37 [email protected]

Transcript of Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes...

Page 1: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

ESTRUCTURA DE DATOS:Tema 5. Ordenamiento y Búsqueda

Presenta: David Martínez Torres

Universidad Tecnológica de la Mixteca

Instituto de Computación

Oficina No. 37

[email protected]

Page 2: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

Contenido

1. Ordenamiento burbuja

2. Ordenamiento quicksort

3. Ordenamiento mergesort

4. Búsqueda secuencial

5. Búsqueda binaria

6. Búsqueda hash

7. Conclusiones

8. Referencias

Page 3: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

Introducción

Operación de ordenar registros de una tabla en algún orden secuencial de acuerdo a un criterio de ordenamiento

Facilita las búsquedas sobre todo cuando es importante el factor tiempo

Aplicación en directorio telefónico, tablas de contenido, bibliotecas, diccionarios, sistema de inventario, sistema escolar, etc.

Page 4: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

Introducción

Los elementos a ordenar se toman 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 y ya no hay intercambios

Burbuja y Quick-sort

Page 5: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

1. Ordenamiento Burbuja

para i ← 1 hasta N-1

para j ← 0 hasta N-2

si (a[j].id > a[j+1].id)

temp ← a[j]

a[j] ← a[j+1]

a[j+1] ← temp

fin_sifin_para

fin_para

Page 6: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

Ejemplo Algoritmo de la Burbuja

Arreglo inicial: 4 - 3 - 5 - 2 – 1

N i i<=N-1 j j<=N-2 a[j]>a[j+1] a[]

5 1 0 3-4-5-2-1

1 x 3-4-5-2-1

2 3-4-2-5-1

3 3-4-2-1-5

4 x

5 2 0 x 3-4-2-1-5

1 3-2-4-1-5

2 3-2-1-4-5

3 x

4 x

5 3 0 2-3-1-4-5

1 2-1-3-4-5

2 x

3 x

4 x

Page 7: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

… Ejemplo Algoritmo de la Burbuja

Arreglo inicial: 4 - 3 - 5 - 2 – 1

N i i<=N-1 j j<=N-2 a[j]>a[j+1] a[]

5 3 0 2-3-1-4-5

1 2-1-3-4-52 x

3 x

4 x

5 4 0 1-2-3-4-5

1 x

2 x

3 x

4 x

5 5 x

Page 8: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

4. Ordenamiento por método de la Burbuja mejorado

band ← 1para i ← 1 hasta TAM-1 and band=1

band ← 0para j ← 0 hasta TAM-i-1

si (a[j].id > a[j+1].id)temp ← a[j]a[j] ← a[j+1]a[j+1] ← tempband ← 1

finSifinPara

finPara

Page 9: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

Ejercicio

typedef struct {

int idMatricula;

char nombre[30]

float promedio;

}tipoAlumno;

alumnos[TAM]={4,”Pedro”,8.2,

2,”Juan”,7.2,

3,”Juan”,6.5,

1,”Juan”,8.5,

5,”Ana”,8.9};

Page 10: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

4. Ordenamiento por método de la Burbuja mejorado

* Generar un arreglo de estructuras de manera aleatoria tanto id, nombre (puede inicializar un arreglo de cadenas)

* Ordenar por nombre y por promedio simultáneamente

Page 11: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

2. Ordenamiento quicksort

Método de ordenamiento rápido

Mejor que el método de intercambio directo

C. A. Hoare.

Page 12: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

Algoritmo quicksort

Se selecciona un elemento X de una posición cualquiera del arreglo. Ejemplo A[0]

Se recorre el arreglo de derecha a izquierda comparando si los elementos son >= a X. Si un elemento no cumple, se intercambian y se almacena en una variable la posición del elemento intercambiado (se acota el arreglo por la derecha).

Ahora se inicia el recorrido pero de izquierda a derecha, comparando si los elementos son <= a X. Si un elemento no cumple, se intercambian los mismos y se almacena en otra variable la posición del elemento intercambiado (se acota el arreglo por la izquierda).

Se repiten los pasos anteriores hasta que el elemento X encuentra su posición correcta en el arreglo.

Page 13: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

Ordenamiento quicksort

Ordenar las siguientes claves del arreglo A.A: 15 67 8 16 44 27 12 35

Se selecciona A[0], X←15

Primera pasada:

Recorrido de derecha a izquierda

A[7]>=X (35>=15) No hay intercambio

A: 15 67 8 16 44 27 12 35

A[6]>=X (12>=15) No hay intercambio

A: 15 67 8 16 44 27 12 35

A: 12 67 8 16 44 27 15 35

Page 14: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

Segunda pasada:

Recorrido de derecha a izquierda

A[5]>=X (27>=15) No hay intercambio

A[4]>=X (44>=15) No hay intercambio

A[3]>=X (16>=15) No hay intercambio

A[2]>=X (8>=15) Si hay intercambio

A: 12 8 15 16 44 27 67 35

A: 12 67 8 16 44 27 15 35

Recorrido de izquierda a derecha

A[1] <= X (67<=15) si hay intercambio

A: 12 15 8 16 44 27 67 35

Page 15: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

Ordenamiento quicksort

1er conjunto 2do conjunto

A: 12 8 15 16 44 27 67 35

Page 16: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

void qsort(int vector[],int ini, int fin){

int izq,der,x,aux;

x=vector[ini];

izq=ini; der=fin;

do {

while(vector[der]>=x && der>ini)

der--;

if (izq<=der){

aux= vector[izq];

vector[izq]=vector[der];

vector[der]=aux;

izq++;

}

while(vector[izq]<=x && izq<fin)

izq++;

if (izq<=der) {

aux= vector[izq];

vector[izq]=vector[der];

vector[der]=aux;

der--;

}

}while(izq<=der);

if(ini<der)

qsort(vector, ini,der);

if(izq <fin)

qsort(vector,izq,fin);

}

Page 17: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

3. Ordenamiento mergesort

Merge sort utiliza la técnica divide y vencerás para ordenar un arreglo de registros.

El arreglo es dividido de manera recursiva en dos subarreglos de tamaño similar, se detiene en cuanto el tamaño del subarreglo es 1.

A continuación se realiza una mezcla para ordenar los subarreglos, hasta reconstruir el arreglo original de tamaño n

Page 18: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

Ordenamiento mergesort

Ejemplo

Page 19: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

Ordenamiento mergesort

Ejemplo

Page 20: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

void mergeSort(int vector[],int ini, int fin){

int medio;

if(ini<fin){

medio=(ini+fin)/2;

mergeSort(vector, ini, medio);

mergeSort(vector, medio+1, fin);

merging(vector, ini, medio, fin);

}

}

Ordenamiento mergesort

Page 21: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

void merging(int *vector, int ini, int medio, int fin){

int ini1, ini2, i,b[TAM];

for(ini1=ini, ini2=medio+1, i=ini; ini1<=medio && ini2<=fin;i++){

if(vector[ini1]<=vector[ini2])

b[i]=vector[ini1++];

else

b[i]=vector[ini2++];

}

while(ini1<=medio)

b[i++]=vector[ini1++];

while(ini2<=fin)

b[i++]=vector[ini2++];

for(i=ini;i<=fin;i++) {

vector[i]=b[i];

}}

Page 22: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

4. Búsqueda Secuencial

En un arreglo “no ordenado”, se tiene que recorrer todo el array. Encuentra la posición en donde está el elemento

int busquedaSecuencial(tipoAlumno alumnos[], int tam, int

elemento)

int indice ←-1,i

para i ← 0 hasta tam

si alumnos[i].idMatricula=elemento

indice ← i

finSi

finPara

regresa indice

fin

Page 23: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

Ejemplo de Búsqueda secuencial

Dado el arreglo a[]={5,”Pedro”,7.5,

2, “Juan”, 8.0,

1,”Juan”,7.5,

4,”Pedro”,7.3,

3,”Paco”,9.2};

Criterios de búsqueda:

1. matricula

2. nombre

Page 24: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

5. Búsqueda binaria Se aplica a un arreglo ordenado. No recorre todo el arreglo, si lo encuentra se

detiene. Encuentra la posición en la que se encuentra el elemento

int busquedaBinaria(tipoAlumno alumnos[], int tam, int elemento)

int i←0, j←tam //es igual a TAM-1

hacer

medio← ((i+j)/2)

si elemento>alumnos[medio].idMatricula

i←medio+1

sino

j←medio-1

finSi

mientras (alumnos[medio].idMatricula < > elemento y (i<=j) )

si elemento != alumnos[medio].idMatricula

medio ← -1

finSi

regresa medio

fin

Page 25: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

Ejemplo de Búsqueda binaria

Dado el arreglo a[]={1,”Juan”,7.5,

2, “Juan”, 8.0,

3,”Paco”,9.2,

4,”Pedro”,7.3,

5,”Pedro”,7.5};

Criterios de búsqueda:

1. matricula

2. nombre

Page 26: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

6. Búsqueda en tablas hash

Modo de almacenar y administrar la información de una manera ordenada

Consiste en utilizar parte de la información del objeto a ordenar como índice de ubicación en una tabla

Page 27: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

6. Búsqueda en tablas hash

Para conseguir el índice de la estructura que almacena los objetos, se debe contar con una función hash que, tomando los atributos necesarios de los objetos, devuelva un índice.

m = hash (attr 1, attr 2, attr 3, ..., attr n)

siendo n = número de atributos que se quieren involucrar en el cálculo del índice “m”. m tiene que ser un entero.

Page 28: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

6. Búsqueda en tablas hash

Restricciones y precauciones:

a) El modelo ideal implica que la creación del índice asegure una clave única e irrepetible.

b) En el estudio del diseño de la función hash se debe conseguir un rango adecuado de índices de manera que:

a) se minimice el número de índices repetidos.

b) se distribuyan uniformemente los objetos.

c) no se desperdicie espacio en la estructura de datos.

Page 29: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

c) La función tiene que ser de rápido cálculo, de otro modo se estaría elevando el tiempo de acceso.

d) El cálculo del rango tiene que tener estrecha relación con el espacio en memoria que se piensa utilizar.

Dado un rango [1..N] y una estructura con M lugares.

c) Si N = M, entonces, estaríamos en la situación ideal.

d) Si N < M, entonces, estaríamos desperdiciando espacio en memoria.

e) Si N > M, entonces, nos estamos exponiendo a una

repetición de claves. Este inconveniente se conoce como colisión.

6. Búsqueda en tablas hash

Page 30: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

Ejemplo:

El Instituto de Computación necesita gestionar las listas de los alumnos de forma ordenada. Se sabe que no van a ser más de 50 y, el departamento de sistemas estableció como función hash el siguiente criterio: “el valor entero de (los últimos dos dígitos de la matricula )/2”. Por ejemplo, si la matrícula de “Pedro” es 28.154.967, entonces, la función hash devolverá 33.

6. Búsqueda en tablas hash

Page 31: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

7. Conclusiones

Se ha visto que el uso de arreglos en la resolución de problemas por computadora reduce en gran media el número de variables a usar, número de líneas y en general la complejidad

Muchos procesos requieren que su información se encuentre ordenada, debido al número de búsquedas que se realiza en ellas. Mediante el uso de algoritmos de ordenamiento y de búsqueda en arreglos se cubren perfectamente estos procesos.

Page 32: Estructura de Datos: Ordenamiento y búsquedadtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.

7. Referencias

1. Joyanes Aguilar, Luis (1996) Fundamentos de programación, Algoritmos y Estructura de datos.McGraw-Hill, México.

2. Deitel & Deitel (2001) C++ Como programar en C/C++. Prentice Hall

3. Kerrighan y Ritchie “El lenguaje de programación”. Prentice Hall

4. Gottfried, Byron (1999) “Programación en C” McGrawHill, México.

5. Levine Gutierrez, Guillermo (1990) Introducción a la computación y a la programación estructurada. McGraw-Hill, México.

6. Levine Gutierrez, Guillermo (1990) Introducción a la computación y a la programación estructurada. McGraw-Hill, México.