15 tablas hash

29
Tablas Tablas Hash Hash Apoyo SSD5 Apoyo SSD5

Upload: uvm

Post on 25-Jun-2015

29.637 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: 15 Tablas Hash

Tablas Tablas HashHash

Apoyo SSD5Apoyo SSD5

Page 2: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 22

IntroducciónIntroducción

�� Una Una tabla tabla hashhash es una estructura de datos es una estructura de datos que soporta la recuperación, eliminación e que soporta la recuperación, eliminación e inserción de elementos de forma muy inserción de elementos de forma muy rápida. rápida.

Page 3: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 33

Tabla Tabla hashhash

�� Una Una tabla tabla hashhash que está apropiadamente que está apropiadamente configurada para los elementos que configurada para los elementos que contiene, puede realizar estas contiene, puede realizar estas operaciones en un tiempo fijo, a diferencia operaciones en un tiempo fijo, a diferencia de otras estructuras de datos y algoritmos de otras estructuras de datos y algoritmos que ya hemos examinadoque ya hemos examinado

Page 4: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 44

Tabla Tabla hashhash

�� Una Una tabla tabla hashhash es un tipo de mapa y los es un tipo de mapa y los mapas son estructuras mapas son estructuras asociativasasociativas. .

�� Conceptualmente, las estructuras de Conceptualmente, las estructuras de datos asociativas almacenan datos en datos asociativas almacenan datos en pares de valorpares de valor--clave. clave.

Page 5: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 55

Tabla Tabla hashhash

�� Esto significa que por cada valor Esto significa que por cada valor almacenado existe una clave almacenado existe una clave correspondiente usada para acceder el correspondiente usada para acceder el valor. valor.

�� Un ejemplo real de una estructura de Un ejemplo real de una estructura de datos asociativa es un diccionario. datos asociativa es un diccionario.

�� En un diccionario, los datos están En un diccionario, los datos están almacenados en pares de valoralmacenados en pares de valor--clave. clave.

Page 6: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 66

Tabla Tabla hashhash

�� Las claves son las palabras, y los valores Las claves son las palabras, y los valores son las definiciones.son las definiciones.

�� Para acceder a una definición, debemos Para acceder a una definición, debemos usar la clave correspondiente usar la clave correspondiente

Page 7: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 77

Diferencia entre mapas y conjuntos Diferencia entre mapas y conjuntos hashhash

�� Los Los mapas mapas hashhash y los y los conjuntos conjuntos hashhash son son dos tipos diferentes de dos tipos diferentes de tablastablas hashhash..

�� Los Los mapasmapas hashhash son estructuras son estructuras asociativas que almacenan pares de asociativas que almacenan pares de valoresvalores--clave, mientras que los clave, mientras que los conjuntosconjuntoshashhash son estructuras que mantienen el son estructuras que mantienen el registro de la pertenencia de elementos registro de la pertenencia de elementos dentro de una colección dentro de una colección

Page 8: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 88

�� Los Los conjuntosconjuntos hashhash no asocian claves a no asocian claves a los valores, simplemente almacenan un los valores, simplemente almacenan un colección de claves.colección de claves.

�� Por ejemplo, una lista de palabras Por ejemplo, una lista de palabras comúnmente mal deletreadas, puede ser comúnmente mal deletreadas, puede ser almacenada usando un conjunto almacenada usando un conjunto hashhash..

Page 9: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 99

�� En este ejemplo, no hay un mapeo o En este ejemplo, no hay un mapeo o asignación de una clave a un valor como asignación de una clave a un valor como en el ejemplo del diccionario. en el ejemplo del diccionario.

�� Cada palabra sirve solamente como una Cada palabra sirve solamente como una clave. clave.

�� Por lo tanto, un Por lo tanto, un conjuntoconjunto hashhash es usado es usado para reportar si existe o no una palabra en para reportar si existe o no una palabra en la lista. la lista.

Page 10: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 1010

Funciones Funciones HashHash

�� Las operaciones que usan Las operaciones que usan tablastablas hashhashson eficientes porque la posición de un son eficientes porque la posición de un valor almacenado puede ser calculada valor almacenado puede ser calculada usando la clave. usando la clave.

�� Las Las tablastablas hashhash son implantadas por lo son implantadas por lo general, como un arreglo de valores. general, como un arreglo de valores.

Page 11: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 1111

Funciones Funciones hashhash

�� Una Una función función hashhash es usada para asignar es usada para asignar una clave a un índice dentro de este una clave a un índice dentro de este arreglo.arreglo.

�� Este índice está donde está almacenado Este índice está donde está almacenado el valor correspondiente a la clave. el valor correspondiente a la clave.

Page 12: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 1212

Tablas Tablas hashhash

�� Otros algoritmos de búsqueda, como la Otros algoritmos de búsqueda, como la búsqueda lineal o binaria, no pueden búsqueda lineal o binaria, no pueden asignar una clave a la posición de su valor asignar una clave a la posición de su valor tan rápidamente como las tan rápidamente como las tablastablas hashhash..

Page 13: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 1313

Usos tablas Usos tablas hashhash

�� Estos algoritmos deben desarrollar más Estos algoritmos deben desarrollar más comparaciones para encontrar el índice comparaciones para encontrar el índice del valor almacenado.del valor almacenado.

�� El tiempo que toma esta búsqueda El tiempo que toma esta búsqueda aumenta conforme aumenta el número de aumenta conforme aumenta el número de elementos almacenados. elementos almacenados.

Page 14: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 1414

Page 15: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 1515

Función Función hashhash

�� En esta figura, la En esta figura, la funciónfunción hashhash genera un genera un índice basado en el dígito colocado en el índice basado en el dígito colocado en el extremo derecho del valor ASCII de la extremo derecho del valor ASCII de la segunda letra del apellido de la persona. segunda letra del apellido de la persona.

Page 16: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 1616

Función y tabla Función y tabla hashhash

�� Por ejemplo, en el nombre "Por ejemplo, en el nombre "HansonHanson, , BobBob", ", la segunda letra es una "a".la segunda letra es una "a".

�� El valor ASCII de "a" es 97. El valor ASCII de "a" es 97.

�� El dígito colocado en el extremo derecho El dígito colocado en el extremo derecho de 97 es 7. de 97 es 7.

�� Por lo tanto, el registro para "Por lo tanto, el registro para "HansonHanson, , BobBob" es almacenado en el índice 7 de la " es almacenado en el índice 7 de la tabla tabla hashhash. .

Page 17: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 1717

Page 18: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 1818

Función y tabla Función y tabla hashhash

�� La La tablatabla hashhash en la figura anterior muestra en la figura anterior muestra cada nombre en su posición asignada.cada nombre en su posición asignada.

�� La ventaja de una La ventaja de una tablatabla hashhash es que para es que para encontrar una entrada, uno sólo tiene que encontrar una entrada, uno sólo tiene que aplicar la aplicar la funciónfunción hashhash a la clave a la clave

Page 19: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 1919

Función y tabla Función y tabla hashhash

�� Un método popular usado para implantar Un método popular usado para implantar una una funciónfunción hashhash es el es el método de divisiónmétodo de división. .

�� Como todas las Como todas las funcionesfunciones hashhash, el método , el método de división asigna una clave a un índice de división asigna una clave a un índice dentro de la dentro de la tablatabla hashhash. .

Page 20: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 2020

�� La implantación del método de división La implantación del método de división involucra la conversión de una clave a una involucra la conversión de una clave a una variable de tipo variable de tipo unsignedunsigned intint. .

�� Luego, este valor es dividido entre el Luego, este valor es dividido entre el tamaño de la tamaño de la tablatabla hashhash. .

Page 21: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 2121

class class hash_functionhash_function {{

public:public:

unsigned unsigned intint mm;mm;

hash_function(unsignedhash_function(unsigned intint m = 6151)m = 6151)

: : mm(mmm(m) {}) {}

unsigned unsigned intint operator()(constoperator()(const string& s) string& s) const {const {

unsigned unsigned intint resres = 0;= 0;

for (for (intint i = 0; i < i = 0; i < s.sizes.size(); i++) {(); i++) {

resres = = resres * mm + * mm + s[is[i];];

}}

return return resres;;

}}

}; };

Page 22: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 2222

Desventajas tablas Desventajas tablas hashhash

�� Cuando consideramos que existen Cuando consideramos que existen muchas más claves que posiciones dentro muchas más claves que posiciones dentro de una de una tablatabla hashhash, surge un problema. , surge un problema.

�� Esto significa que una Esto significa que una funciónfunción hashhash puede puede potencialmente asignar dos o más claves potencialmente asignar dos o más claves distintas al mismo índice. distintas al mismo índice.

Page 23: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 2323

Colisiones en tablas Colisiones en tablas hashhash

�� Las implantaciones de Las implantaciones de tablastablas hashhash son son complicadas por el hecho de que deben complicadas por el hecho de que deben manejar colisiones potenciales. manejar colisiones potenciales.

�� Estos mecanismos para manejar Estos mecanismos para manejar colisiones se discuten a detalle en el colisiones se discuten a detalle en el capítulo 20 del libro de texto de capítulo 20 del libro de texto de WeissWeiss. .

�� Básicamente, las colisiones Básicamente, las colisiones decrementandecrementanel desempeño de las operaciones de la el desempeño de las operaciones de la tablatabla hashhash

Page 24: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 2424

Colisiones en tablas Colisiones en tablas hashhash

�� La mejor manera de reducir el número de La mejor manera de reducir el número de colisiones, y por ende, incrementar la colisiones, y por ende, incrementar la eficiencia de la eficiencia de la tablatabla hashhash, es usar una , es usar una buena buena funciónfunción hashhash..

�� Una buena Una buena funciónfunción hashhash distribuye distribuye equitativamente la asignación de claves a equitativamente la asignación de claves a través de las posiciones de la través de las posiciones de la tablatabla hashhash..

Page 25: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 2525

MemoizingMemoizing: Una Aplicación de las : Una Aplicación de las Tablas Tablas HashHash

�� Cuando es Cuando es computacionalmentecomputacionalmente costoso costoso calcular el valor de una función y = calcular el valor de una función y = f(xf(x), ), puede ser una buena idea almacenar el puede ser una buena idea almacenar el valor para un uso futuro. valor para un uso futuro.

Page 26: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 2626

MemorizingMemorizing

�� En otras palabras, calculamos En otras palabras, calculamos f(xf(x) sólo la ) sólo la primera vez que el valor de la función de primera vez que el valor de la función de esta entrada particular x es requerida, y esta entrada particular x es requerida, y luego almacenamos ( x, luego almacenamos ( x, f(xf(x) ) en una tabla ) ) en una tabla hashhash. .

�� Cualquier solicitud futura para Cualquier solicitud futura para f(xf(x) ) resultará en una búsqueda en la tabla y resultará en una búsqueda en la tabla y será mucho más rápido el recálculo.será mucho más rápido el recálculo.

Page 27: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 2727

MemorizingMemorizing

�� Esta técnica es llamada Esta técnica es llamada memoizingmemoizing

�� Aquí se muestra la estructura de una Aquí se muestra la estructura de una función función memoizedmemoized

Page 28: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 2828

intint f_memo(intf_memo(int x) {x) {

if ( there is an entry (if ( there is an entry (x,yx,y) in ) in hash table ) {hash table ) {

return y;return y;

}}

else {else {

compute y = compute y = f(xf(x) directly) directly

store (store (x,yx,y) in table) in table

return y;return y;

}}

}}

Page 29: 15 Tablas Hash

Mtl Lourdes CahuichMtl Lourdes Cahuich 2929

MemorizingMemorizing

�� Debido a que la Debido a que la tablatabla hashhash tiene que tiene que persistir entre las llamadas a la función, persistir entre las llamadas a la función, sería natural organizarla como una clase sería natural organizarla como una clase que sobrecarga el operadorque sobrecarga el operador ()(). .