Tablas de dispersión
Función de dispersión
Toda función de dispersión debe:
- Calcularse de forma sencilla
- Distribuir uniformemente las calves
Un ejemplo de una función de dispersión:
función Dispersión1 (Clave, TamañoClave): Índice valor := ascii(Clave[1]); para i := 2 hasta TamañoClave hacer valor := valor + ascii(Clave[i]) fin para devolver valor mod Nfin función
Dispersión abierta
Tipo Tabla Dispersión
tipo Índice = 0..N-1tipo Posición = ^Nodotipo Lista = Posición
tipo Nodo = registro Elemento : TipoElemento Siguiente : Posiciónfin registro
tipo TablaDispersión = vector [Índice] de Lista
Inicializar Tabla ( T )
procedimiento InicializarTabla (T) para i := 0 hasta N-1 hacer CrearLista(T[i]) fin parafin procedimiento
Buscar ( Elem, Tabla )
función Buscar (Elem, Tabla) : Posición i := Dispersión(Elem); devolver BuscarLista(Elem, Tabla[i])fin función
Insertar ( Elem, Tabla )
procedimiento Insertar (Elem, Tabla) pos := Buscar(Elem, Tabla); (* No inserta repetidos *) si pos = nil entonces i := Dispersión(Elem); InsertarLista(Elem, Tabla[i])fin procedimiento
Dispersión cerrada
Tipo Tabla Dispersión
Los cambios a realizar respecto a la dispersión abierta:
tipo ClaseDeEntrada = (legítima, vacía, eliminada)tipo Índice = 0..N-1tipo Posición = Índicetipo Posición = ^Nodotipo Lista = Posición
tipo Entrada = registro Elemento : TipoElemento Información : ClaseDeEntrada Siguiente : Posiciónfin registro
tipo TablaDispersión = vector[Índice] de Entradatipo TablaDispersión = vector [Índice] de Lista
InicializarTabla (D)
procedimiento InicializarTabla (D) para i := 0 hasta N-1 hacer D[i].Información := vacía fin parafin procedimiento
Buscar (Elem, D)
función Buscar (Elem, D): Posición i := 0; x = Dispersión(Elem); PosActual = x; mientras D[PosActual].Información <> vacía y D[PosActual].Elemento <> Elem hacer i := i + 1: PosActual := (x + FunResoluciónColisión(x, i)) mod N fin mientras; devolver PosActualfin función
(* La búsqueda finaliza al caer en una celda vacía *)(* o al encontrar el elemento (legítimo o borrado) *)
Insertar (Elem, D)
procedimiento Insertar (Elem, D) pos = Buscar(Elem, D); si D[pos].Información <> legítima entonces (* Bueno para insertar *) D[pos].Elemento := Elem; D[pos].Información := Legítimafin procedimiento
Eliminar (Elem, D)
procedimiento Eliminar (Elem, D) pos = Buscar(Elem, D); si D[pos].Información = legítima entonces D[pos].Información := eliminadafin procedimiento
Pablo Portas López © 2025 licensed under CC BY 4.0