Ficheros invertidos

Anuncio
3 - Indexación. Ficheros con organización
secuencial indexada.
3.1 - Organizaciones para acceso directo: ficheros relativos.
Objetivo: reducir (minimizar) el coste de las operaciones de búsqueda,
implementando un acceso “directo” a los datos
3.1 - Organizaciones para acceso directo: ficheros relativos.
tiene sentido en soportes “direccionables”
3.2 - Concepto de índice. Técnicas de indexación de ficheros.
Organización indexada.
Solución: establecer una conexión entre el valor del dato y su ubicación física
3.3 - Organizaciones con varios índices secundarios:
ficheros invertidos.
clave: pequeña porción de información que identifica (nivel lógico) un dato
• Propia
• Añadida
3.4 - Estructuras de árbol y su utilización en las organizaciones
indexadas: árboles B y B*.
es única para cada dato
¿ y si hay valores repetidos ?
fichero relativo { fichero en el que existe una relación “predecible” entre
la clave de un dato y su ubicación física.
3.5 - Familia de árboles B+ y organización secuencial indexada.
R(clave) o ubicación física, siendo R una función de cálculo de direcciones
Organización ligada a la clave
Curso
Tema I: Ficheros
2010/2011
S. Velilla
Univ. de Zaragoza
1
2010/2011
S. Velilla
Univ. de Zaragoza
2
ficheros relativos: ficheros directos con mapeo absoluto
ficheros relativos: tipos y operadores básicos
la implementación de la función R o diferentes tipos de ficheros relativos :
ficheros directos:
• “mapeo” directo
o ficheros directos
• búsqueda en directorio o ficheros indexados
• cálculo de direcciones o ficheros dispersos
operadores básicos:
Curso
Tema I: Ficheros
• “mapeo” directo absoluto: Ÿ clave { dirección física
ventajas:
• simplicidad ( cálculo direcciones) y eficiencia
inconvenientes: • dependencia de la representación física o registros “pinchados” (pinned)
• Asociar (f, nombre)
• Disociar (f)
dificultad de reestructuración y gestión del espacio de almacenamiento
• la clave no es adecuada (no tiene relación con la información del dato)
• LeerDato
(f, clave, d, exito)
• EscribirDato (f, clave, d, exito)
Pb. semántico: ¿cómo se implementa la existencia de un dato ?
responsabilidad del usuario ?
no se suele usar
• EliminarDato (f, clave, exito)
• • •
¿ y para obtener todos los datos ?
Tema I: Ficheros
Op. secuenciales
PrimerDato(f,d,exito) + SiguienteDato (f,d,exito)
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
3
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
4
ficheros relativos: ficheros directos con mapeo relativo
ficheros directos: ejemplos de implementación
casi todos los gestores incluyen ficheros directos con operadores
de “bajo nivel” ( relación con la información de los datos) e incluyen los
operadores de tratamiento secuencial
ficheros directos:
• “mapeo” directo relativo: Ÿ clave { dirección relativa (NRR)
ventajas:
• bastante simple y eficiente
en
inconvenientes: • la clave puede no tener relación con la información del dato (suele ser
algo añadido)
• implementación un poco más compleja
la no existencia de un dato o
• marca de borrado (costoso)
• dirección no existente
C
Curso
2010/2011
en la op. de creación, o
responsab. del usuario
S. Velilla
Univ. de Zaragoza
int
5
S. Velilla
Univ. de Zaragoza
6
Concepto de índice: ejemplo
11453678
12566780
13452779
13654109
14765876
15555098
17890987
18907655
19900430
19994563
• absoluta
• relativa (NRR)
dirDato
4
7
9
8
1
3
2
6
0
5
nombre
0
1
2
3
4
5
6
7
8
9
Santiago Rivas
Marisa Sampedro
Rosa Asensio
Antonio Abad
Jose Pérez
Concepción Sanz
Andrés Costa
Pedro Gutiérrez
Agapito López
Andrés Ruiz
índice
pueden estar integrados en un único fichero (reg. diferentes)
S. Velilla
Univ. de Zaragoza
2010/2011
NRR
suelen implementarse en base a dos ficheros: f. índice + f. datos
Curso
Curso
Tema I: Ficheros
dni
acceso al dato Ÿ 2 pasos : búsqueda en índice + acceso al dato
2010/2011
{ rewind(f) = fseek(f,0L,SEEK_SET}
Información de personas. Como clave se usará el DNI (identifica una persona)
fichero indexado { fichero cuya organización está basada en un índice (o más)
Tema I: Ficheros
fgetpos (FILE *fichero, fpos_t * ptrDir)
void rewind (FILE *fichero)
representar explícitamente la relación entre
valores de la clave y la ubicación física del dato
| VECTOR (tabla) de registros
fsetpos (FILE *fichero, const fpos_t * ptrDir)
copia en *ptrtDir la posición actual sobre el "fichero", para uso posterior con fsetpos. Devuelve 0 si no error.
Objetivo: utilizar como clave una abstracción de la información del dato
INDICE
int
(devuelve la posición actual, o -1L si hay error)
Sitúa el "fichero" en la posición almacenada en *ptrtDir por la función fgetpos. Devuelve 0 si no error.
3.2 - Concepto de índice. Técnicas de indexación de ficheros.
Organización indexada
búsqueda en directorio {
fseek (FILE *fichero, long direcciónRelativa, int origen)
siendo origen = SEEK_SET (=principio), SEEK_CUR (=actual), o SEEK_END (=final)
long ftell (FILE *fichero)
implementación: • contigua o eficiente, pero muy poco adecuada (en general)
• directa (pb. tamaño y gestión)
• “tabla” de traducción • lista encadenada (versátil, pero menos eficiente)
• multinivel (compromiso adecuado eficiencia-eficacia)
Tema I: Ficheros
int
7
Tema I: Ficheros
dni
teléfono
19900430
14765876
17890987
15555098
11453678
19994563
18907655
12566780
13654109
13452779
331234
127890
336533
335555
374167
401221
808188
447634
123400
551230
datos
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
8
Concepto de índice: ventajas/inconvenientes.
Operadores básicos.
• menor tamaño del índice Ÿ mayor eficiencia búsqueda (n factor de bloque)
una entrada de índice por cada dato { índice denso
podría caber en memoria
• registros del índice de long. fija (normalmente) Ÿ acceso + simple y eficiente
el índice puede ser excesivamente grande
(p.e. búsqueda binaria)
• simplifica la utilización de registros de longitud variable (representados como tales)
• permite acceso directo (eficiente) a los datos utilizando cualquier campo clave,
incluso simultáneamente (varios índices)
• permite mantener una (o varias) ordenación lógica de los datos sin moverlos
el mantenimiento del orden es muy eficiente
inconveniente:
Solución:
NRR
índice no-denso
• Asociar (f, nombre)
• Disociar (f)
• LeerDato
(f, clave, d, exito)
• EscribirDato (f, clave, d, exito)
• EliminarDato (f, clave, exito)
Curso
Tema I: Ficheros
2010/2011
• PrimeraClave (f, clave, exito)
• SiguienteClave (f, clave, exito)
9
dni
dirDato
11453678
13654109
19900430
0
3
8
3
4
5
6
Se puede aprovechar la
organización física en bloques
8
9
Jose Pérez
Pedro Gutiérrez
Andrés Ruiz
Agapito López
Marisa Sampedro
Antonio Abad
Rosa Asensio
Andrés Costa
Santiago Rivas
Concepción Sanz
Curso
Tema I: Ficheros
2010/2011
dni
11453678
12566780
13452779
13654109
14765876
15555098
17890987
18907655
19900430
19994563
teléfono
374167
447634
551230
123400
127890
335555
336533
808188
331234
401221
S. Velilla
Univ. de Zaragoza
Concepto de índice: densidad de un índice. Ejemplos
Implementación de una Organización Indexada simple
densidad del índice = nº entradas / nº total de datos
• funcionalidad
implementación: operaciones de mantenimiento Ÿ compromiso • eficiencia
• seguridad
el tratamiento de los datos se hace en bloques Ÿ en el índice la ref. del bloque
más complejas y menos eficientes (a veces) con índices no-densos
FICHERO
denso
ordenado
ordenado
no ordenado
posible
IS3
IS3
ISAM
VSAM
UFAS
ordenado VSAM
ISAM
UFAS
no denso
no ordenado
Tema I: Ficheros
el coste de la búsqueda (aun binaria) no tiene por qué ser despreciable
fichero
no ordenado
10
acceso al índice y a los datos
Bloque “ ancla ” { primer bloque de la subsecuencia
INDICE
1
7
o dato (pero a través de la clave)
S. Velilla
Univ. de Zaragoza
nombre
0
2
• operaciones de procesamiento secuencial (afectan a muchos datos) son más lentas
operadores básicos:
elegir un subconjunto de claves Ÿ ordenación (parcial) de los datos por la clave
Ordenados por DNI
ventajas:
Concepto de índice: índice denso y no-denso
posible
Curso
2010/2011
{ índice secuencial tipo AS400
{ secuencial indexado IBM
{ secuencial indexado regular IBM
{ secuencial indexado BULL
S. Velilla
Univ. de Zaragoza
11
Ejemplo: aplicación al diseño de una organización indexada sencilla
• • • •
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
12
FICHERO DE DATOS
Concepto de índice: tipos de índices
Apell_Nombre
Abad, Adriana
Abarca, Félix
DNI
FechaNac Puesto Salario Sexo
.....
Acevedo, Irene
la extensión de la idea de indexación o diferentes tipos de índices
Acosta, Beatriz
Acosta, Roberto
FICHERO DE INDICE
(entradas <K(i), P(i)>)
.....
• índice primario
Clave primaria
del ancla del bloque
{ se utiliza la clave (primaria) del dato
Aguilera, Héctor
Aguilera, Santiago
Abad, Adriana
Acosta, Beatriz
Aguilera, Héctor
Alcalá, Enrique
Aranda, María
....
• índice de agrupamiento { se utiliza un campo de ordenación del dato
• índice secundario
Aguilar, Amelia
apuntador
a bloque
{ se utiliza la cualquier otro campo (clave o no)
.....
Albiol, Sonia
Alcalá, Enrique
Alcántara, Silvia
.....
....
Amaya, Francisco
....
Aranda, María
Atarés, Rosendo
.....
Si todavía es muy grande el índice o nuevo índice sobre el índice
Azuara, Roberto
Yáñez, Francisco
Zapata, Luis
....
Yáñez, Francisco
Yáñez, Rita
índice multinivel
.....
Zamora, Angel
aumenta la eficiencia de la búsqueda, pero complica la gestión
Indice primario según el campo de
clave de ordenación del fichero (no-denso)
Zapata, Luis
Zapatero, Antonio
.....
Zubiaurre, Abelardo
S. Velilla
Univ. de Zaragoza
Curso
Tema I: Ficheros
2010/2011
numDpto
1
1
1
2
apuntador
a bloque
valor del campo
de agrupamiento
1
2
3
4
5
6
Apell_Nombre
DNI
....
....
2010/2011
14
FICHERO DE DATOS
Campo de agrupamiento
numDpto
1
1
FechaNac Puesto Salario
Apell_Nombre
DNI
FechaNac
Puesto
Salario
apuntador a bloque
x
apuntador a bloque
x
2
2
3
3
3
FICHERO DE INDICE
(entradas <K(i), P(i)>)
3
3
4
4
....
S. Velilla
Univ. de Zaragoza
Curso
Tema I: Ficheros
FICHERO DE DATOS
Campo de agrupamiento
FICHERO DE INDICE
(entradas <K(i), P(i)>)
13
3
3
3
apuntador a bloque
valor del campo
de agrupamiento
5
5
5
5
apuntador
a bloque
1
2
3
4
5
6
6
6
6
6
3
3
apuntador a bloque
x
apuntador a bloque
x
4
4
4
5
5
5
14
15
apuntador a bloque
13
14
14
14
Indice de agrupamiento según el campo
de ordenación numDpto del fichero
Tema I: Ficheros
Indice de agrupamiento con bloques individuales
para cada grupo de registros que comparten el
mismo valor del campo de agrupamiento
14
14
14
15
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
15
Tema I: Ficheros
5
5
5
apuntador a bloque
x
apuntador a bloque
x
6
6
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
16
FICHERO DE INDICE
(entradas <K(i), P(i)>)
Campo de indización
(clave secundaria)
Apell_Nombre
apuntador
a bloque
valor del campo
de indización
1
2
3
4
5
6
7
8
FICHERO DE INDICE
(entradas <K(i), P(i)>)
FICHERO DE DATOS
NIP
9
5
13
8
DNI
FechaNac Puesto Salario
valor del campo
1
2
3
4
5
6
8
24
10
20
1
6
5
2
5
5
1
6
3
12
7
19
22
Indice secundario según un campo no clave, implementado con
un nivel de indirección (entradas del índice de longitud fija y valores únicos)
S. Velilla
Univ. de Zaragoza
Curso
Tema I: Ficheros
2010/2011
17
FICHERO DE DATOS
NIP
2
5
PRIMER NIVEL
(base)
2
8
15
24
SEGUNDO NIVEL
(superior)
2
35
55
85
Apell_Nombre
DNI
FechaNac Puesto Salario
39
41
Índice primario
ANG3795
167
COL31809
353
COL38358
211
DG139201
396
DG18807
256
FF245
442
LON2312
32
MER76016
300
RCA2626
77
WAR23699
132
51
52
55
58
63
66
71
78
80
82
Tema I: Ficheros
18
85
89
Curso
2010/2011
no tienen por qué ser
información clave
ejemplo: información de grabaciones musicales
35
36
85
Indice primario de dos niveles
S. Velilla
Univ. de Zaragoza
Objetivo: acceso eficiente (“directo”) a los datos utilizando diversos criterios
15
21
44
46
55
63
71
80
2010/2011
8
12
24
29
35
39
44
51
Curso
Tema I: Ficheros
6
3
8
3
3.3 - Organizaciones con varios índices secundarios:
Ficheros invertidos.
Campo de clave primaria
FICHERO DE INDICE DE DOS NIVELES
FechaNac Puesto Salario
6
8
4
1
4
23
18
14
Indice secundario denso según un campo clave
que no determina la ordenación del fichero
DNI
2
3
4
8
apuntador
a bloque
21
11
16
2
17
18
19
20
21
22
23
24
FICHERO DE DATOS
Apell_Nombre numDpto
3
5
1
6
6
15
3
17
9
10
11
12
13
14
15
16
Campo de indización
S. Velilla
Univ. de Zaragoza
19
Tema I: Ficheros
32
77
132
167
211
256
300
353
396
442
grabaciones (fichero directo)
LON 2312 Romeo y Julieta Prokofiev ...
RCA 2626 Cuarteto en do sostenido menor ...
WAR 23699 Touchstone Corea ...
ANG 3795 Sinfonía nº 9 Beethoven ...
COL 38358 Nebrasca Springsteen ...
DG 18807 Sinfonía nº 9 Beethoven ...
MER 76016 Suite El gallo de oro Rimsky ...
COL 31809 Sinfonía nº 9 Dvorak ...
DG 139201 Concierto para violín Beethoven ...
FF 245 Good News Sweet Honey In The ...
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
20
Organizaciones con varios índices secundarios: Ficheros
invertidos.
Organizaciones con varios índices secundarios
Solución: utilizar varios índices sobre los datos
Problemas: • los índices secundarios tienen valores repetidos (salvo que sean clave)
• la actualización/inserción/eliminación Ÿ reactualizar todos los índices
Densos, pues sólo puede haber una ordenación física
• ref. absoluta
• NRR
ejemplo: acceso a la información musical por compositor
Índice secundario
BEETHOVEN
BEETHOVEN
BEETHOVEN
BEETHOVEN
COREA
DVORAK
PROKOFIEV
RIMSKY_KORSAKOV
SPRINGSTEEN
SWEET HONEY IN THE R
167
396
256
77
132
353
32
300
211
442
o
también
acceso a través de índice secundario Ÿ inversión del proceso de
obtención de información
Índice secundario
ANG3795
BEETHOVEN
DG139201
BEETHOVEN
DG18807
BEETHOVEN
RCA2626
BEETHOVEN
WAR23699
COREA
COL31809
DVORAK
LON2312
PROKOFIEV
MER75016
RIMSKY_KORSAKOV
COL38358
SPRINGSTEEN
SWEET HONEY IN THE R FF245
el fichero está invertido con respecto a la clave, para cada uno de los índices secundarios
tipos
clave primaria
NRR
Curso
Tema I: Ficheros
fichero invertido { fichero organizado a partir de
índices secundarios basados en la clave primaria
2010/2011
S. Velilla
Univ. de Zaragoza
21
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
22
Ficheros invertidos: implementación (1)
Ficheros invertidos: ventajas
implementación:
la información del índice no tiene por qué estar en el dato (es redundante)
• índice con valores no repetidos del campo Ÿ listas de claves primarias
un fichero totalmente invertido puede
implementarse sólo con índices secundarios
Índice secundario
ANG3795 DG139201
BEETHOVEN
WAR23699
COREA
COL31809
DVORAK
LON2312
PROKOFIEV
MER75016
RIMSKY_KORSAKOV
COL38358
SPRINGSTEEN
SWEET HONEY IN THE R FF245
(no es interesante por razones de eficiencia y seguridad)
ventajas:
• totalmente invertido (se utilizan todos los campos)
• parcialmente invertido (sólo se utilizan algunos campos)
• acceso eficiente para diferentes criterios (campos)
• se pueden responder a preguntas complejas sin acceder a los datos
(operaciones con listas)
DG18807
RCA2626
• solución más interesante: separar las listas del índice
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
23
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
24
Ficheros invertidos: implementación con listas
invertidas
Ficheros invertidos: implementación (2)
ANG3795
DG139201
DG18807
RCA2626
Índice secundario
BEETHOVEN
COREA
DVORAK
PROKOFIEV
RIMSKY_KORSAKOV
SPRINGSTEEN
SWEET HONEY IN THE R
Índice secundario
BEETHOVEN
COREA
DVORAK
PROKOFIEV
RIMSKY_KORSAKOV
SPRINGSTEEN
SWEET HONEY IN THE R
WAR23699
COL31809
LON2312
MER75016
3
2
7
0
6
4
9
0
1
2
3
4
5
6
7
8
9
lista invertidas
-1
LON2312
-1
RCA2626
-1
WAR23699
8
ANG3795
-1
COL38358
1
DG18807
-1
MER76016
-1
COL31809
5
DG139201
-1
FF245
COL38358
ventajas de las
listas invertidas:
FF245
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
25
2010/2011
S. Velilla
Univ. de Zaragoza
26
Idea de búsqueda binaria en el índice o organización indexada como árbol binario de búsqueda
Utilización de la clave primaria como referencia:
inconveniente:
Curso
Tema I: Ficheros
3.4 - Estructuras de árbol y su utilización en las
organizaciones indexadas: árboles B y B*.
Ficheros invertidos: referencia de los datos
ventajas:
• gestión más eficiente (op. mantenimiento)
• menor ocupación memoria
respecto al índice como vector
• mayor fiabilidad (es una redundancia)
• no es necesario reorganizar el índice secundario en la eliminación
• mayor independencia de la ubicación de los datos
ventajas:
• mayor eficiencia búsqueda (#)
• mayor eficiencia en operaciones de mantenimiento
Pb: • op. mantenimiento Ÿ desbalanceo del árbol Ÿ pérdida de eficiencia en la búsqueda
• mayor coste de la búsqueda (hay que buscar en el índice primario)
árboles 1-balanceados AVL Ÿ gestión bastante simple y eficiente
{altura máx. 1,44 log2(N+2) y | 1 reorg. local cada 2 inserciones y cada 4 eliminaciones
y 1 reorganización no implica más de 5 reasignaciones}
• no adecuado para tratamiento en bloques (ubicación no predecible del nodo en bloque)
o demasiados accesos a bloques (hasta 1 por nodo)
árboles binarios (AVL) paginados
Ÿ gestión eficiente (balanceo) bastante compleja
árboles multicamino
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
27
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
28
Estructuras de árbol: árboles binarios paginados.
Concepto de árbol B: definición (original)
solución:
árboles B (| multicamino de orden variable y balanceados)
a
m { nº mínimo de item por nodo
árbol B de orden m (Bayer y McCreigth 1972)
• los item (datos o claves) de cada nodo están ordenados por clave
b
c
• la raíz tiene entre 1 y 2m item
• el resto de los nodos tiene entre m y 2m item
d
h
e
i
j
f
k
g
l
m
n
• un nodo con k item tiene k+1 descendientes (excepto las hojas)
el i-ésimo subárbol tiene todos los item con clave comprendida
entre las claves (i-1)-ésima e i-ésima del nodo considerado (si existen)
o
• todos los nodos terminales (hojas) están al mismo nivel (completamente balanceado)
1 nodo por bloque Ÿ factor ocupación (fC) > 50 % (| 70%)
ejemplo de árbol binario paginado (3 nodos/bloque)
Curso
Tema I: Ficheros
2010/2011
S. Velilla
Univ. de Zaragoza
29
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
30
S. Velilla
Univ. de Zaragoza
32
Concepto de árbol B: definición (generalizada)
árbol B de orden m (Knuth)
m { nº máximo de descendientes por nodo
• los item (datos o claves) de cada nodo están ordenados por clave
= (m + 1) div 2
• la raíz tiene entre 2 y m descendientes
• el resto de los nodos tiene entre (m-1) div 2 + 1 y m descendientes (excepto las hojas)
• un nodo con k descendientes tiene k-1 item (excepto las hojas)
el i-ésimo subárbol tiene todos los item con clave comprendida
entre las claves (i-1)-ésima e i-ésima del nodo considerado (si existen)
• todos los nodos terminales (hojas) están al mismo nivel (completamente balanceado)
1 nodo por bloque Ÿ factor ocupación (fC) > 50 % (| 70%)
altura (| nº de accesos)
Tema I: Ficheros
| 1 + logªp*mº ((N+1)/2)
ejemplo de un árbol-B de órden 3
siendo p el factor de ocupación (bloque)
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
31
Tema I: Ficheros
Curso
2010/2011
ejemplo de inserción en un árbol B.
(1)
implementación (ejemplo 1): INSERCIÓN
suponiendo un árbol B de orden 4 (knuth), realizar las operaciones de inserción de:
C, D, S, T, A, M, P, I, B, W, N, G, U, R, K, E, H, O, L, J, Y, Q, V, X, Z
maxClavesNodo = 3; minClavesNodo = (4-1) div 2 = 1;
nClavesNodoIzqDiv = 4 div 2 = 2 (claves en el nodo de la izquierda al dividir un nodo)
ins erción de C
0
ins erción de D
0
0
2
inserc ión de S, T
C
S
división
0
C D
Ÿ
C D S T
0
1
C D
T
árbol-B tras la inserción de 22, 41, 59, 57, 54, 33, 75, 124, 122, 123 en el árbol de la figura anterior
S. Velilla
Univ. de Zaragoza
Curso
Tema I: Ficheros
2010/2011
ejemplo de inserción en un árbol B.
33
2010/2011
ejemplo de inserción en un árbol B.
(2)
inserción de B
2
ins erción de W
2
S
2
S
0
D S
1
0
T
Ÿ
1
A C D M
T
0
3
A C
0
P
2
ins erción de I
A C
Tema I: Ficheros
M P
0
T
inserción de B
Curso
T W
2
2
D S
inserción de G
D N S
división
0
3
A B C
0
1
I M N P
T W
3
A B C
4
I M
1
P
T W
1
I M P
2010/2011
1
I M P
Ÿ
3
A C
3
A B C
T
D S
1
0
T
2
D S
3
1
I M P
1
M
ins erc ión de de
N N
inserción
ins
erción de de
P
inserción
D S
3
A B C
división
A C D
(3)
ins erc ión de M
2
0
34
2
D S
ins erc ión de A
S. Velilla
Univ. de Zaragoza
Curso
Tema I: Ficheros
T
S. Velilla
Univ. de Zaragoza
35
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
36
ejemplo de inserción en un árbol B.
ins erc ión de G
2
inserción de
inserción
deU,R
U,R
D N S
ejemplo de inserción en un árbol B.
(4)
(5)
2
D N S
ins erc ión de E, H
7
N
0
3
A B C
4
G I M
1
P
0
T W
3
A B C
4
G I M
1
P R
T U W
2
6
D K
inserción
de K
inserción
0
D N S
3
A B C
división
2
de K
2
D K N S
Ÿ
4
G I K M
T U W
0
3
A B C
0
1
P R
S
3
A B C
4
5
G I
M
5
E G H I
4
M
1
P R
T U W
1
P R
T U W
7
N
7
N
división
división
2
Ÿ
6
D K
0
3
A B C
mejora:
S
5
G I
4
M
redistribución
con hermanos
1
P R
T U W
2010/2011
ejemplo de inserción en un árbol B.
ins erc ión de O, L, J
37
7
S
5
8
E G
I J
inserc ión de Y,Q, V, X, Z
4
L M
Tema I: Ficheros
Q S W
5
8
E G
I J
4
L M
1
10
O P
Curso
2010/2011
R
1
P R
T U W
Curso
Tema I: Ficheros
2010/2011
S. Velilla
Univ. de Zaragoza
38
pasos en la INSERCIÓN
Si nºdatosNodo < (m-1)
entonces guardar_en_nodo {colocar en posición correspondiente}
si no Si hueco_en_hermano entonces redistribuir {con nodo hermano}
afecta al nodo padre
si no {división del nodo}
crear_nuevo_nodo;
afecta al nodo padre
redistribuir_con_nuevo_nodo;
insertar_en_nodo_padre(nuevo_dato); {promoción dato “central”}
Fsi
Si es la raíz Ÿ nueva raíz
6
3
A B C
4
M
2) insertar en nodo:
N
0
5
I
siempre se comienza la inserción en las hojas
T U W
7
D H K
8
E G
Si datoEncontrado entonces fin {error, el dato ya existe} Fsi
1
O P R
2
S
1) buscar el dato (clave) Ÿ descender hasta las hojas
6
D H K
3
3
A B C
resumen de ideas:
2
A B C
0
6
D H K
inserción en un árbol B : algoritmo básico
(6)
N
0
2
inserción de E,H
S. Velilla
Univ. de Zaragoza
Curso
Tema I: Ficheros
Ÿ
9
T U V
S. Velilla
Univ. de Zaragoza
X Y Z
39
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
40
ejemplo de algoritmo de inserción en un árbol B.
ejemplo de algoritmo de inserción en un árbol B.
(1)
constantes
ordenArbol = 6;
{nº máximo de descendientes de un nodo}
nMinClvNodo = (ordenArbol - 1) div 2;{nº mínimo de claves en un nodo}
nClvDivNodo = (ordenArbol) div 2;
{nº claves de la pag.(nodo) Izqda. al dividir un nodo}
nMaxClvNodo = ordenArbol - 1;
{nº máximo de claves en un nodo}
tipos
refNodo = ^tp_Nodo;
{ implementación en memoria, para simplificar }
tp_Item = registro
clave:
tp_Clave;
valDato: tp_Dato;
p:
refNodo
fReg;
tp_Nodo = registro
contItems: 0..nMaxClvNodo;
p0:
refNodo;
item:
vector[1..nMaxClvNodo] de tp_Item
fReg;
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
ejemplo de algoritmo de inserción en un árbol B.
41
procedimiento ponEnArbol(a: refNodo; laClave: tp_Clave;
ref. promocion: booleano; ref. v: tp_Item);
variables k: entero; encontrado: booleano;
q: refNodo;
principio {la clave no está en la página a^; promocion=falso}
si a = nil
entonces promocion := true {el item no está en el árbol }
si no
buscaEnNodo(a, laClave, k, encontrado);
si encontrado
entonces
promocion := falso
si no {el item no está en la página}
q := sucesor(item[k - 1]);
ponEnArbol(q, laClave, promocion, v);
si promocion entonces insertar(a, k, v, promocion) fsi
fsi
fsi
fin; {ponEnArbol}
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
procedimiento insertarItem (ref. a: refNodo; valor u: tp_Item);
variables q: refNodo;
promocion: booleano;
principio
promocion := false;
ponEnArbol(a, u.clave, promocion, u);
si promocion entonces {crear nueva raíz con item u}
q := a; nuevoDato(a);
a^.contItems := 1; a^.p0 := q; a^.item[1] := u
fsi;
fin;
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
ejemplo de algoritmo de inserción en un árbol B.
(3)
(2)
42
(4)
procedimiento insertar (a:refNodo; pos:entero;
ref. u:tp_Item; ref. promocion:booleano);
variables
b: refNodo;
principio
si a^.contItems < nMaxClvNodo
entonces { insertar u en la posición pos} promocion := false;
si no {la pagina a^ está llena Ÿ dividirla y promocionar item }
nuevoDato(b);
redistribuir_Items(a,b,u); {los de a^ y u en las páginas a^ y b^}
fsi
{devuelve en u el item a promocionar}
fin; {de insertar}
sólo aspectos básicos
43
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
44
ejemplo de eliminación en un árbol B.
ejemplo de eliminación en un árbol B.
(1)
eliminar J
implementación (ejemplo 2): ELIMINACIÓN
0
M
suponiendo un árbol B de orden 6 (knuth), realizar las operaciones de eliminación de:
J, M, R, A
2
1
D H
maxClavesNodo = 5; minClavesNodo = (6-1) div 2 = 2;
nClavesNodoIzqDiv = 6 div 2 = 3 (claves en el nodo de la izquierda al dividir un nodo)
3
Q U
5
4
A C
situac ión inicial
(2)
E F
6
I K
7
8
N O P
R S
V W X Y Z
0
M
eliminar M
eliminar M
0
M
intercam bio con hoja
2
1
D H
Q U
2
1
D H
3
5
4
A C
E F
6
I J K
7
N O P
8
R S
V W X Y Z
4
3
A C
S. Velilla
Univ. de Zaragoza
Curso
Tema I: Ficheros
Q U
2010/2011
ejemplo de eliminación en un árbol B.
45
5
E F
6
I K
ejemplo de eliminación en un árbol B.
(3)
2
6
elimin ar R
D H
8
7
O P
R S
A C
E F
6
I K
Curso
QW
fusión
3
VWX Y Z
S. Velilla
Univ. de Zaragoza
X Y Z
2
D H
8
S
2010/2011
S U V
1
7
O P
8
7
O P
N
Q U
5
4
6
I K
0
2
redistribución
Tema I: Ficheros
5
E F
eliminar A
D H
A C
Q W
eliminar A
N
1
3
4
3
V W X Y Z
0
eliminar R
2
1
Q U
I K
(4)
N
D H
5
46
0
1
E F
V W X Y Z
S. Velilla
Univ. de Zaragoza
2010/2011
N
4
R S
Curso
Tema I: Ficheros
0
A C
8
7
N O P
47
5
4
C
E F
Tema I: Ficheros
6
I K
7
O P
8
S U V
Curso
2010/2011
X Y Z
S. Velilla
Univ. de Zaragoza
48
ejemplo de eliminación en un árbol B.
eliminación en un árbol B : algoritmo básico
(5)
resumen de ideas:
0
N
propagación de insuficiencia
-> nueva fusión
1
3
1) buscar el dato (clave) o nodo en que está ubicado
2
H
Si nodo = nil entonces fin {error, el dato no existe} Fsi
QW
5
6
C D E F
I K
pasos en la ELIMINACIÓN
7
2) Si nodo no-terminal entonces intercambiar_Con_Mayor_Hijo_Ant Fsi
siempre se comienza la eliminación en las hojas
8
O P
S U V
ó Menor_Hijo_Post
X Y Z
3) eliminar de nodo:
Si nºdatosNodo > (m-1) div 2
entonces quitar_del_nodo {recolocar el resto de los datos}
si no Si dato_en_hermano entonces redistribuir {con nodo hermano}
afecta al nodo padre
si no {fusión con nodo hermano}
añadir_datos_hermano;
eliminar_nodo_hermano;
eliminar_de_nodo_padre(nuevo_dato); {promoción de “hueco”}
Fsi
Si es la raíz Ÿ disminuye un nivel
1
H N Q W
disminuye altura
3
5
C D E F
Tema I: Ficheros
6
I K
7
O P
8
S U V
Curso
2010/2011
X Y Z
S. Velilla
Univ. de Zaragoza
ejemplo de algoritmo de eliminación en un árbol B.
49
(1)
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
ejemplo de algoritmo de eliminación en un árbol B.
50
(2)
procedimiento borrar (a: refNodo; clv: tp_Clave; ref. promocion: booleano);
variables posClv: entero; encontrado: booleano;
rfHijoAnt: refNodo;
principio { de borrar }
si a = nil entonces promocion := falso {la clave no está en el arbol}
si no
buscaEnNodo(a, clv, posClv, encontrado);
rfHijoAnt := sucesor(item[posClv - 1]);
si encontrado
entonces {encontrada, ahora se borra item[posClv] }
si rfHijoAnt = nil entonces { a es una página terminal }
eliminar_Item; promocion := a^.contItems < nMinClvNodo;
si no
ponMayorHijo(rfHijoAnt, a, posClv, promocion);
si promocion entonces subocupacion(a, rfHijoAnt, posClv-1, promocion) fsi
fsi
si no {no encontrada, buscar en descendientes}
borrar(clv, rfHijoAnt, promocion);
si promocion entonces subocupacion(a, rfHijoAnt, posClv-1, promocion) fsi
fsi
fsi
fin; {de borrar}
procedimiento eliminarItem (ref. a: refNodo; laClave: tp_Clave);
variables
q: refNodo;
promocion: booleano;
principio
promocion := falso;
borrar(a, laClave, promocion);
si promocion entonces {se ha eliminado dato de la raíz}
si a^.contItems = 0 entonces {si no hay datos, disminuir nivel}
q := a; a := q^.p0; disponer(q)
fsi
fsi
fin;
Tema I: Ficheros
Tema I: Ficheros
51
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
52
árbol B : ejemplo de implementación.
árbol B : evaluación.
evaluación:
ejercicio: Transformar los algoritmos anteriores (E.D. en memoria) para implementar
un árbol B representado sobre un fichero.
ideas:
• cada nodo tiene
E.D. Soporte o fichero directo (con operadores nuevoDato (nodo) y eliminarDato, . . .)
acceso a dato dinámico o cargar dato en memoria (leerDato(f, nodo, pos))
+ guardarlo si se ha modificado (o siempre para simplificar)
m ref. de bloque + m-1 datos + nº datos (1 byte)
ò
m ref. de bloque + m-1 claves + m-1 ref. dato + nº datos (1 byte)
• nº medio de accesos (k descendientes por nodo): A | h - (1/(k-1))
ejercicio: deducir las expresiones de la ocupación y número de accesos para un árbol B
cuya raíz tiene z descendientes y el resto de los nodos k descendientes, y
aplicarlo a un ejemplo concreto.
mejoras: guardar en memoria varios nodos (“pool” de páginas) con bit de modificación
política de reemplazo . . .
eliminación de recursividad o referencias al padre y hermanos
+ pb.variables locales (bloque activación)
• • •
Curso
Tema I: Ficheros
2010/2011
S. Velilla
Univ. de Zaragoza
mejora de prestaciones Ÿ reducir nº de accesos a nodos
53
mejora de las prestaciones del árbol B.
Curso
Tema I: Ficheros
2010/2011
S. Velilla
Univ. de Zaragoza
54
concepto de árbol B*.
algunas ideas:
objetivo: mantener un alto factor de ocupación (fC) de los nodos
• mejorar redistribución en inserción y eliminación o pasar a fC | 85%
• cambiar las reglas de fusión y división o árboles B*
idea básica:
• separar índice de datos Ÿ n factor de bloque de los nodos
• retrasar la división de un nodo hasta tener 2 llenos o redistribución
• en la división, repartir los items de los 2 nodos entre 3 (los 2 + el nuevo)
mínimo (fC) | 70%
• implementar índices no-densos Ÿ tratamiento especial de las hojas
sin ref. a nodos y z orden
secuencial indexada
problema: la división del nodo raíz (no tiene hermanos)
• tratamiento especial como árbol B
• permitir que pueda ser más grande (hasta 4/3) o pb. repres.
• árboles B de órden variable o gestión más compleja (| árboles B+ de prefijos simples)
• aprovechar la memoria central o árboles B-virtuales (árboles B con buffer en memoria)
• • •
• otros tipos de árboles
política de
gestión páginas
reestructuración periódica (copiar) Ÿ
Tema I: Ficheros
• mantener niveles altos (raíz + ..)
• últimos niveles LRU
• soluciones intermedias LRU ponderando el nivel
n factor de ocupación
n ordenación de nodos (mejora acceso)
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
55
árbol B* (Knuth) de orden m (nº máximo descendientes)
| árbol B, excepto que:
• los nodos tienen entre 2*(m-1) div 3 + 1 y m descendientes (excepto la raíz y las hojas)
• la raíz tiene tratamiento especial
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
56
otras organizaciones indexadas basadas en árboles.
otros tipos de árboles:
tries { árbol m-ario (el orden m es la base empleada para representar la clave)
cada camino desde la raíz a las hojas representa una clave
• cada nodo interior consta de m ref. de nodo
• cada hoja consta de m ref. a datos (índice denso)
problemas:
• claves de muy diferente longitud o
ejemplo de un trie para una colección de nombres de tres letras (en inglés) de niños
limitar altura del árbol
representar nodo como lista
• acomodación a los bloques
H-tree { (dispersión + árbol B)
variante en la que se
eliminan algunos nodos hoja
• • •
Tema I: Ficheros
S. Velilla
Univ. de Zaragoza
Curso
2010/2011
57
2010/2011
NRR
3.5 - Familia de árboles B+ y
organización secuencial indexada
objetivo: aprovechar las ventajas de las organizaciones
idea básica:
árbol B+
• indexada o búsqueda
• secuencial o trat. secuencial
ANNE
CHLOE
ELECT
FRED
1
5
9
13
JANET
LIZA
MOLLY
OLGA
17
21
25
29
POLLY
RUTH
VALER
YVONN
33
37
41
45
Organización
secuencial-indexada
de un fichero
árbol (| árbol B) sobre una secuencia (conjunto de secuencias )
• toda la información (claves ò datos) está en un conjunto encadenado de
bloques (hojas) { conjunto secuencia
• el árbol de acceso (| árbol B) está formado con copia de las claves (pueden
estar repetidas), que actúan como separadores { conjunto índice
ANNE
JANET
POLLY
• tratamiento un poco diferente del árbol B (especialmente para las hojas)
• la altura es algo menor que para el árbol B
organización secuencial indexada { organización basada en un árbol B+
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
-1
-1
-1
-1
59
Tema I: Ficheros
S. Velilla
Univ. de Zaragoza
Curso
Tema I: Ficheros
Curso
2010/2011
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
38
37
39
40
41
42
43
44
45
46
58
ANNE
BETTY
CANDICE
CAROL
CHLOE
CLEOPATRA
DELILAH
DIANA
ELECTRA
ELIZABETH
ELLEN
FLOSSY
FRED
GEORGIE
GERT
GRACIE
JANET
JUNE
KRISTEN
LARA
LIZA
LOUISE
MABLE-SARAH
MARY
MOLLY
NANCY
NATALIA
NEFERTITI
OLGA
PAM
PATIENCE
PENNY
POLLY
PRISCILLA
PRUDENCE
ROSEMARY
SAMANTHA
RUTH
SCARLETT
TAMMY
VALERY
VANESSA
WILLY
XANTHIPPE
YVONNE
ZOE
S. Velilla
Univ. de Zaragoza
60
NRR
Fichero secuencial-indexado
estructurado como un árbol B+
Organización secuencial-indexada de un fichero,
con zona de desbordamiento
ANNE
CHLOE
ELECT
FRED
JANET
LIZA
MOLLY
OLGA
1
5
9
13
17
21
25
29
ANNE
JANET
POLLY
POLLY
RUTH
VALER
YVONN
33
37
41
45
-1
-1
-1
-1
Curso
Tema I: Ficheros
2010/2011
ejemplo de inserción en un árbol B+
S. Velilla
Univ. de Zaragoza
61
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
38
37
39
40
41
42
43
44
45
46
ANNE
BETTY
CANDICE
CAROL
CHLOE
CLEOPATRA
DELILAH
DIANA
ELECTRA
ELIZABETH
ELLEN
FLOSSY
FRED
GEORGIE
GERT
GRACIE
JANET
JUNE
KRISTEN
LARA
LIZA
LOUISE
MABLE-SARAH
MARY
MOLLY
NANCY
NATALIA
NEFERTITI
OLGA
PAM
PATIENCE
PENNY
POLLY
PRISCILLA
PRUDENCE
ROSEMARY
SAMANTHA
RUTH
SCARLETT
TAMMY
VALERY
VANESSA
WILLY
XANTHIPPE
YVONNE
ZOE
102
100
103
zona de
desbordamiento
100
101
102
103
S. Velilla
Univ. de Zaragoza
2010/2011
ejemplo de inserción en un árbol B+
(1)
101
nuevos registros añadidos
Curso
Tema I: Ficheros
LESLIE
JOAN
JENNIFER
MARTA
62
(2)
implementación (ejemplo 1): INSERCIÓN
suponiendo un árbol B+ de orden 3 (knuth) para los nodos interiores, y de orden 4 para las
hojas, realizar las operaciones de inserción de: R, U, A, N, S, E, L, T, V
inserción de E
maxClvNodoInt = 2; minClvNodoInt = (3-1) div 2 = 1;
nClvNodoIntIzqDiv = 3 div 2 = 1 (claves en el nodo de la izquierda al dividir un nodo)
maxClvNodoHoj = 3; minClvNodoHoj = (3+1) div 2 = 2;
nClvNodoHojIzqDiv = (3+2) div 2 = 2 (claves en el nodo de la izquierda al dividir un nodo)
inserción de L
R
A E N
R
A E L N
R S U
R S U
división hoja
inserción de T
L R
inserción de R, U, A
A R U
inserción de N
A N R U
inserción
de S
Inserción
de
R
división hoja
S
A E
A N
Tema I: Ficheros
R U
Curso
2010/2011
L S
R
A N
S. Velilla
Univ. de Zaragoza
L N
R S U
A E
L N R
S T U
R S U
63
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
64
ejemplo de inserción en un árbol B+
ejemplo de eliminación en un árbol B+
(3)
(1)
implementación (ejemplo 2): ELIMINACIÓN
inserción de V
A E
división hoja
L S
L N R
S T U V
L S U
A E
suponiendo un árbol B+ de orden 3 (knuth) para los nodos interiores, y de orden 4 para las
hojas, realizar las operaciones de eliminación de: E, S, G
L N R
S T
U V
R
situación unicial
S
E L
división nodo
L
U
A B
A E
L N R
S T
S. Velilla
Univ. de Zaragoza
2010/2011
ejemplo de eliminación en un árbol B+
65
G H
U V X
L
A B H
U V X
66
(3)
R
eliminación de G
R S
S. Velilla
Univ. de Zaragoza
Curso
2010/2011
V
L N
R U
V X
R
eliminación de G
R
eliminac ión de S
R S
ejemplo de eliminación en un árbol B+
(2)
U
L N
L N
Tema I: Ficheros
R
E L
A B
E G H
U V
Curso
Tema I: Ficheros
eliminac ión de E
U
o también
E L
A B
Tema I: Ficheros
G H
E
V
L N
R U
Curso
2010/2011
A B
V X
S. Velilla
Univ. de Zaragoza
67
Tema I: Ficheros
H L N
V
R U
Curso
2010/2011
V X
S. Velilla
Univ. de Zaragoza
68
árbol B+ : evaluación.
árbol B+ : evaluación.
evaluación:
• cada nodo hoja :
m-1 datos + 1 ref. de bloque(hermano) + nº datos y tipo (2 bytes)
• cada nodo interior :
m-1 claves + m ref. de bloque(hijos) + nº datos y tipo (2 bytes)
Implementación de operadores de recorrido (primero, siguiente)
más eficiente que en árbol-B
tipo: nodo hoja o interior
• nº accesos : = altura árbol | árbol B
en general es mejor el índice separado (fichero datos + fichero índice)
• mayor eficiencia en organización secuencial (incluso contigua)
• mayor seguridad (recuperabilidad frente a errores)
• reconstrucción simple y eficiente del índice a partir del fichero de datos
pb.: las referencias del último nivel son a otro fichero
ejercicio: deducir las expresiones de la ocupación y número de accesos para un árbol B+
cuya raíz tiene z descendientes y el resto de los nodos k descendientes, y
aplicarlo al mismo ejemplo que el desarrollado para el árbol B.
Comparar los resultados obtenidos.
reestructuración periódica para mantener (o mejorar) prestaciones
• fichero índice
• fichero datos
Similar al árbol B. Se parte del cálculo de las hojas.
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
implementación de índices secundarios simple
69
árboles B+ de prefijos simples
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
70
árboles B+ de prefijos simples: ejemplo (1)
mejora de prestaciones Ÿ reducir nº de accesos a nodos
conjunto
índice
representar parte de la clave (prefijo) Ÿ aumenta el factor de bloque
árboles B+ de prefijos simples
{ orden variable (gestión un poco + compleja)
implementación de operaciones similar
Implementación de índices con claves repetidas (secundarios, agrupamiento, etc.): relativamente simple
diferentes soluciones (compromiso prestaciones-coste)
Un conjunto índice en forma de árbol B para el conjunto de secuencias,
que forma un árbol B+ de prefijos simples
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
71
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
72
árboles B+ de prefijos simples : ejemplo (2)
árboles B+ de prefijos simples : ejemplo (3)
Una inserción dentro del bloque 1 provoca una división y la consecuente adición del bloque 7.
La adición de un bloque en el conjunto de secuencias requiere un nuevo separador en el conjunto
índice (AY). Este separador provoca la división del nodo y la promoción de BO a la raíz.
La eliminación de los registros EMBRY y FOLKS del conjunto de secuencias
no altera el conjunto índice
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
73
árboles B+ de prefijos simples : ejemplo (4)
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
74
árboles B+ de prefijos simples : implementación
ejemplo de implementación de un nodo:
Una eliminación en el bloque 2 provoca insuficiencia y la consecuente concatenación de los
bloques 2 y 3 (el bloque 3 se puede colocar en la lista de disponibles). Esta eliminación de un bloque
conlleva eliminar el separador correspondiente (CAM), lo que provoca una insuficiencia y la
consecuente reorganización del conjunto índice.
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
75
Tema I: Ficheros
Curso
2010/2011
S. Velilla
Univ. de Zaragoza
76
Descargar