Tabla Hash
Short Description
COMO HACER UNA TABLA HASH...
Description
Tabla hash Una tabla hash, hash, mapa hash, hash, tabla de dispersión o dispersión o tabla fragmentada es fragmentada es una estructura de datos que 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 nmero de cuenta, por ejemplo). !unciona transformando la clave con una función hash en hash en un hash, un nmero que identifica la posición (casilla o cubeta) donde la tabla "as" locali#a el valor deseado. Un ejemplo pr$ctico para ilustrar que es una tabla "as" es el siguiente: %e necesita organi#ar los periódicos que llegan diariamente de tal forma que se puedan ubicar de forma r$pida, entonces se "ace de la siguiente forma & se "ace una gran caja para guardar todos los periódicos (una tabla), y se divide en ' contenedores (a"ora es una "as" table o tabla fragmentada), y la clave para guardar los periódicos es el d*a de publicación (*ndice). +uando se requiere buscar un periódico se busca por el d*a que fue publicado y as* se sabe en que #ócalo (bucet) est$. -arios -arios periódicos quedar$n guardados en el mismo #ócalo (es decir colisionan al ser almacenados), lo que implica buscar en la sub&lista que se guarda en cada #ócalo. e esta forma se reduce el tama/o de las bsquedas de 0(n) a, en el mejor de los casos, 0() y, en el peor, a 0(log(n)).
1jemplo de tabla "as".
Las tablas hash se hash se suelen implementar sobre vectores de una dimensión, aunque se pueden "acer implementaciones multi&dimensionales basadas en varias claves. +omo en el caso de los arrays, las tablas "as" proveen tiempo constante de bsqueda promedio 0() 0(),, sin importar el nmero de elementos en la tabla. %in embargo, en casos particularmente malos el tiempo de bsqueda puede llegar a 0( n), es decir, en función del nmero de elementos. +omparada con otras estructuras de arrays asociadas, las tablas "as" son m$s tiles cuando se almacenan grandes cantidades de información. Las tablas "as" almacenan la información en posiciones pseudo&aleatorias, as* que el acceso ordenado a su contenido es bastante lento. 0tras estructuras como $rboles binarios auto& balanceables tienen balanceables tienen un tiempo promedio de bsqueda mayor (tiempo de bsqueda 0(log n)), pero la información est$ ordenada en todo momento.
#include 1. #include 2. 3. #define MAXC 10//MAXIMO TAMAÑO ! "A CA!A $. #define MAXA 10//TAMAÑO ! %A TA&%A '. (. st)uct st)uct nodo nodo *. + ,.
ch-) c-den- c-den-
.
st)uct nodo st)uct nodo siuiente siuiente
10.
11. 12.
int cl-e int cl-e 4ch-) ch-) c-den-u5 c-den-u56 6MAXC78 MAXC78//OBTIENE LA SUMA DE LOS
VALORES ASCII DE CADA CARACTER DE LA CADENA
13.
+
1$.
int cl-e int cl-e9 90: -scii: -scii: i9 i90
1'. 1(.
;hile44 ;hile 44-scii -scii9 9c-den-u56 c-den-u5 6i 78 78=9 =9 8 8
1*.
cl-e9 9-scii -scii
1,. 1. 20.
)etu)n cl-e )etu)n cl-e
21.
int h-sh int h-sh 4int int cl-e cl-e8 8//SE DETERMINA LA POSICIO EN LA QUE SE
GUARDARA LA CADENA
22.
+
23.
int ?osicion int ?osicion9 9cl-e@ cl-e@MAXA MAXA
2$. 2'.
)etu)n ?osicion )etu)n ?osicion
2(.
2*. 2,. oid inse)t-) oid inse)t-)4 4st)uct st)uct nodo nodo ?t-bl?t-bl-: : ch-) c-den-6 c-den-6MAXC78 MAXC78//INSERTAR NUEVO ELEMENTO EN UNA LISTA 2.
+
30.
st)uct nodo st)uct nodo nueo 9 4st)uct st)uct nodo nodo 8 -lloc -lloc4 4siBeof siBeof4 4st)uct nodo88 nodo88 //CREAMOS EL NUEVO NODO
31.
nueo> >c-denc-den- 9 c-den- c-den-//GUARDAMOS CADENA
32.
nueo> >siuiente siuiente 9 "%% "%%//COMO SE VA A INSERTAR AL FINAL, SERA EL QUE APUNTE A NULL
33.
st)uct nodo st)uct nodo -ctu-l9 -ctu-l9?t-bl?t-bl- //CREAMOS UN PUNTERO AUXILIAR A NODO
3$. 3'.
if 4?t-bl-99 ?t-bl-99"%% "%%8 8
3(.
+
3*.
?t-bl-9 ?t-bl-9nueo nueo//SI LISTA VACIA, ENTONCES: NUEVO ES EL PRIMER ELEMENTO
3,.
3.
else
$0.
+
$1.
;hile 4-ctu-l> -ctu-l >siuiente siuiente =9 =9 "%% "%%8 8
$2.
+
$3.
?)intf4 ?)intf 4Dn @s nD: nD: -ctu-l> -ctu-l >c-denc-den-8 8
$$.
-ctu-l 9 -ctu-l> -ctu-l>siuiente siuiente //SI NO ESTA VACIA, SE RECORRE LA LISTA
$'.
$(.
-ctu-l > >siuiente siuiente 9nueo nueo//EL ULTIMO NODO AHORA ANTECEDE AL NUEVO
$*.
$,.
$. '0.
oid ost)-) oid ost)-)4 4st)uct st)uct nodo nodo ?t-bl-8 ?t-bl-8//IMPRIMIR LA TABLA
'1.
+
'2.
st)uct nodo st)uct nodo -ctu-l9 -ctu-l9?t-bl- ?t-bl- //ACTUAL ES UN PUNTERO AUXILIAR PARA RECORRER LA LISTA
'3. '$.
;hile 4-ctu-l=9 -ctu-l =9"%% "%%8 8//MIENTRAS NO SEA EL FINAL DE LA LISTA
''.
+
'(.
?)intf4 ?)intf 4D6 @s 7>D: 7>D : -ctu-l> -ctu-l>c-denc-den-8 8//IMPRIME EL DATO DEL NODO CORRESPONDIENTE
'*.
-ctu-l 9 -ctu-l> -ctu-l>siuiente siuiente //AVANZAMOS AL SIGUIENTE NODO
',.
'.
?)intf4 ?)intf 4D"%%nnD D"%%nnD8 8
(0.
(1. (2.
-in48
(3.
+
($.
st)uct nodo st)uct nodo ?t-bl-6 ?t-bl-6MAXA7 MAXA7//ARREGLO DE PUNTEROS PARA NODOS
('.
ch-) c-den-u5 ch-) c-den-u56 6MAXC7 MAXC7//ARREGLO AUXILIAR PARA GUARDAR CADENA INTRODUCIDA
((.
int o? int o?: : cl-ec-den-: cl-ec-den- : ?os ?os//VARIABLES USADAS PARA MENU Y POSICION EN EL ARREGLO
(*. (,.
fo)4 fo) 4?os9 ?os90?os< ?os #include > #include > #include > std using namespace std struct )eist)o+ )eist)o+ int
n) n)
cl-e6,7 char cl-e6 d-t-6,7 char d-t-6 s) int s) ): -: -: s s enc-beB-do+ struct enc-beB-do+ n)s int n)s ed: ed: ec ec
/// enc-beB-do de dis?e)sion J colisiones
KI%! fdd: fdd: fdc fdc l): le le int l): fh4 char cl-e 8 int fh4 + int n) 9 0
i90 i< i
View more...
Comments