Sobes.tech
Junior

¿En qué consiste el principio de funcionamiento de una tabla hash?

sobes.tech AI

Respuesta de la IA

La tabla hash (o matriz asociativa) almacena pares de "clave-valor". El principio de funcionamiento se basa en el uso de una función hash, que transforma la clave en un índice numérico (hash), que indica la ubicación del valor en la matriz (cesta).

Pasos:

  1. Cálculo del hash: Para una clave dada, se calcula el hash.
    <?php
    $key = "example";
    $hash = crc32($key); // Ejemplo de función hash simple
    
  2. Determinación del índice: El hash se transforma en un índice de la matriz, generalmente usando la operación módulo del tamaño de la matriz.
    <?php
    $arraySize = 10;
    $index = $hash % $arraySize;
    
  3. Acceso a la cesta: Se accede a la cesta correspondiente en la matriz usando el índice calculado.
  4. Resolución de colisiones: Dado que diferentes claves pueden tener el mismo hash (colisión), la cesta puede contener varias pares "clave-valor". Para resolver colisiones, se utilizan diferentes métodos:
    • Método de encadenamiento (Separate Chaining): Cada cesta almacena una lista (por ejemplo, una lista enlazada) de pares "clave-valor" cuyos hashes coinciden.
    • Método de direccionamiento abierto (Open Addressing): En caso de colisión, se realiza una búsqueda repetida de una celda libre en la matriz según una regla determinada (sondeo lineal, cuadrático, doble hashing).

Operaciones:

  • Inserción: Se calcula el hash de la clave, se determina el índice, y el par "clave-valor" se coloca en la cesta correspondiente. En caso de colisión, se añade a la lista (encadenamiento) o se busca un lugar libre (direccionamiento abierto).
  • Búsqueda: Se calcula el hash de la clave, se determina el índice. En la cesta correspondiente, se busca el valor por la clave. En el método de encadenamiento, se recorren los elementos de la lista; en el direccionamiento abierto, se realiza una búsqueda secuencial.
  • Eliminación: Se calcula el hash de la clave, se determina el índice. En la cesta correspondiente, se encuentra y elimina la pareja por la clave.

Ventajas:

  • Acceso rápido a los elementos (en promedio O(1)).
  • Uso eficiente de la memoria.

Desventajas:

  • El rendimiento puede deteriorarse con un gran número de colisiones.
  • El tamaño de la tabla puede requerir ajuste (rehashing) para mantener la eficiencia.