Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FPII01 Ordenacion Busqueda Intercalacion (12-13)
FPII01 Ordenacion Busqueda Intercalacion (12-13)
min
i=7 3 6 10 12 14 15 20 16
3 6 10 12 14 15 16 20
0 1 2 3 4 5 6 7 8
utilizando un centinela.
15 3 6 10 12 14 15 16 20
Como el array queda ordenado entre 1 e i-1, se puede realizar una búsqueda binaria para encontrar la posición
del elemento.
● Una vez localizado el elemento es necesario dejar espacio para el elemento a insertar.
procedimiento OrdenaciónInserciónBinaria(ref vector:v ;valor entero : n)
var
entero : i,j,iz,de,ce
tipoElemento : aux
inicio
desde i 2 hasta n hacer
aux v[i]
iz 1
de i-1
mientras iz <= de hacer
ce (iz + de) div 2
si aux < v[ce] entonces
de ce – 1
si_no
iz ce + 1
fin_si
fin_mientras
desde j i – 1 hasta iz incremento -1 hacer
v[j+1] v[j]
fin_desde
v[iz] aux
fin_desde
fin_procedimiento
Aritmética modular.
hash(clave) clave mod n + 1
● Devuelve un valor entre 1 y n.
● n es un número mayor o igual que el número de elementos a almacenar.
Funciona mejor si n es un número primo.
93 1203
120
Truncamiento.
● Extraer n dígitos de la parte central de la clave.
● n será el número de dígitos máximo de la posición.
● Se utiliza con claves numéricas grandes.
entero función hash(valor entero : clave)
//Para una dirección relativa de 3 dígitos
//Extrae las centenas de millar, decenas de millar y millares
var
entero : dirección
inicio
dirección clave mod 1000000
devolver(dirección div 1000 + 1)
fin_función
Plegamiento.
● Partir la clave en fragmentos de n dígitos y sumarlos, despreciando el acarreo.
● n será el número de dígitos del número máximo de posiciones.
Dos problemas:
● Será necesario averiguar si una posición de
almacenamiento ya está ocupada por otra clave.
Se puede inicializar alguno de los campos o la propia clave a un
valor centinela (por ejemplo -1).
● Será necesario buscar un nuevo espacio en el
almacenamiento para guardar el sinónimo.
Distintas técnicas.
○ Encadenamiento de colisiones.
○ Llevar las colisiones a una zona espacial (direccionamiento a zona de
colisiones).
○ Almacenar los sinónimos lo más cerca posible de su posición original
(direccionamiento a vacío).
1. En una tabla se almacenan las ventas realizadas por n vendedores en cada uno de los 12 meses del año.
● Generar un array de registros en el que se almacene en número de vendedor (número de la fila
dónde se encuentra) y el total de ventas realizadas por el vendedor en el año.
● Ordenar el array de registros de menor a mayor por el total de ventas realizadas.
2. Se desea obtener la tabla de puntuación en una liga de futbolín en la que compiten 10 equipos a una
sola vuelta. Los resultados se almacenarán en una tabla de dos dimensiones, de forma que cada
elemento i,j de la tabla guarda los tantos que ha marcado el equipo i al equipo j en el encuentro. Por
ejemplo, un 8 en la posición 2,6 significa que en el encuentro entre el equipo 2 y el equipo 6, el equipo 2
ha metido 8 tantos al equipo 6.
Los nombres de los equipos y la puntuación obtenida por cada uno de ellos se almacenarán en un array
de registros de 10 posiciones (una por equipo) que almacenará el nombre del equipo y la puntuación.
● Declarar las estructuras de datos necesarias para realizar la aplicación.
● Diseñar un módulo que permita introducir por teclado el nombre de los equipos y almacenarlo en el
array de registros.
● Diseñar un módulo que permita rellenar la tabla con los tantos obtenidos por los equipos.
● Diseñar un módulo que permita obtener la puntuación de cada equipo (3 puntos por partido
ganado, 1 por partido empatado y 0 por partido perdido).
● Diseñar un módulo que permita obtener la clasificación de la liga.