Es común al crear estructuras de datos y luego trabajar sobre las mismas, tener la necesidad de realizar búsquedas en forma más frecuente que la necesidad de realizar inserciones. Por ejemplo si tenemos una lista de personas podríamos querer saber si cierta persona está ingresada, o saber información acerca de la misma. Para estos casos en que queremos realizar consultas sobre la estructura de datos puede ser útil trabajar con una estructura de datos que permita realizar búsquedas rápidas (de orden pequeño). DISPERSIÓN: Es transformar una llave K en una dirección, la cual se usa como base para buscar y para almacenar registros. ÍNDICE: Es una estructura de datos que permite recuperar las filas de una tabla de una forma más rápida, además de proporcionar una ordenación distinta a la de la tabla.Se define sobre una columna o sobre un grupo de columnas, y las filas se ordenarán según los valores contenidos en esas columnas. INDEXAMIENTO:Es hacer un índice en donde puedas buscar más rápido y te referencie en que pagina esta la información que buscas sin tener que leer todo. FUNCIÓN DE DISPERSIÓN:Es la elección de una clave para el funcionamiento de una estructura. FUNCIÓN HASH: Se le llama así al cálculo que se realiza para obtener una dirección a partir de una llave. MÉTODO HASH: Nos permite encontrar directamente el registro buscado. Son estructuras usadas para manejar una secuencia de elementos donde cada elemento tendrá un valor clave que pertenece a un rango de valores. Tiene como finalidad buscar,insertar o eliminar un registro complejo, donde su forma de organizar será mediante índices y campos llave. Permiten el acceso directo a un elemento de una secuencia indicando la posición que ocupa. Lo básico de este método es aplicar una función. Es la técnica usada para resolver el problema de las colisiones ya que se dan al aplicar la función. Las funciones hash más comunes son: -Residuo de la división -Medio del cuadrado -Pliegue Ventajas Desventajas Se pueden usar los valores naturales de la llave, puesto que se traducen internamente a direcciones fáciles de localizar No pueden usarse registros de longitud variable No permite llaves repetidas El archivo no está clasificado Se logra independencia lógica y física, debido a que los valores de las llaves son independientes del espacio de direcciones Solo permite acceso por una sola llave No se requiere almacenamiento adicional para los índices. Tiempo de procesamiento requerido para la aplicación de la función hash Costos Tiempo de procesamiento y los accesos E/S requeridos para solucionar las colisiones. La eficiencia de una función hash depende de: La distribución de los valores de llave que realmente se usan . El número de valores de llave que realmente están en uso con respecto al tamaño del espacio de direcciones El número de registros que pueden almacenarse en una dirección dad sin causar una colisión Éstas básicamente transforman las claves en direcciones de la tabla. La implementación de la función hash depende del tipo de clave. Tomando en cuenta las direcciones hash hay que dividir en dos partes, en las búsquedas de funciones y en la resolución de colisiones. Funciones: -Aritmética modular -Plegamiento -Mitad del cuadrado -Multiplicación Una colisión de hash: Es una situación que se produce cuando dos entradas distintas a una función de hash producen la misma salida. Encadenamiento Direccionamiento Abierto -Exploración Lineal -Búsqueda Cuadrática -Hashin Doble -Re-Hashing -Exploración de direcciones -Arreglos Anidados -Hashing Abierto Consiste en tomar el residuo de la división de la clave entre el número de componentes del arreglo. Consiste en dividir la clave en partes de igual número de dígitos (la última puede tener menos dígitos) y operar con ellas, tomando como dirección los dígitos menos significativos. La operación entre las partes puede hacerse por medio de sumas o multiplicaciones. Consiste en elevar al cuadrado la clave y tomar los dígitos centrales como dirección. Número de dígitos a tomar queda determinado por el rango del índice. •Este método opera en dos pasos. Primero, multiplicamos la clave por una constante A en el rango 0 < A < 1 y extraemos la parte fraccionaria de k*A. Segundo, Multiplicamos este valor por el número de entradas de la tabla y tomamos el piso del resultado. Consiste en que cada elemento del arreglo tenga un apuntador a una lista ligada, la cual se irá generando e irá almacenando los valores colisionados a medida que se requiera. Consiste en que una vez detectada la colisión se debe generar otra dirección aplicando la función hash a la dirección previamente obtenida. El proceso se detiene cuando el elemento es hallado, o bien cuando se encuentra una posición vacía. Método que consiste en que cada elemento del arreglo contenga otro arreglo donde se almacenarán los elementos colisionados. Sencilla Ineficiente Costo de Memoria Tiene valor asignado ya que se manejan arreglos lo cual contrae problemas para poder solucionar la colisión. Cuando se elige el tamaño del arreglo permite equilibrar el espacio para almacenar en memoria y el número de valores colisionados que se pudieran almacenar. Cuando el cubo se llena Trataremos de nuevo con colisiones. •Prueba lineal •La función es: h(k,i) = (h’(k) +i) mod m •Una desventaja de este método es la tendencia a crear largas secuencias de entradas ocupadas •Hashing abierto: En hashing abierto la búsqueda no exitosa de una clave toma tiempo Q(1+a), donde a es el factor de carga =número de claves en la tabla/número de entradas en la tabla hash. •En Hashing cerrado: Todos los elementos o claves son almacenadas en la tabla hashing misma. Es decir, cada entrada de la tabla contiene un elemento del conjunto dinámico o NULL. Dentro de este se encuentra la exploraciòn de direcciones, metodo que consiste en buscar de un lugar a la vez en la tabla un lugar vacio. •Hashing Cuadrático Consiste en elevar al cuadrado iniciando desde el primer espacio hasta encontrar un lugar disponible… La desventaja es que no vicita todas las celdas. http://foro.elhacker.net/criptografia/funciones_de_hash-t100025.0.html http://www.itescam.edu.mx/principal/sylabus/fpdb/recursos/r61233.PDF http://www.wanderingbit.com/2008/12/27/hash-tablas-de-dispersion/ http://www.ganimides.ucm.cl/haraya/doc/Tablas_de_Dispersion.pdf https://www.google.com.mx/#hl=es&sclient=psyab&q=videos+funciones+hash&oq=videos+funciones+hash&aq=f&aqi=&aql= &gs_l=serp.3...4345.6763.1.7016.15.12.0.3.3.0.190.1720.0j12.12.0...0.0. CVyBxjDmcoI&pbx=1&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.,cf.osb&fp=8a3157 2b0cce3f18&biw=1280&bih=699 Libro de estructura de Archivos http://www.aulaclic.es/access2002/a_5_1_3.htm