Ingeniería en Sistemas Computacionales Estructura de Datos Unidad VI: Métodos de Búsqueda.

Slides:



Advertisements
Presentaciones similares
Unidad VI Registros y Archivos Matlab Dr. J. D. Pope S. ITD.
Advertisements

Microsoft Office 2007 Introducción a Access. Una base de datos es una colección de información relacionada entre si y almacenada en una o más computadoras.
Unidad 3: Eficiencia de Algoritmos Tema V: Búsqueda. Búsqueda. Búsqueda Lineal. Búsqueda binaria. Búsqueda Máximos y Mínimos. Análisis de los algoritmos.
Archivos en Java Unidad III – Programación Orientada a Objetos en Java Programación I
ITESCO – Arquitectura Computadoras L. S. C. A. Raúl Monforte Chulin - MORCH Systems 1.1. Arquitectura básica y sus operaciones. Objetivo: El estudiante.
Introducción a la Programación Multimedial
Universidad autónoma del estado de México
Programación en C - manejo de Archivos
Introducción a la Programación Multimedial
. Primera Open Class Asignatura: Programación Estructurada Tema:
Teoría de Sistemas Operativos Archivos
ROBERTO PINEDA FLORES. ALEXIS JULIAN VELAZQUEZ NAVA.
Capítulo 13 Leer archivos JSON con AJAX
Olimpiadas Chilenas de Informática - Formación
Programación en C - manejo de Archivos
Conceptos básicos de programación
MANEJO DE ARRELOGS EN C Clase 8: Arreglos.
Fundamentos de programación
Estructuras de Datos Recursividad.
Arreglos. en Lenguaje C n
Listas enlazadas particulares
Introducción a la Programación
Sistema de Bases de Datos
ESUCOMEX profesor presentación power builder Lautaro Cabezas
Botones de minimizar, maximizar y cerrar Barra de Titulo
Tema 6. Conceptos básicos de programación Clase 1
Computación Curso 2017.
COMPUTER DATA SYSTEMS CDS.
Tema 4 Elementos para el Desarrollo de Algoritmos
Universidad Nacional de Loja
2da clase ofimatica.
Programación Orientada a Objetos
Estructuras de control en PHP
Iniciando la exploración
PROGRAMACIÓN 1 INTRODUCCIÓN
Sabes Que es un ALGORITMO
CREAR INFORME EN CRYSTAL REPORTS
Fundamentos de programación
SISTEMA BINARIO.
LENGUAJE C.
Métodos de búsqueda. Introdución Esta operación se utiliza basicamente para recuperar datos que se habian almacenado con anticipación. El resultado puede.
Tipos de Datos abstractos
Tema 9. Estructuras de repetición. Clase 2
Estructuras de Datos MC Beatriz Beltrán Martínez Primavera 2018
Metodología de la Programación
Tema 5 Representación y Técnicas de Diseño de Algoritmos
MODULO DE SISTEMAS DE INFORMACIÓN
Árboles Binarios de Búsqueda (ABB)
Excel Macros Macros Automáticas.
Tipos de Datos abstractos
INTRODUCCION Hasta ahora solo hemos tenido que trabajar con algunas variables en cada uno de los programas que hemos realizado. Sin embargo, en más de.
Estructuras de Datos Dinámicas
LICENCIATURA EN SISTEMAS COMPUTACIONALES EN ADMINISTRACION
Fundamentos de Informática Especialidad de Electrónica –
Listas ligadas Dra. María de Lourdes López García
Estructuras de Datos Aun en problemas muy simples surge la necesidad de agrupar valores elementales de alguna manera. Cuando representamos una caja de.
Símbolos Indice Pág. Direcionamiento Absoluto y Simbólico
ESTADISTICA DESCRIPTIVA
Conversión de Binario a Decimal
Recursos de la Biblioteca Virtual
Curso de Programación Estructurada
METODOS DE ORDENAMIENTO CHRISTIAN MICHAEL OBANDO GARCES JOAO ADRIAN BARIONUEVO.
Informática Ingeniería en Electrónica y Automática Industrial
UNIVERSIDAD JUÁREZ AUTÓNOMA DE TABASCO Nombres: Isaac Sánchez García Teofilo Martinez Garcia Ricardo Del Carmen Paz López Vanesa Anahí Pérez Lizárraga.
ALGORITMO Y ESTRUCTURA DE DATOS II UNIDAD 3 ORDENAMIENTO Y BUSQUEDA MARCOS RODRIGUEZ /4/2019ALGORITMO Y ESTRUCTURA DE DATOS II 1 Prof.
Tema 8. Estructuras de decisión. Clases 1 y 2.
Access Este programa permite manipular datos en forma de tablas, realizar cálculos complejos con fórmulas y funciones, incluso dibujar distintos tipos.
UNIDAD V ESTRUCTURA REPETITIVA (Repetir Hasta Que)
Ordenación Por Inserción
UNIVERSIDAD AÚTONOMA DE SINALOA “Facultad de Informática Culiacán”
Transcripción de la presentación:

Ingeniería en Sistemas Computacionales Estructura de Datos Unidad VI: Métodos de Búsqueda

Competencia de la Unidad Aplicar el método de búsqueda pertinente en la solución de un problema real. Competencia de la Unidad Aplicar el método de búsqueda pertinente en la solución de un problema real. Temario

INTRODUCCIÓN Una de las funciones que con mayor frecuencia se utiliza en los sistemas de información, es el de las consultas a los datos, se hace necesario utilizar algoritmos, que permitan realizar búsquedas de forma rápida y eficiente. La búsqueda, se puede decir que es la acción de recuperar datos o información, siendo una de las actividades que más aplicaciones tiene en los sistemas de información. Más formalmente se puede definir como “La operación de búsqueda sobre una estructura de datos es aquella que permite localizar un nodo en particular si es que éste existe” (Euán, 1989).

Clasificación de las Búsquedas La llave es el campo por el cual se va a realizar la búsqueda. La búsqueda por comparación de llaves son algoritmos bastante sencillos, en estos se van comparando e las llaves. En la transformación de llaves los algoritmos deben de ser mucho más analizados, ya que transforma las llaves por varios métodos, indicando en que posición del arreglo o del archivo se almacenan o se recuperan. La llave es el campo por el cual se va a realizar la búsqueda. La búsqueda por comparación de llaves son algoritmos bastante sencillos, en estos se van comparando e las llaves. En la transformación de llaves los algoritmos deben de ser mucho más analizados, ya que transforma las llaves por varios métodos, indicando en que posición del arreglo o del archivo se almacenan o se recuperan.

Búsqueda Lineal o Secuencial

BÚSQUEDA LINEAL O SECUENCIAL Este tipo de búsqueda consiste en examinar, a partir del primer elemento y de uno en uno, hasta encontrar el dato buscado o bien llegar al final de la lista que puede estar almacenada en archivo o arreglo. En este tipo de listas los elementos pueden o no estar ordenados, ya que se empieza a comparar de uno en uno los elementos de la lista y no importa su orden o lugar de ubicación para realizar la búsqueda, salvo para el tiempo de ejecución.

Si el elemento que se está buscando, se encuentra al inicio de la lista, este tiempo, sería muy corto, pero si se encuentra al final, va a tardar más y si el elemento que se desea buscar, no se encuentra en la lista, se hizo necesario, recorrer toda la lista, para darse cuenta que no está en ella. Y si se le aumenta a esto, que el número de elementos en la lista puede ser del orden de cientos o miles, va a hacer mucho más tardado su ejecución. Esta búsqueda tiene la ventaja de tener una fácil programación de su algoritmo.

Si el elemento que se está buscando, se encuentra al inicio de la lista, este tiempo, sería muy corto, pero si se encuentra al final, va a tardar más y si el elemento que se desea buscar, no se encuentra en la lista, se hizo necesario, recorrer toda la lista, para darse cuenta que no está en ella. Y si se le aumenta a esto, que el número de elementos en la lista puede ser del orden de cientos o miles, va a hacer mucho más tardado su ejecución. Esta búsqueda tiene la ventaja de tener una fácil programación de su algoritmo.

ALGORITMO PARA BÚSQUEDA SECUENCIAL int x, i=0 bool bandera=false CAPTURAR x ABRIR (archivo) MIENTRAS no sea fin de archivo LEER REGISTRO (ARCHIVO) INCREMENTAR i SI llave = x entonces DESPLEGAR “Registro encontrado; ” DESPLEGAR “posición: ” i bandera=true FINSI FINMIENTRAS CERRAR (ARCHIVO) SI bandera = false DESPLEGAR “Registro no encontrado“ FINSI int x, i=0 bool bandera=false CAPTURAR x ABRIR (archivo) MIENTRAS no sea fin de archivo LEER REGISTRO (ARCHIVO) INCREMENTAR i SI llave = x entonces DESPLEGAR “Registro encontrado; ” DESPLEGAR “posición: ” i bandera=true FINSI FINMIENTRAS CERRAR (ARCHIVO) SI bandera = false DESPLEGAR “Registro no encontrado“ FINSI

MANEJO DE ARCHIVOS DE TEXTO EN C++ Para poder realizar el programa es necesario primero conocer las instrucciones y la lógica con la que se trabaja un archivo de texto. Un archivo de texto contiene la información guardada sin ningún formato, en caso de requerirse un formato en particular, debe ser diseñado antes de guardar la información.

INSTRUCCIONES PARA MANEJO DE ARCHIVOS DE TEXTO : esta librería contiene las instrucciones para el manejo de archivos ya sea de texto o binarios, por lo que es obligatorio incluirla en la cabecera del programa. fopen(archivo, modo): esta función controla la apertura de un archivo, se requiere asignar el resultado a una variable apuntador de tipo FILE, la cual en caso de que el archivo no exista o por alguna razón no pueda ser abierto regresa NULL. Sintaxis: FILE *archivo; archivo=fopen(“c:\\alumnos.txt”, “w”); If (archivo==NULL) cout<<"El archivo no fue creado"

MODOS DE APERTURA DE UN ARCHIVO

fputs(): Una vez que el archivo fue creado o abierto para agregar información, podemos hacer esta acción por medio de la instrucción fputs(). Sintaxis: fputs(char cadena, FILE archivo); Dónde: Cadena: Es una variable tipo char. Archivo: Es una variable tipo apuntador FILE, el archivo al que apunta debió ser abierto previamente.

fgets(): Los archivos también pueden ser leídos, es decir su información puede ser extraída y puesta en pantalla u otro medio de impresión por medio de la instrucción fgets(). Esta instrucción mueve el apuntador del archivo un registro por cada vez que se use. Sintaxis: fgets(char cadena, int longitud, FILE archivo); Dónde: Cadena: Es una variable tipo char. Longitud: Es la longitud máxima de la cadena a leer, en caso de que se encuentre un salto de línea o fin de archivo la lectura se detiene en ese punto. Archivo: Es una variable apuntador de tipo FILE, el archivo al que apunta debió ser abierto previamente.

COMPROBAR FINAL DE ARCHIVO feof(archivo): Cada vez que se mueve el apuntador del archivo la función booleana feof(FILE archivo) puede ser usada, dicha función regresa true si el fin de archivo ya fue alcanzado y false si aún no se ha encontrado. Sintaxis: if (feof(archivo)) cout<<“No hay mas registros en el archivo”;

CIERRE DE ARCHIVOS fclose(archivo): Antes de cerrar nuestro programa una vez que terminamos de leer todos los registros, esto se hace con la instrucción fclose(archivo), el archivo al que apunta debió ser abierto previamente para que no regrese errores. Es muy importante que esta instrucción sea utilizada ya que C++ libera la memoria y recursos utilizados para el archivo cuando encuentra esta instrucción. Además, mientras que no sea cerrado el archivo, el sistema operativo no lo libera, por lo que no puede ser modificado o eliminado vía COMMAND y/o Explorador de Windows.

Ejercicio: Realizar un programa que genere un archivo de texto con 500 llaves secuenciales aleatorias (no necesariamente estarán ordenadas). Una vez que el archivo esté creado se debe capturar un número entero cualquiera y verificar si dicho número está contenido en el archivo utilizando el método de búsqueda secuencial. Desplegar los mensajes correspondientes ya sea que se encontró la llave o que la búsqueda no fue exitosa. Nota: Debido a que las llaves en el archivo de texto se guardan en modo char, la verificación requiere que dichas llaves sean convertidas a tipo int para poder realizar comparaciones.

Trabajando con Búsquedas Secuenciales en Archivos de Texto Variables globalesMódulo main

MÓDULO PARA CREAR ARCHIVO DE TEXTO

MÓDULO PARA REALIZAR LA BÚSQUEDA

Búsqueda Binaria

BÚSQUEDA BINARIA La búsqueda Binaria o por Bisección no representa mucha dificultad para la programación de su algoritmo y además, es muy rápida su ejecución. Este algoritmo requiere que los elementos de la lista sobre la que va a actuar sean ordenados previamente, ya sea en forma ascendente o descendente, cada elemento de la lista puede tener varios campos. La lista se considera que empieza a almacenar sus elementos en la posición cero. Va a utilizarse tres apuntadores, uno en la primera posición de la lista que se le denominara LI, para efectos de la explicación, otro en la última conocido como LS y el que apunte en la parte central, el cual se obtiene de la suma de LS mas LI entre dos (LI + LS/ 2) y tomando la parte entera, el cual se le llamará M.

A diferencia de la Búsqueda Secuencial, aquí el número de comparaciones no se comporta en forma lineal, ya que procede a realizar los siguientes pasos: Dividir la lista en dos partes, al determinar el elemento central de dicha lista, con lo que se iniciará el apuntador M. Comparar el valor del elemento buscado con el central. Si resultan ser iguales, las búsquedas termina con éxito, indicando en qué posición se encontró y cuáles son los datos que están en esa posición. En el caso de no ser iguales, se redefinen la posición de alguno de los apuntadores de los extremos (LI o LS), dependiendo del valor del elemento central, sea mayor o menor que el buscado.

Ejemplo: se cuenta con un arreglo ordenado de 8 posiciones, se desea buscar la ubicación del número 17. Aplicar el método de búsqueda binario. Asignamos posiciones a LI, LS y M LI=0; LS=tamaño-1  LS=7; M=(0+7)/2  M=3; LI=0 LS=7 M=3 Comparamos si el número buscado es igual al valor en la posición M, de ser así el proceso termina; SINO Si el número en la posición M es menor LS=M-1; SINO Si el número en la posición M es mayor LI=M+1 El número 17 es mayor, LI=4; Se repite el proceso

Tomamos el arreglo completo y reasignamos posiciones a los límites Asignamos posiciones LI, LS y M LI=4; LS=7; M=(4+7)/2  M=5; LI=4LS=7 M=5 Comparamos si el número buscado es igual al valor en la posición M, de ser así el proceso termina; SINO Si el número en la posición M es menor LS=M-1; SINO Si el número en la posición M es mayor LI=M+1 El número 17 es mayor, LI=6; Se repite el proceso

Tomamos el arreglo completo y reasignamos posiciones a los límites Asignamos posiciones a LI, LS y M LI=6; LS=7; M=(6+7)/2  M=6; LI=6LS=7 M=6 Comparamos si el número buscado es igual al valor en la posición M, de ser así el proceso termina;

CODIFICACIÓN DE BÚSQUEDA BINARIA EN C++ USANDO ARREGLOS  Variables globales  Módulo main

 Módulo de Búsqueda Binaria

Ejercicio: Realice la programación del método de búsqueda binaria usando arreglos y basándose en el código visto en clase. Entregar el programa ya funcionando y probado.

TRANSFORMACIÓN DE LLAVES O TABLAS DE HASH

BÚSQUEDA MEDIANTE TRANSFORMACIÓN DE CLAVES (HASHING) Es un método de búsqueda que aumenta la velocidad de búsqueda, pero que no requiere que los elementos estén ordenados. 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. La 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.

Por ejemplo, se quiere guardar en un array la información de los 1000 usuarios de una empresa, y se elige el número llave como elemento identificador. Es inviable hacer un array de elementos, sobre todo porque se desaprovecha demasiado espacio. Por eso, se realiza una transformación al número de llave 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. La función de hash ideal debería ser biyectiva, esto es, que a cada elemento le corresponda un índice, y que a cada índice le corresponda un elemento, pero no siempre es fácil encontrar esa función, e incluso a veces es inútil, ya que puedes no saber el número de elementos a almacenar.

Restas sucesivas: esta función se emplea con claves numéricas entre las que existen huecos de tamaño conocido, obteniéndose direcciones consecutivas. Por ejemplo, si el número de expediente de un alumno universitario está formado por el año de entrada en la universidad, seguido de un número identificativo de tres cifras, y suponiendo que entran un máximo de 1000 alumnos al año, se le asignarían las claves: Clave  0 = ; el consecutivo es 000 Clave  457 = ; el consecutivo es 457 Clave  970 = ; el consecutivo es 970

Tarea: Existen otras formas de determinar la posición de la clave en el arreglo, como lo son las siguientes: Aritmética modular Mitad del cuadrado Truncamiento Plegamiento Tratamiento de colisiones Investigar sobre los métodos mencionados arriba y entregar resumen escrito

TRABAJANDO CON TABLAS HASH CON EL MÉTODO DE RESTAS SUCESIVAS Una tabla hash está compuesta por al menos dos elementos que forman una pareja, la llave, y la información que contiene relacionada. Una función hash es método para generar claves o llaves que representen de manera casi única a un documento o conjunto de datos. Es una operación matemática que se realiza sobre este conjunto de datos de cualquier longitud, y su salida es una huella digital, de tamaño fijo e independiente de la dimensión del conjunto de datos originales. La tabla hash usa una función de dispersión para colocar los elementos, de forma que no se pueden recorrer secuencialmente, pero a cambio el acceso a partir de la clave es muy rápido, más que si hacemos una búsqueda secuencial o binaria.

Ejercicio: Realice un programa utilizando Tablas Hash y el método de Restas Sucesivas. Dicho programa debe capturar llave y nombre del estudiante. Se tomará como base para generar la llave el año 2016 y el máximo de alumnos a capturar es de 1000 (desde consecutivo 000 al consecutivo 999). El programa debe permitir, Insertar, Eliminar, Verificar Posición, y Realizar Recorrido del arreglo que contiene la información.

MÓDULO PARA INICIAR ARREGLOS VARIABLES GLOBALES

MÓDULO PARA CALCULAR POSICION EN LA TABLA HASH MÓDULO PARA RECORRAR LA TABLA HASH

MÓDULO PARA INSERTAR EN LA TABLA HASH MÓDULO PARA ELIMINAR EN LA TABLA HASH

MÓDULO MAIN ESTRUCTURA DE DATOS

Bibliografía Joyanes, Zahonero. Estructura de Datos en C++. McGraw Hill. Madrid, España ISBN: EUÁN AVILA JORGE IVAN Y CORDERO BORBOA LUIS GONZAGA., Estructuras de datos, (1ª reimpresión.), MÉXICO, LIMUSA, tomada de la primera edición de la UNAM (FACULTAD DE INGENIERÍA), 1989.