Tablas de dispersión
Función de dispersión
Sección titulada «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
Sección titulada «Dispersión abierta»Tipo Tabla Dispersión
Sección titulada «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 )
Sección titulada «Inicializar Tabla ( T )»procedimiento InicializarTabla (T) para i := 0 hasta N-1 hacer CrearLista(T[i]) fin parafin procedimiento
Buscar ( Elem, Tabla )
Sección titulada «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 )
Sección titulada «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
Sección titulada «Dispersión cerrada»Tipo Tabla Dispersión
Sección titulada «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)
Sección titulada «InicializarTabla (D)»procedimiento InicializarTabla (D) para i := 0 hasta N-1 hacer D[i].Información := vacía fin parafin procedimiento
Buscar (Elem, D)
Sección titulada «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)
Sección titulada «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)
Sección titulada «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