UNIVERSIDAD DON BOSCO FACULTAD DE INGENIERIA ESCUELA DE COMPUTACION UNIDAD V.

TECNICA HASHING

METODOS DE ORDENACIÓN 1. Introducción
Ordenar significa reagrupar o reorganizar un conjunto de datos u objetos en una secuencia específica. La operación de búsqueda para recuperar información normalmente se efectúa sobre elementos ordenados, lo que demuestra que, en general, donde haya objetos que deban buscarse y recuperarse estará presente el proceso de ordenación. Formalmente se define ordenación de la siguiente manera: Sea A una lista de N elementos: A
1,

A2 , A3 , … ,A N

Ordenar significa permutar estos elementos de tal forma que los mismos queden de acuerdo con una distribución preestablecida. Ascendente: A 1 < A2 < A3 < … <AN Descendente: A 1 > A2 > A3 > … > AN En el procesamiento de datos, a los métodos de ordenación se les clasifica en dos categorías: Ordenación de arreglos. Ordenación de archivos. La primera categoría recibe también el nombre de ordenación interna , ya que los elementos o componentes del arreglo se encuentran en la memoria principal de la computadora. ordenación externa , ya que los elementos se La segunda categoría recibe también el nombre de encuentran en archivos almacenados en dispositivos de almacenamiento secundario como discos.

Ordenación Interna
Los métodos de ordenación interna se explicarán con arreglos unidimensionales, pero su uso puede extenderse a bidimensionales (renglones y columnas) y tridimensionales (renglones, columnas y páginas). Los métodos de ordenación interna a su vez pueden ser clasificados en dos tipos: Métodos Directos (n 2 ). Métodos Logarítmicos (n*logn).

1

Ordenación por inserción. METODOS DE ORDENACION INTERNA ORDENACION POR INTERCAMBIO DIRECTO (BUBBLE SORT) El método de intercambio directo posee dos variantes: almacenar los elementos más pequeños en la parte izquierda del arreglo resultante (llenado del arreglo resultante de izquierda a derecha) o los más grandes en la parte derecha del arreglo resultante (llenado del arreglo resultante de derecha a izquierda). Como conclusión puede decirse que cuando N es pequeño deben utilizarse métodos directos y cuando N es medio o grande deben emplearse métodos logarítmicos. Ejemplo 1. Debe aclararse que una buena medida de eficiencia entre los distintos métodos la constituye el tiempo de ejecución del algoritmo y éste depende fundamentalmente del número de comparaciones y movimientos que se realicen entre elementos. almacenando en cada pasada el menor elemento en la parte izquierda del arreglo resultante: A: 15 67 08 16 44 27 12 35 Las comparaciones que se realizan son las siguientes: 2 .Los métodos directos tienen la característica de que sus programas son cortos y de fácil elaboración y comprensión. Cierto es que requieren de menos comparaciones y movimientos para ordenar sus elementos. aunque son ineficientes cuando N (el número de elementos del arreglo) es medio o grande. pero su elaboración y comprensión resulta más sofisticada y abstracta. Los métodos directos más conocidos son: Ordenación por intercambio. se guardan en dispositivos de almacenamiento secundario (tales como discos). Ordenar las siguientes claves del arreglo A. Ordenación por selección. organizados en archivos. Los métodos logarítmicos son más complejos que los métodos directos. motivo por el cual los datos no pueden almacenarse en la memoria principal de la computadora. Estos datos. entendiendo por este concepto la combinación o intercalación de dos o más secuencias ordenadas en una única secuencia ordenada. El proceso de ordenar los datos almacenados en varios archivos se conoce con el nombre de fusión o mezcla . Ordenación Externa En la actualidad es muy común procesar grandes volúmenes de información.

en este caso 08. en este caso 12.PRIMERA PASADA: A[7] > A[8] ( 12 >35 ) No hay intercambio A[6] > A[7] ( 27 >12 ) Si hay intercambio A[5] > A[6] ( 44 >12 ) Si hay intercambio A[4] > A[5] ( 16 >12 ) Si hay intercambio A[3] > A[4] ( 08 >12 ) No hay intercambio A[2] > A[3] ( 67 >08 ) Si hay intercambio A[1] > A[2] ( 15 >08 ) Si hay intercambio Luego de la primera pasada el arreglo queda de la siguiente forma: Debe observarse que el elemento más pequeño. En el cuadro siguiente. fue situado en la segunda posición. SEGUNDA PASADA: A[7] > A[8] ( 27 >35 ) No hay intercambio A[6] > A[7] ( 44 >27 ) Si hay intercambio A[5] > A[6] ( 16 >27 ) No hay intercambio A[4] > A[5] ( 12 >16 ) No hay intercambio A[3] > A[4] ( 67 >12 ) Si hay intercambio A[2] > A[3] ( 15 >12 ) Si hay intercambio Luego de la segunda pasada el arreglo queda de la siguiente forma: El segundo elemento más pequeño del arreglo. fue situado en la parte izquierda del arreglo. Los elementos ya ordenados no se toman en cuenta para las posteriores pasadas (el arreglo se acota en una posición para cada pasada). se presenta el resultado de las pasadas restantes: 3 .

Ejemplo 2. en este caso 67. fue situado en la parte derecha del arreglo (última posición). en este caso 44. En el cuadro siguiente. almacenando en cada pasada el mayor elemento en la parte derecha del arreglo resultante: A: 15 67 08 16 44 27 12 35 Las comparaciones que se realizan son las siguientes: PRIMERA PASADA: A[1] > A[2] ( 15 >67 ) No hay intercambio A[2] > A[3] ( 67 >08 ) Si hay intercambio A[3] > A[4] ( 67 >16 ) Si hay intercambio A[4] > A[5] ( 67 >44 ) Si hay intercambio A[5] > A[6] ( 67 >27 ) Si hay intercambio A[6] > A[7] ( 67 >12 ) Si hay intercambio A[7] > A[8] ( 67 >35 ) Si hay intercambio Luego de la primera pasada el arreglo queda de la siguiente forma: Debe observarse que el elemento más grande. SEGUNDA PASADA: A[1] > A[2] ( 15 >08 ) Si hay intercambio A[2] > A[3] ( 15 >16 ) No hay intercambio A[3] > A[4] ( 16 >44 ) No hay intercambio A[4] > A[5] ( 44 >27 ) Si hay intercambio A[5] > A[6] ( 44 >12 ) Si hay intercambio A[6] > A[7] ( 44 >35 ) Si hay intercambio Luego de la segunda pasada el arreglo queda de la siguiente forma: El segundo elemento más grande del arreglo. se presenta el resultado de las pasadas restantes: 4 . Los elementos ya ordenados no se toman en cuenta para las posteriores pasadas (el arreglo se acota en una posición para cada pasada). fue situado en la penúltima posición. Ordenar las siguientes claves del arreglo A.

El tratamiento de archivos de texto es elemental y en caso de lenguajes de programación es posible detectar lectura de caracteres especiales como fin de línea o fin de archivo. ordenación heapsort. ordenación shell. Existen organizaciones de archivos que permiten acceder a un registro. ordenación por inserción. ordenación rápida (quicksort). Un archivo de texto es un archivo en el que cada registro es del tipo cadena de caracteres. Cada operación requiere la lectura del archivo completo. Colisiones y Cifrado de Hashing Archivos de texto Los archivos de texto son un caso particular de archivos de organización secuencial. Para lograr una mayor rapidez en las operaciones con los archivos secuenciales ciertos lenguajes de programación permiten acceder a bloque. en vez de recorrer en secuencia los bloques de los que consta el archivo. 5 . leyendo en la memoria interna una pequeña fracción del archivo completo. además algunos registros pueden ser modificados y por lo tanto necesitar ser escritos. Puede suponerse que no existen simultáneamente dos registros en el archivo con el mismo numero de matricula. Por ejemplo.De la misma manera existen otros métodos de ordenamiento de datos tales como: ordenación por selección. Cómo aumentar la velocidad de acceso a los archivos La desventaja que presentan los archivos secuenciales frente a los archivos aleatorios es que las diminutas operaciones se ralentizan. ordenación beansort y ordenación radix sort entre otros 1. Para ello se utilizan apuntadores a los propios bloques que son direcciones físicas de los mismos. el campo numero de matricula del archivo de alumnos puede considerarse una clave. Archivos con función de direccionamiento hash La técnica del direccionamiento hash o dispersión es muy utilizada para tener un acceso rápido a información almacenada en archivos. Un archivo de texto es una serie continua de caracteres que se pueden leer uno tras otro. En estas organizaciones cada uno de los registros ha de tener una clave que identifica de manera unívoca al registro. ordenación por mezcla (mergesort).

por facilidad en la notación se supone que tanto las claves k como las direcciones l son enteros. y se debe usar algún método para resolverla. se lo consideró una curiosidad. Hay que contemplar el hecho de que la función h(x)no de valores distintos: es posible (según la función elegida) que dos claves diferentes k1 yk2 den la misma dirección. Es imposible generar un mensaje con un HASH determinado. Ahora bien. directamente accede al registro. Con esta organización. que no merece la pena. Adi Shamir y Len Adleman en el MIT. Las claves k pueden ser enteros. sea cual sea el mensaje utilizado como entrada.000 posiciones de memoria. Por lo tanto en el estudio del direccionamiento de hash hay que dividirlo en dos partes: Búsqueda de funciones hash Resolución de colisiones Propiedades: Todos los HASHes generados con una función de hash tienen el mismo tamaño. a costa de tiempo. Es imposible reconstruir el mensaje original a partir de su HASH. Entonces se produce el fenómeno de la colisión. tener una función de estas características puede tener muchas aplicaciones. Cada alumno tiene un numero de identificación de 6 dígitos. Por desgracia. un algoritmo de HASH no es un algoritmo de encriptación. Se podría pensar que en una organización tal que usase el número de identificación como dirección del registro en memoria. es fácil y rápido mediante un ordenador calcular su HASH. Algunas de ellas pueden ser las siguientes: 1 RSA: El algoritmo fue descrito en 1977 por Ron Rivest. Dado un mensaje. La idea básica es utilizar la clave para determinar la dirección del registro. las letras RSA son las iniciales de sus apellidos. hay que realizar una transformación mediante una función hash del conjunto kde claves sobre el conjunto l de direcciones de memoria. Fue inventado en Schenectady (estado de Nueva York). Es decir. esta organización requerirá un espacio de 1. Cada registro tiene un campo clave k que determinará los registros de F. Debido a la lentitud de la implementación en las computadoras de la época. como algoritmos de cifrado asimétrico (por ejemplo: RSA 1. 6 .El objetivo que persigue esta técnica de direccionamiento se muestra en el ejemplo siguiente: Supongamos un colegio de primaria con 240 alumnos. pero para no desperdiciar tanto espacio. mientras que el espacio realmente necesario son de 240 posiciones. cadenas de caracteres….000. También se supone que existe una tabla en memoria de m posiciones y que l es el conjunto de direcciones de las posiciones de la tabla. Esto es un gasto de memoria desproporcionado. que será usado como campo clave en el archivo de alumnos del colegio. Su descubrimiento sin embargo no fue revelado hasta 1997 ya que era confidencial. un matemático británico trabajando para la agencia de inteligencia británica GCHQ describió un sistema equivalente en un documento interno en 1973. Para el desarrollo de esta técnica se supone que se dispone de un archivo F de n registros. la búsqueda no requerirá ninguna comparación. h(x): k l Esta es la función de direccionamiento hasho función de dispersión. aunque sí se utiliza en esquemas de cifrado. Clifford Cocks.

y ha sido hasta los últimos año el algoritmo hash más usado. y por tanto no puede acceder a nuestro sistema. para nuestro amigo del otro extremo es posible verificar la integridad del fichero aplicando el mismo algoritmo al archivo que recibe. por ejemplo.Comprobación de integridad de ficheros: Supongamos que queremos transmitir un fichero a un amigo. lo seguros o inseguros que estos algoritmos sean no depende de los conocimientos informáticos o 7 . realizan lo siguiente: Calculan la función HASH del contenido del mensaje que se va a enviar y luego se firma dicho checksum con la clave privada del emisor. En realidad. 128 bits. Seguridad en procesos de identificación en sistemas: Los procesos de identificación (Login+Password) se ven reforzados por estos algoritmos. como RSA por ejemplo. Puede ser útil para comprobar la integridad de un fichero tras una descarga. Procesa mensajes de una longitud arbitraria en bloques de 512 bits generando un compendio de 128 bits. Firma digital: Estos algoritmos se utilizan en esquemas de firma digital para verificar la integridad de la información enviada por el canal de comunicaciones.384 e incluso 512 bits. Se utilizan de la siguiente forma: cuando un usuario accede a su computadora debe introducir su nombre de usuario y su password. Algunos de los algoritmos de HASH más utilizados son los siguientes: MD5 (Message-Digest Algorithm 5 o Algoritmo de Firma de Mensajes 5) : Desarrollado por Ron Rivest. Esta es una aplicación real que se utiliza. Si antes de realizar este envío calculamos la función HASH del fichero. SHA-1 (Secure Hash Algorithm 1 o Algoritmo de Hash Seguro 1) : El SHA-1 tomo como entrada un mensaje de longitud máxima 264 bits (más de dos mil millones de Gigabytes) y produce como salida un resumen de 160 bits. Pues bien. para comprobar la integridad de muchos paquetes que se descargan en distribuciones del SO GNU/Linux. Ya existen nuevas versiones de SHA que trabajan con resúmenes de 224. Este número es mayor que el que se utilizaba en el algoritmo SHA original. Algoritmos de cifrado asimétrico. con la diferencia de que para que este esquema sea seguro debe incluir información adicional y “aleatoria”. Si ambos coinciden. además de que una serie de ataques criptoanalíticos han puesto de manifiesto algunas vulnerabilidades del algoritmo. pero ya no es aceptable desde el punto de vista criptoanalítico. si el sistema operativo no registra estos datos como “texto claro” si no que registra el resultado de aplicarles una función HASH. Esta misma idea se aplica en identificación de usuarios en muchas webs. no conseguirá (a menos que el algoritmo utilizado sea malo o disponga de una supercomputadora) revertir el contenido de dicho registro. como marcas de tiempo y redundancias. en el caso de que un usuario malicioso logre acceder a nuestro archivo de registros.256. podemos asegurar que el envío ha sido satisfactorio. por ejemplo. Debido a la capacidad de procesamiento actual esos 128 bits son insuficientes. Así se asegura la integridad de la información y el “no repudio”.

telemáticos que uno tenga. el tamaño de la entrada no es de longitud fija. al que llamaremos b es el HASH de a. Decimos entonces que el resultado de esta operación. Que se hallen colisiones: h(a)=b y h(c)=b. ¿Qué seguridad ofrecen estos algoritmos? ¿Resulta computacionalmente complejo romper uno de estos algoritmos? ¿Qué solución se debe adoptar? Intentaremos resolver estas cuestiones. Así. Esto es lo que debe ser computacionalmente impracticable. esta función tiene otra car acterística. Para los algoritmos de HASH esto es lo que se conoce como colisión : que dos mensajes de entrada produzcan el mismo mensaje de salida. pudiéramos establecer dos posibles vulnerabilidades de las funciones HASH: 1. pero que asumiremos por estar razonado en otros artículos publicados en Internet (al final se indican). pero computacionalmente imposible realizar la operación inversa. ATACANDO LOS ALGORITMOS DE HASH: MD5 Y SHA-1 Desde el año 2004. si no en los conocimientos matemáticos. y que soluciones se dan los posibles ataques que puedan sufr ir por parte de individuos malintencionados. Supongamos que tenemos un mensaje a. es posible encontrar un mensaje c . La intención es demostrar por dónde cojean los algoritmos de HASH. muy complejo desde el punto de vista computacional. Que sea posible realizar la operación: h -1 (b)=a Habitualmente. encontr ar ese mensaje debe ser. aproximadamente. cuando saltaron las primeras noticias escandalosas sobre la ruptura de MD5. 2. al que aplicamos una función resumen a la que llamaremos h. al menos para usuarios normales . Intentemos dar una descripción algo más matemática de lo que es una función HASH. tal que: h(c)=b Sin embargo. Es decir. a! =c 8 . que no demostraremos matemáticamente. Supondría aplicar la función HASH 2 n veces hasta encontr ar la coincidencia ( n es el número de bits de salida de la función). puede ser de longitud variable. a priori. al igual que la particularidad antes mencionada. la dificultad computacional que presentan. Esto tiene la siguiente consecuencia. Además. la seguridad que ofrecen los algoritmos de HASH a nuestros esquemas de cifrado ha sido una cuestión que se ha puesto en entredicho. a la operación de invertir la función HASH comprobando todas las posiblidades para los bits de salida se le llama “ataque de fuerza bruta”. Esta es la siguiente: es posible que dos mensajes de entrada a produzcan el mismo mensaje de salida b. Es decir: Esta función debe ser sencilla de realizar para un computador.

En este caso. el atacante no podría generar “queriendo” el HASH que necesite para fines maliciosos. Índice de peligrosidad: ****. pero sin saber a priori qué hash resultará. el agente malicioso puede atacar algoritmos de encriptación asimétricos con firma digital. Índice de peligrosidad: ** Ataque Tipo 3 El atacante es capaz de construir un mensaje sin sentido de forma que su HASH colisione con el de un mensaje con sentido. Funciones hash Existe un numero considerable de funciones hash. El atacante es capaz de encontrar dos mensajes al azar que colisionan pero es incapaz de hacerlo de forma sistemática. En primer lugar. Estas dos posibles debilidades dan lugar a cuatro tipos de ataques: Ataque Tipo 1. Índice de peligrosidad: *** Ataque Tipo 4 El atacante es capaz de crear un segundo mensaje falso que tiene sentido y cuyo hash colisiona con el del mensaje verdadero. Es decir. mayor que el número función hash se define: n de registros. dependerá de la clavel k.En segundo lugar. pude falsificar certificados. esta no es razón suficiente para tildar el algoritmo de ineficiente. La experiencia nos enseña de que siempre habrá que estar preparado parara cuando se produzca alguna colisión. Dos criterios que nos deben guiar al seleccionar una función. Si este es el caso. Nunca existirá una garantía plena de que no haya colisiones y más sin conocer de antemano las claves y las direcciones. o con pocos divisores. y que el destinatario los acepte como fidedignos. Índice de peligrosidad: * Ataque Tipo 2 El atacante es capaz de generar dos mensajes distintos de forma que sus HASH colisionen. haciendo que se firmen mensajes sin sentido. firmar mensajes.Lo que antes hemos denominado colisión. Si es capaz de dar sólo con dos mensajes que provocan colisión. el atacante puede actuar con total impunidad.el resultado sería desastroso. la función h(x) debe calcularse fácilmente. La 9 . la función h(x) debe de distribuir uniformemente las direcciones sobre el conjunto lde forma que se minimice el numero de colisiones... Algunas de las funciones hash de cálculo más fácil y rápido se detallan a continuación: Aritmética modular Se elige m un número primo.

… antes de sumarlas. Se aplica esta función hash a los alumnos cuyo número es: 245643 245981 257135 Y se obtienen estas direcciones: h(245643) = 245643 mod 997 = 381 h(245981) = 245981 mod 997 = 179 h(257135) = 257135 mod 997 = 906 Plegamiento La técnica del plegamiento consiste en partir la clave ken varias partes k1. k4.h(k) = k modm para que las direcciones vaya de 0 a m-1 o bien h(k) = (k modm) +1 . que es el número primo más próximo. k2. k3… kn y la combinación de las partes de la clave de modo conveniente (con frecuencia sumando las partes) da como resultado la dirección del registro. con el fin de afinar mas. para minimizar el numero de colisiones. k2. La función hash se define: h(k) = k1 + k2 +…kn En esta operación se desprecian los dígitos más significativos que se obtengan de acarreo Ejemplo: En el archivo de alumnos con el campo clave de de 6 dígitos. con a lo sumo la excepción de la ultima tiene el mismo numero de dígitos que la dirección especificada. así las direcciones irán de 1 a m En esta formula m ha de ser primo. Así obtendríamos estas direcciones: h(245643) = 245 + 346 = 591 h(245981) = 245 + 189 = 434 10 . Ejemplo: En el archivo de alumnos se supone que el número de direcciones es de 996. Un entero de 6 dígitos se puede dividir en grupos de tres y tres dígitos Aplicando esta función hash a los alumnos cuyo número: 245643 245981 257135 Se obtienen estas direcciones: h(245643) = 245 + 643 = 888 h(245981) = 245 + 981 = 1226 = 226 (se ignora el acarreo 1) h(257135) = 257 + 135 = 390 A veces se hace la inver sa de la partes pares. Cada parte ki. La elección de m en este caso será 997.

Aplicamos esta función hash a los alumnos cuyo número: 245643 245981 257135 Se obtienen estas direcciones: 245643 60340483449 Escogiendo los dígitos cuarto.h(257135) = 257 + 531 = 788 Mitad del cuadrado Este método consiste en calcular el cuadrado de la clave k y la dirección del registro viene representada por los dígitos de k2 que ocupan cierta posición. puede ocurrir que s para dos claves diferentes k1. Con la función las claves: 12345678 12345880 Proporcionan las direcciones: H(12345678) = 12345678 mod 101 = 44 H(12345880) = 12345880 mod 101 = 44 11 . quinto y sexto por la derecha h(245643) = 483 245981 60506652361 h(245981) = 652 257135 66118408225 h(257135) = 408 Resolución de colisiones La función hash h(k) no siempre proporciona direcciones distintas. … Ejemplo: En el archivo de alumnos con el campo de clave de 6 dígitos. k2. P2. NE y 100 posibles direcciones. con el campo clave del número de empleado hash del modulo y tomando como m el primo 101. es importante utilizar siempre las mismas posiciones de k2 para todas las claves. h(k1) = h(k2). se obtenga la misma dirección. 1. Este hecho es conocido como colisión. Es evidente que se deben proporcionar métodos de resolución de colisiones Considérese el ejemplo de un taller de 18 empleados. La función la define: h(k) = c Siendo C el numero formado por los dígitos de k2 que se encuentran en las posiciones P Pi.

se dice que las claves han colisionado. Sea R un registro con la clave k. llamado factor de carga.Se tienen dos claves a las que aplicada la función hash se transforman en la misma dirección. K7. K8 y K9. la siguiente posición libre es la 12. Esta relación se expresa = n/m. Para cada uno de la función hash: Registro K1 K2 K3 K4 K5 K6 K7 K8 K9 h(k) 5 8 11 9 5 7 8 6 14 Entonces los registros en el archivo aparecerán grabados en las siguientes posiciones: Registro K1 K2 K3 K4 K5 K6 K7 K8 K9 Posición 5 8 11 9 6 7 10 12 14 El registro K8 es el único que tiene la dirección hash 6. La forma de resolver esta colisión es buscar la primera posición disponible que siga a p y asignar a esa posición R. 12 . K2. S( ) = numero medio de comparaciones para una búsqueda con éxito U( ) = numero medio de comparaciones para una búsqueda sin éxito a) Direccionamiento abierto Es la forma primaria de resolver una colisión entre claves. sin embargo esa posición ya está ocupada por K5 debido a una colisión previa. h(k) es el numero de lista enlazada que contiene el registro si R ya Sgte adicional que se usara para mantener el está en el archivo. El numero medio de comparaciones para una búsqueda con éxito S: S = 1 + 1 + 1 + 2 + 1 + 3 + 7 + 1 = 2. K5. K1. Los registros tendrán un campo encadenamiento de los registros con la misma dirección hash . K6. pero la posición que nos da la función h(k) = p está ocupada por otro registro. A continuación se muestran dos formas de resolver las colisiones. a la manera de arreglo circular. direccionamiento abierto y encadenamiento. Supóngase que se va a añadir un registro R de clave k. Ejemplo: Supongamos que se tienen los registros de claves.00 9 b) Direccionamiento por encadenamiento Este método para resolver colisiones de claves con la misma dirección hash se basa en la formación de una lista enlazada con todos los registros que tienen la misma dirección. K3. la eficiencia depende fundamentalmente del factor de carga . K4. Hay que asumir que si tenemos a m es la posición 1. el procedimiento que se elija dependerá fundamentalmente de la relación entre el numero n de registros (también numero de claves) y el numero de direcciones posibles m. La eficiencia de una función hash junto con un método de resolución de colisiones se mide por el número medido de comparaciones de claves necesarias para encontrar la dirección que ocupa un registro con clave k.

Lo mismo ocurre con la eliminación de un registro. después se busca en la lista. se tiene una tabla de elemento indexada de 0 a m-1 que contenderá los apuntadores de m listas enlazadas. 13 . Un registro R se sitúa en la primera posición libre del fichero (la variable DSP tiene la primera posición libre) La búsqueda de un registro R no es más que la búsqueda de un nodo en una lista enlazada.En la figura se puede ver la estructura de datos básica para este método. por no haber habido colisión. la tabla T de listas enlazadas estará indexada de o a 14. primero se busca en la lista enlazada que le corresponde y a continuación se elimina de la lista. ultimo o una inserción ordenada. La inserción en la lista puede hacerse como primer elemento. Se puede observar que con este método la posición que ocupa un registro R no está directamente relacionado con h(x). Puede ocurrir que la lista está vacía. 0 a m-1. o bien que al producirse una colisión haya que insertar en la lista. A continuación insertamos el registro en la lista de índice h(k) . Tabla T m Para añadir un registro con clave k. Ejemplo: Supongamos que se tienen los registros del ejemplo anterior: Registro K1 K2 K3 K4 K5 K6 K7 K8 K9 h(k) 5 8 11 9 5 7 8 6 14 Tabla T Disposición en archivo Registro 1 : K1 Registro 2 : K2 Registro 3 : K3 Registro 9 : K9 DSP = 10 El rango de h(x) es 0…14. La idea es fundamental que si se ha elegido una función hash con un rango de m valores. este se almacena en la primera posición libre del conjunto posiciones de memoria reservadas para el archivo. Con la función hash h(x) obtenemos el índice de lista que corresponde. El campo Sgte de cada registro hay que actualizarlo según el tipo de inserción.

generando pocas colisiones – Manejo simple de colisiones. generando pocas colisiones – Manejo simple de colisiones. tal que no aumente significativamente el tiempo medio de administración – Asegurar tiempo óptimo para evitar retraso por cálculo • Usos – Tablas de Hash= tablas de índices que agilizan el proceso de búsqueda de información (bases de datos sobre todo) 14 . tal que no aumente significativamente el tiempo medio de administración – Asegurar tiempo óptimo para evitar retraso por cálculo • Usos – Tablas de Hash= tablas de índices que agilizan el proceso de búsqueda de información (bases de datos sobre todo) Algoritmos de encriptación Ejemplo de un registro: Una tabla Hash se espera que cumpla con: – Distribuir las claves uniformemente.Resumen: • HASH = picar y mezclar (en inglés) • La función HASH es una función de conversión o localización o dispersión para transformar la clave en un índice (posición dentro de la estructura) • Reduce un dominio amplio generando un conjunto menor de valores • A veces. una función genera el mismo valor para dos claves diferentes (colisión) y se aplican otros algoritmos para resolver esa situación • Se espera que cumpla con: – Distribuir las claves uniformemente.

Sign up to vote on this title
UsefulNot useful