Saltar al contenido

Las Swiss tables

Las tablas hash de Abseil (Google), de Rust (hashbrown, el HashMap de la biblioteca estándar) y, desde 2025, los mapas de Go usan direccionamiento abierto en grupos: guardan, aparte, un byte de control por posición con unos bits del hash. Con una sola instrucción del procesador comparan 8 o 16 bytes de control a la vez y descartan casi todas las posiciones sin mirar las claves.

Haz la cuenta en un grupo de 16 posiciones, 11 de ellas ocupadas, donde el byte de control de cada posición guarda 7 bits del hash de su clave. Buscas una clave cuyo byte de control coincide con el de 3 posiciones del grupo.

En un grupo de 16 posiciones de una tabla de este tipo hay 11 ocupadas. Cada posición tiene un byte de control con 7 bits del hash de su clave (o una marca de vacía). Buscas una clave cuyo byte de control es el mismo que el de 3 posiciones del grupo. ¿Cuántas claves completas, como máximo, hay que comparar, y cuántas posiciones del grupo se descartan sin mirar su clave?