Saltar al contenido principal
Data structures, algorithms, and the core CS foundations — plus an optional advanced track for expert topics.

Core Computer Science

Data structures, algorithms, and the core CS foundations — plus an optional advanced track for expert topics.

Hash Table Visualizer

Chaining

100ms
Step Progress 0 / 0
Load Factor 0%
Collisions 0
Status Ready
Empty Bucket
Occupied
Active
Collision
Step Explanation

Select an operation to begin.

Pseudocode
 

Hash Table

Elementary (2/5) ~1 hora Hash function: key → index Collision handling: chaining vs open addressing Load factor y resizing Amortized O(1) operations Prereqs: Arrays, Linked Lists

Hash Table (o hash map, dictionary) almacena pares (key, value) en un array usando una función hash para mapear keys a índices. El objetivo es acceso, inserción y eliminación en O(1) promedio.

La clave del diseño es manejar colisiones: cuando dos keys distintas mapean al mismo índice.

Hash Function

index = hash(key) % capacity

Una buena hash function:

  • Distribuye uniformemente (pocas colisiones).
  • Es determinística (mismo key → mismo índice).
  • Es rápida de calcular.

Collision Handling

Separate Chaining

Cada bucket es una linked list (o tree). Si colisionan, encadenas en la lista.

  • Pros: simple, nunca se llena (solo se degrada).
  • Contras: overhead de punteros, cache-unfriendly.

Open Addressing

Todos los elementos están en el array. Si colisionan, buscas la siguiente posición libre (probing sequence).

  • Linear probing: index = (hash + i) % capacity.
  • Quadratic probing: index = (hash + i²) % capacity.
  • Double hashing: index = (hash1 + i × hash2) % capacity.

Clustering es el problema principal: linear probing sufre primary clustering.

Load Factor y Resizing

Load factor α = n / m donde n = elementos, m = capacidad.

Cuando α > threshold (típicamente 0.75), se hace resize:

  1. Crea nuevo array de tamaño 2m.
  2. Re-hashea todos los elementos.
  3. Actualiza la referencia.

Resize es O(n), pero es amortizado O(1) porque ocurre raramente.

Comparación

MétodoBúsquedaInserciónEliminaciónColisiones
ChainingO(1+α)O(1)O(1+α)Lista enlazada
Linear probingO(1/(1-α))O(1)O(1)Clustering
Quadratic probingO(1)O(1)O(1)Secondary clustering

Aplicaciones

  • Databases — indexing, hash joins
  • Caches — LRU cache usa hash map + linked list
  • Compilers — symbol tables
  • Cryptografía — password storage (con salt + bcrypt/Argon2)
  • Conjuntos — unique element tracking

Casos Extremos

  • Todos keys colisionan — O(n) degenera a array/lista.
  • Resize infinito — sin threshold, el array crece sin control.
  • Hash adversarial — attacker envía keys que colisionan (DoS). Usa hash aleatorizado.
  • Eliminación en open addressing — requiere tombstone markers.

Trayectoria de Práctica

  1. Implementa hash table con chaining; prueba con 1000 elementos.
  2. Implementa linear probing; compara con chaining.
  3. Añade resizing cuando α > 0.75.
  4. Investiga robin hood hashing: ¿cómo reduce varianza?
  5. Investiga cuckoo hashing: ¿cómo garantiza O(1) worst-case?