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ónDispersió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 ListaInicializar Tabla ( T )
Sección titulada «Inicializar Tabla ( T )»procedimiento InicializarTabla (T)    para i := 0 hasta N-1 hacer        CrearLista(T[i])    fin parafin procedimientoBuscar ( 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ónInsertar ( 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 procedimientoDispersió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 ListaInicializarTabla (D)
Sección titulada «InicializarTabla (D)»procedimiento InicializarTabla (D)    para i := 0 hasta N-1 hacer        D[i].Información := vacía    fin parafin procedimientoBuscar (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 procedimientoEliminar (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  