Atlasingeniería

Algoritmos y programaciónManejo de datosTema 3

Diccionarios y conjuntos

Un diccionario asocia claves con valores y un conjunto registra pertenencia. Sus interfaces expresan intención y evitan búsquedas lineales repetidas.

Para este tema conviene tener claro:Arreglos, listas y matrices

Si buscás el mismo tipo de dato una y otra vez, recorrer una lista cada vez suele ser una señal. Un diccionario permite preguntar por una clave; un conjunto responde si un valor pertenece.

El diccionario: pares con clave única

Un diccionario guarda pares clave-valor. Las claves son únicas: asignar otra vez la misma clave actualiza su valor según la interfaz habitual.

const scores = new Map<string, number>();
scores.set('Ada', 10);
scores.set('Linus', 8);
const adaScore = scores.get('Ada');

La clave expresa cómo se identifica un registro; el valor guarda la información asociada.

Diccionario vacío. Las cubetas son un detalle de la implementación; lo que importa es que cada clave tiene un lugar.

1 / 5
Las claves son únicas: la segunda asignación pisa a la primera. Eso es lo que distingue un diccionario de una lista de pares, donde las dos convivirían.

Antes de seguir, predecí

Guardás mil nombres en un arreglo y preguntás mil veces si alguno ya está, con includes. ¿Cuántas comparaciones hacés?

El conjunto: pertenencia sin repetidos

Un conjunto guarda valores sin repeticiones. Sirve para pertenencia, deduplicación e intersección. Si sólo importa saber si un identificador ya apareció, un Set comunica mejor la intención que un mapa con booleanos ficticios.

Agregar dos veces el mismo valor no cambia el conjunto. Esa propiedad permite eliminar duplicados, pero el orden resultante depende del contrato concreto de la implementación.

Tabla hash o árbol balanceado

Una tabla hash ofrece búsqueda, inserción y borrado esperados en O(1)O(1), siempre que distribuya bien las claves y controle colisiones. Un árbol balanceado ofrece O(logn)O(\log n) en peor caso y además mantiene las claves ordenadas.

La interfaz “diccionario” no obliga a una implementación. Si necesitamos recorrer por rango o pedir el siguiente elemento, el orden de un árbol puede valer más que el promedio constante de un hash.

Escena 1 — Del contenido de la clave a una posición

paso a paso

Cargando la escena…

El hash se calcula sobre el contenido de la clave: eso es lo que permite ir directo a la cubeta en vez de recorrer. Agregá claves y aparecen las colisiones, que no son un error sino el caso normal.

Qué hace que algo pueda ser clave

Una clave debe tener igualdad estable mientras permanece en la estructura. Usar objetos mutables según su contenido puede volver inaccesible una entrada si cambia aquello que determinaba su hash.

También hay que distinguir ausencia de un valor almacenado equivalente a vacío. Métodos como has responden pertenencia; get responde contenido. Mezclarlos puede confundir “no existe” con “existe y su valor es indefinido”.

Cuál de los cuatro

Objeto planoMapSetArreglo
Clavessólo texto y símboloscualquier valorno aplicaíndices
Mantiene el orden de inserciónno garantizado con claves numéricas
Saber cuántos hayObject.keys().length: O(n)size: O(1)size: O(1)length
Riesgo de colisión con heredadossí: toString, constructornonono
Cuándo vadatos con forma fija y conocidaun diccionario de verdadpertenencia y unicidadorden y recorrido
La cuarta fila es la que convierte un objeto plano usado como diccionario en un problema de seguridad: una clave llamada como una propiedad heredada devuelve algo que nadie guardó.

Cierre

Diccionarios modelan asociaciones y conjuntos modelan pertenencia. Elegirlos elimina recorridos repetidos y hace visible el contrato. Después se elige hash o árbol según garantías, orden y operaciones necesarias.

Autoevaluación

¿Lo entendiste?

Sólo importa saber si un identificador ya apareció. ¿Qué estructura comunica mejor la intención?
¿Cuándo conviene un árbol balanceado en vez de una tabla hash para un diccionario?
¿Qué condición tiene que cumplir una clave?
Agregar dos veces el mismo valor a un conjunto…