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

download Estructura de Datos: Ordenamiento y bú dtorres/cursos/estructuradedatos/Tema5... · Joyanes Aguilar,

of 32

  • date post

    01-Oct-2018
  • Category

    Documents

  • view

    214
  • download

    0

Embed Size (px)

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

  • ESTRUCTURA DE DATOS:Tema 5. Ordenamiento y Bsqueda

    Presenta: David Martnez Torres

    Universidad Tecnolgica de la Mixteca

    Instituto de Computacin

    Oficina No. 37

    dtorres@mixteco.utm.mx

    mailto:dtorres@mixteco.utm.mx
  • Contenido

    1. Ordenamiento burbuja

    2. Ordenamiento quicksort

    3. Ordenamiento mergesort

    4. Bsqueda secuencial

    5. Bsqueda binaria

    6. Bsqueda hash

    7. Conclusiones

    8. Referencias

  • Introduccin

    Operacin de ordenar registros de una tabla en algn orden secuencial de acuerdo a un criterio de ordenamiento

    Facilita las bsquedas sobre todo cuando es importante el factor tiempo

    Aplicacin en directorio telefnico, tablas de contenido, bibliotecas, diccionarios, sistema de inventario, sistema escolar, etc.

  • Introduccin

    Los elementos a ordenar se toman de dos en dos, se comparan y se intercambian si no estn 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

  • 1. Ordenamiento Burbuja

    para i 1 hasta N-1

    para j 0 hasta N-2si (a[j].id > a[j+1].id)

    temp a[j]

    a[j] a[j+1]

    a[j+1] tempfin_si

    fin_parafin_para

  • Ejemplo Algoritmo de la Burbuja

    Arreglo inicial: 4 - 3 - 5 - 2 1

    N i i

  • Ejemplo Algoritmo de la Burbuja

    Arreglo inicial: 4 - 3 - 5 - 2 1

    N i i

  • 4. Ordenamiento por mtodo 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

  • 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};

  • 4. Ordenamiento por mtodo 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 simultneamente

  • 2. Ordenamiento quicksort

    Mtodo de ordenamiento rpido

    Mejor que el mtodo de intercambio directo

    C. A. Hoare.

  • Algoritmo quicksort

    Se selecciona un elemento X de una posicin 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 posicin 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

  • Ordenamiento quicksort

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

    Se selecciona A[0], X15

    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

  • 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]

  • Ordenamiento quicksort

    1er conjunto 2do conjunto

    A: 12 8 15 16 44 27 67 35

  • 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

  • 3. Ordenamiento mergesort

    Merge sort utiliza la tcnica divide y vencers para ordenar un arreglo de registros.

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

    A continuacin se realiza una mezcla para ordenar los subarreglos, hasta reconstruir el arreglo original de tamao n

  • Ordenamiento mergesort

    Ejemplo

  • Ordenamiento mergesort

    Ejemplo

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

    int medio;

    if(ini

  • 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

  • 4. Bsqueda Secuencial

    En un arreglo no ordenado, se tiene que recorrer todo el array. Encuentra la posicin 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

  • Ejemplo de Bsqueda 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 bsqueda:

    1. matricula

    2. nombre

  • 5. Bsqueda binaria Se aplica a un arreglo ordenado. No recorre todo el arreglo, si lo encuentra se

    detiene. Encuentra la posicin en la que se encuentra el elemento

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

    int i0, jtam //es igual a TAM-1

    hacer

    medio ((i+j)/2)

    si elemento>alumnos[medio].idMatricula

    imedio+1

    sino

    jmedio-1

    finSi

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

  • Ejemplo de Bsqueda 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 bsqueda:

    1. matricula

    2. nombre

  • 6. Bsqueda en tablas hash

    Modo de almacenar y administrar la informacin de una manera ordenada

    Consiste en utilizar parte de la informacin del objeto a ordenar como ndice de ubicacin en una tabla

  • 6. Bsqueda en tablas hash

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

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

    siendo n = nmero de atributos que se quieren involucrar en el clculo del ndice m. m tiene que ser un entero.

  • 6. Bsqueda en tablas hash

    Restricciones y precauciones:

    a) El modelo ideal implica que la creacin del ndice asegure una clave nica e irrepetible.

    b) En el estudio del diseo de la funcin hash se debe conseguir un rango adecuado de ndices de manera que:

    a) se minimice el nmero de ndices repetidos.

    b) se distribuyan uniformemente los objetos.

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

  • c) La funcin tiene que ser de rpido clculo, de otro modo se estara elevando el tiempo de acceso.

    d) El clculo del rango tiene que tener estrecha relacin 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, estaramos en la situacin ideal.

    d) Si N < M, entonces, estaramos desperdiciando espacio en memoria.

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

    repeticin de claves. Este inconveniente se conoce como colisin.

    6. Bsqueda en tablas hash

  • Ejemplo:

    El Instituto de Computacin necesita gestionar las listas de los alumnos de forma ordenada. Se sabe que no van a ser ms de 50 y, el departamento de sistemas estableci como funcin hash el siguiente criterio: el valor entero de (los ltimos dos dgitos de la matricula )/2. Por ejemplo, si la matrcula de Pedro es 28.154.967, entonces, la funcin hash devolver 33.

    6. Bsqueda en tablas hash

  • 7. Conclusiones

    Se ha visto que el uso de arreglos en la resolucin de problemas por computadora reduce en gran media el nmero de variables a usar, nmero de lneas y en general la complejidad

    Muchos procesos requieren que su informacin se encuentre ordenada, debido al nmero de bsquedas que se realiza en ellas. Mediante el uso de algoritmos de ordenamiento y de bsqueda en arreglos se cubren perfectamente estos procesos.

  • 7. Referencias

    1. Joyanes Aguilar, Luis (1996) Fundamentos de programacin, Algoritmos y Estructura de datos.McGraw-Hill, Mxico.

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

    3. Kerrighan y Ritchie El lenguaje de programacin. Prentice Hall

    4. Gottfried, Byron (1999) Programacin en C McGrawHill, Mxico.

    5. Levine Gutierrez, Guillermo (1990) Introduccin a la computacin y a la programacin estructurada. McGraw-Hill, Mxico.

    6. Levine Gutierrez, Guillermo (1990) Introduccin a la computacin y a la programacin estructurada. McGraw-Hill, Mxico.