Hash Tables
Las tablas hash (HashMap, Dictionary, Object) son la estructura de datos más universalmente útil para optimizar algoritmos. Funcionan calculando un número hash de la clave y usando ese número como índice en un array interno. Resultado: buscar, insertar o eliminar toma O(1) promedio sin importar cuántos elementos haya.
El "promedio" es importante: en casos de colisión (dos claves con el mismo hash) puede degradarse, pero con buenas funciones hash esto es muy raro.
El patrón más poderoso con tablas hash es la memorización y el conteo de frecuencias. Para saber si un array tiene duplicados: guarda cada elemento en un Set mientras recorres; si ya existe, hay duplicado. Para el problema de la subsecuencia más larga sin duplicados, usa un Map con la posición del último carácter visto.
Para contar frecuencias de palabras en un texto, usa un Map de string a número. Estos patrones convirtentes problemas O(n²) en O(n).
// Hash Map en JavaScript = Map o {}
const frecuencia = new Map();
const palabras = ["hola", "mundo", "hola", "code", "hola"];
for (const p of palabras) {
frecuencia.set(p, (frecuencia.get(p) || 0) + 1);
}
console.log(frecuencia.get("hola")); // 3
// Problema clásico: Dos Suma (Two Sum)
// Dado array, encuentra índices que sumen al objetivo
function dosSuma(nums, objetivo) {
const visto = new Map(); // valor → índice
for (let i = 0; i < nums.length; i++) {
const complemento = objetivo - nums[i];
if (visto.has(complemento)) {
return [visto.get(complemento), i];
}
visto.set(nums[i], i);
}
return [];
}
// Solución naive O(n²) vs hash O(n)
console.log(dosSuma([2, 7, 11, 15], 9)); // [0, 1]
// Agrupar anagramas
function agruparAnagramas(palabras) {
const grupos = new Map();
for (const p of palabras) {
const clave = p.split("").sort().join(""); // "eat" → "aet"
if (!grupos.has(clave)) grupos.set(clave, []);
grupos.get(clave).push(p);
}
return [...grupos.values()];
}
console.log(agruparAnagramas(["eat","tea","tan","ate","nat","bat"]));
// [["eat","tea","ate"],["tan","nat"],["bat"]]
Practica esta lección
Resuelve los ejercicios del curso de Algoritmos en la app, gratis y con corrección automática.
Empezar a practicar