lunes, 16 de noviembre de 2009

Código:

import java.util.*;
public class hash {
public static void main (String args[]) throws Exception {

Hashtable hash = new Hashtable(10,10);
for (int i = 0; i <= 100; i++)
{
Integer entero = new Integer ( i );
hash.put( entero, "Numero : " + i);
}
for (Enumeration e = hash.keys(); e.hasMoreElements();)

{ System.out.println (hash.get(e.nextElement()));
}
}
}

-------------------------------------------------------------------------------------------------
Una tabla hash no es mas que una estructura de datos para asociar valores con llaves. Imaginate algo asi
LLave => Valor
Carlos => Mexico
Jose => China
Juan => USA
Ernesto => Peru
Ahi estariamos relacionando un grupo de nombres con su pais de origen.En java la implementacion seria con la clase Hashtable, aunque mas recientemente se ha favorecido el uso de Hashmap que es muy similar pero con pequeñas diferencias.Esta es una implementacion de una hashtable en java, no hace nada en especial... solo relaciona numeros con mas numeros de forma automatica

IMPLEMENTACIÓN EN PSEUDOCÓDIGO

El pseudocódigo que anterior es una implementación de una tabla hash de direccionamiento abierto con sondeo lineal para resolución de colisiones y progresión sencilla, una solución común que funciona correctamente si la función hash es apropiada
VENTAJAS E INCONVENIENTES DE LAS TABLAS HASH

Una tabla hash tiene como principal ventaja que el acceso a los datos suele ser muy rápido si se cumplen las siguientes condiciones:
Una razón de ocupación no muy elevada (a partir del 75% de ocupación se producen demasiadas colisiones y la tabla se vuelve ineficiente).
Una función resumen que distribuya uniformemente las claves. Si la función está mal diseñada, se producirán muchas colisiones.


Los inconvenientes de las tablas hash son:


--->Necesidad de ampliar el espacio de la tabla si el volumen de datos almacenados crece. Se trata de una operación costosa.
--->Dificultad para recorrer todos los elementos. Se suelen emplear listas para procesar la totalidad de los elementos.
--->Desaprovechamiento de la memoria. Si se reserva espacio para todos los posibles elementos, se consume más memoria de la necesaria; se suele resolver reservando espacio únicamente para punteros a los elementos.

INSERCION

INSERCIÓN

Para almacenar un elemento en la tabla hash se ha de convertir su clave a un número. Esto se consigue aplicando la función resumen a la clave del elemento.
El resultado de la función resumen ha de mapearse al espacio de direcciones del array que se emplea como soporte, lo cual se consigue con la función módulo. Tras este paso se obtiene un índice válido para la tabla.
El elemento se almacena en la posición de la tabla obtenido en el paso anterior.
Si en la posición de la tabla ya había otro elemento, se ha producido una colisión. Este problema se puede solucionar asociando una lista a cada posición de la tabla, aplicando otra función o buscando el siguiente elemento libre. Estas posibilidades han de considerarse a la hora de recuperar los datos.
Ejemplo de tabla hash.

Las tablas hash se suelen implementar sobre arrays de una dimensión, aunque se pueden hacer implementaciones multi-dimensionales basadas en varias claves. Como en el caso de los arrays, las tablas hash proveen tiempo constante de búsqueda promedio O(1),[1] sin importar el número de elementos en la tabla. Sin embargo, en casos particularmente malos el tiempo de búsqueda puede llegar a O(n), es decir, en función del número de elementos.
Comparada con otras estructuras de arrays asociadas, las tablas hash son más útiles cuando se almacenan grandes cantidades de información.
Las tablas hash almacenan la información en posiciones pseudo-aleatorias, así que el acceso ordenado a su contenido es bastante lento. Otras estructuras como árboles binarios auto-balanceables son más rápidos en promedio (tiempo de búsqueda O(log n)) pero la información está ordenada en todo momento.

" TABLAS HASH "

TABLAS HASH
Una tabla hash o mapa hash es una estructura de datos que asocia llaves o claves con valores. La operación principal que soporta de manera eficiente es la búsqueda: permite el acceso a los elementos (teléfono y dirección, por ejemplo) almacenados a partir de una clave generada (usando el nombre o número de cuenta, por ejemplo). Funciona transformando la clave con una función hash en un hash, un número que la tabla hash utiliza para localizar el valor deseado.

Que es una función hash ?

QUE ES UNA FUNCIÓN DE HASH

Es una función para resumir o identificar probabilísticamente un gran conjunto de información, dando como resultado un conjunto imagen finito generalmente menor (un subconjunto de los números naturales por ejemplo). Varían en los conjuntos de partida y de llegada y en cómo afectan a la salida similitudes o patrones de la entrada. Una propiedad fundamental del hashing es que si dos resultados de una misma función son diferentes, entonces las dos entradas que generaron dichos resultados también lo son.
Es posible que existan claves resultantes iguales para objetos diferentes, ya que el rango de posibles claves es mucho menor que el de posibles objetos a resumir (las claves suelen tener en torno al centenar de bits, pero los ficheros no tienen un tamaño límite).
Son usadas en múltiples aplicaciones, como los arrays asociativos, criptografía, procesamiento de datos y firmas digitales, entre otros. Una buena función de hash es una que experimenta pocas colisiones en el conjunto esperado de entrada; es decir que se podrán identificar unívocamente las entradas (ver función inyectiva).
Muchos sistemas relacionados con la seguridad informática usan funciones o tablas hash.

De donde Proviene????

DE DONDE PROVIENE

El término hash proviene, aparentemente, de la analogía con el significado estándar (en inglés) de dicha palabra en el mundo real: picar y mezclar. Donald Knuth cree que H. P. Luhn, empleado de IBM, fue el primero en utilizar el concepto en un memorándum datado en enero de 1953. Su utilización masiva no fue hasta después de 10 años.
En el algoritmo SHA-1, por ejemplo, el conjunto de partida de la función es dividido en palabras que son mezcladas entre sí utilizando funciones matemáticas seleccionadas especialmente. Se hace que el rango de valores que puede devolver la función sea de longitud fija: 160 bits utilizando la adición modular.

DATA STRUCTURE

DEFINICION Hash se refiere a una función o método para generar claves o llaves que representen de manera casi unívoca a un documento, registro, archivo, etc., resumir o identificar un dato a través de la probabilidad, utilizando una función hash o algoritmo hash. Un hash es el resultado de dicha función o algoritmo.