← Lumbre

Estructuras de Datos y Algoritmos · 2.º Tablas hash

← Volver a todos los contenidos
Portada de Tablas hash

Tablas hash

✦ La estructura más usada de la informática: convierte una búsqueda en un acceso directo · Estructuras de Datos y Algoritmos · Programación · en 4 minutos

Roadwise Consulting

Firmado y verificado · Fernando Castro

Objetivo: Explica el funcionamiento de una tabla hash, el origen y tratamiento de las colisiones y el costo promedio y pesimista de sus operaciones.

4 min 18–30 años
Autoevaluación
Más
Tablas hash

Herramientas de la lección

◉ Entrar a La Matrix Sorpréndeme

Sobre este contenido

Ir a

Volver a Objetos Cursos Explorar Mi cuenta Salir del modo estudio

Tablas hash

Diagrama de estructuras de datos: arbol binario, lista enlazada y tabla hash.
Estructuras de datos fundamentales y analisis de complejidad algoritmica.

Mapa conceptual

  • Estructuras de Datos
    • Lineales
      • Arrays
      • Listas enlazadas
      • Pilas y Colas
    • No lineales
      • Arboles BST
      • Heaps
      • Grafos
    • Hash
      • Funcion hash
      • Colisiones
      • Rehashing
    • Algoritmos
      • Ordenamiento
      • Busqueda binaria
      • BFS DFS
    • Optimizacion
      • Big-O
      • Dinamica
      • Voracidad

Cómo funciona

  1. Una función hash toma la clave y la reduce a un número (un entero).
  2. Ese número módulo la capacidad de la tabla da el ÍNDICE del «cubo» donde irá el valor.
  3. Para leer, se repite el cálculo y se va directo a ese cubo.
  4. Resultado: acceso promedio O(1), sin recorrer nada.

El problema: colisiones

Distintas claves pueden producir el mismo índice: eso es una colisión. Como el número de claves posibles es infinito y los cubos finitos, por el principio del palomar las colisiones SON obligatorias; el diseño no las elimina, las gestiona.

  • Encadenamiento: cada cubo guarda una mini-lista de los que cayeron ahí. Buscar recorre solo esa lista.
  • Sondeo abierto: si el cubo está ocupado, se prueban cubos vecinos según una regla hasta hallar uno libre.
El O(1) de los diccionarios es PROMEDIO, no garantía. Asumir «siempre O(1)» es el error clásico.
EscenarioBúsquedaCuándo ocurre
Promedio (buen hash, α bajo)O(1)distribución uniforme de claves
Peor casoO(n)todas las claves colisionan (hash adversario o pésimo)
Cubo con cadena largaO(longitud de cadena)α alto o cluster de colisiones
Búsqueda: hash (plana) vs árbol (log) vs escaneo (lineal)

f(x) = x · f(x) = log(x) · f(x) = 1

Errores frecuentes

  • Asumir O(1) garantizado: una función hash que concentra claves (o un ataque deliberado, como el hash-flooding) degrada a O(n).
  • Olvidar que las claves deben ser INMUTABLES y hashables: mutar la clave de un elemento ya insertado rompe el cálculo del cubo y lo «pierde».
  • No dimensionar la tabla: α alto llena las cadenas; por eso se duplica el tamaño y se reinserta (rehash) al crecer.

Ejemplo resuelto

  1. Tabla de 10 cubos, función hash = longitud de la clave mod 10.
  2. Insertar «ana» (len 3) va al cubo 3; «luis» (len 4) al cubo 4; «eva» (len 3) al cubo 3.
  3. «ana» y «eva» colisionan: en encadenamiento, el cubo 3 guarda una lista de dos.
  4. Buscar «eva»: hash da 3, se recorre SOLO la lista de ese cubo (2 elementos) y se compara la clave.
  5. Si el cubo 3 acumulara miles, la búsqueda ahí sería lineal: señal de un hash que no dispersa.

Cuando escribes dict o set en Python, o cuando una base de datos resuelve una clave, o una caché consulta una sesión, hay una tabla hash detrás. Entender colisiones y factor de carga te advierte cuándo esa magia de «constant time» deja de serlo.

Una tabla hash da acceso promedio O(1), pero ¿qué situación la degrada hacia O(n)?

Relaciona cada término de una tabla hash con su papel:

      Anatomía del hash

      función hash
      clave a número
      cubo/bucket
      posición en la tabla
      colisión
      dos claves, mismo índice
      encadenamiento
      lista por cubo
      sondeo abierto
      probar cubos vecinos
      factor de carga α
      elementos / cubos
      O(1)
      promedio, no garantía
      clave inmutable
      requisito para hashar

      Toca una tarjeta para ver la respuesta.

      Video complementario
      Recurso audiovisual para reforzar los conceptos.

      Explica con tus palabras por qué un set en Python responde «¿está x?» muchísimo más rápido que una list para millones de elementos, y describe una situación en la que aun así el set se degradaría y perdería su ventaja.

      Tu texto se guarda sólo en este dispositivo.

      Las respuestas y tu progreso se guardan sólo en este dispositivo. Contenido firmado por su autoría mediante Lumbre.

      Autoevaluación

      Comprueba lo que aprendiste

      1 pregunta · ves cada respuesta al momento · el resultado queda guardado en tu historial

      Iniciar autoevaluación
      Más sobre esta lección

      ¿Necesitas ayuda?

      Vamos a atacar justo la parte que no te cuadra

      Explicaciones cortas, dibujos, ejemplos y práctica. Nada cuenta como nota.

      Llegaste aquí desde otro camino. Puedes seguir aquí el tiempo que quieras.

      Volver a «Busco información y encuentro respuestas»

      Rutas vivas

      ¿Y ahora qué? Elige el camino por lo que necesitas

      No es un listado al azar: cada camino responde una pregunta distinta y te dice por qué.

      Otra forma de comprenderlo

      ✦ Explorar el universo completo
      Explora temas relacionados

      Conceptos

      Comentarios

      Inicia sesión para comentar.

      Todavía no hay comentarios. Sé la primera persona en opinar.