Академический Документы
Профессиональный Документы
Культура Документы
Evaluaci on
Notas de clase basadas en los libros File Structures de Folk y Algorithms de Sedgewick Estructuras de archivos Habr a 3 ex amenes (E ) y 6 tareas (T ). Cada examen valdr a 25 puntos. Cada tarea valdr a 5 puntos. S requiere E 35, T 15 y E + T 60. B requiere E 40, T 20 y E + T 73. MB requiere E 45, T 25 y E + T 87. Grafos y sus aplicaciones Arboles AVL Ordenamiento externo Indices Arboles B y B+ Dispersi on
2 3 4 5 6 7
Trimestre 09I
1 / 464
Trimestre 09I
2 / 464
Trimestre 09I
3 / 464
Ex amenes y tareas
1
Contenido
Dise no y especicaci on de estructuras de archivos Objetivos de las estructuras de archivos Operaciones fundamentales de procesamiento de archivos
2 3
El primer examen consistir au nicamente del tema Estructuras de archivos (dos tareas). AVL (dos El segundo examen consistir a de los temas Grafos y Arboles tareas).
Trimestre 09I
4 / 464
Estructuras de archivos
Trimestre 09I
5 / 464
Estructuras de archivos
Trimestre 09I
6 / 464
Discos y memoria
Objetivos I
La diferencia de velocidad entre los discos y la memoria hace que las estructuras de datos en memoria no sirvan para resolver los problemas de datos almacenados en disco. Por lo tanto, debemos establecer nuevos objetivos para el dise no y especicaci on de estructuras de archivos.
Si eso no es posible, se desean estructuras de archivos que nos permitan encontrar la informaci on con tan pocos accesos al disco como sea posible. Queremos que la informaci on relacionada quede agrupada, de modo que podamos obtenerla con un solo acceso al disco.
Por lo tanto, los discos son unas 106 veces m as lentos que la memoria.
Estructuras de archivos
Trimestre 09I
7 / 464
Estructuras de archivos
Trimestre 09I
8 / 464
Estructuras de archivos
Trimestre 09I
9 / 464
Objetivos II
1
Contenido
Dise no y especicaci on de estructuras de archivos
Se deben mantener todas estas propiedades a un cuando los archivos cambien, crezcan o se hagan m as peque nos cuando se agregue o borre informaci on.
Un archivo f sico es una colecci on de bytes almacenada en alg un dispositivo (cinta, disco, disco compacto, etc.) Un archivo l ogico es la visi on de un programa de un archivo: el programa puede leer o escribir datos sin saber c omo ni d onde.
Las estructuras de datos deben aprovechar los dispositivos de almacenamiento, ya sean secuenciales o de acceso arbitrario: cintas, discos, discos compactos, etc.
3
Operaciones fundamentales de procesamiento de archivos Archivos f sicos y l ogicos Apertura de archivos Cerrado de archivos Lectura y escritura de archivos Tipos de acceso y b usqueda Consideraciones especiales Almacenamiento secundario Conceptos fundamentales de estructuras de archivos Manipulando archivos con registros
Estructuras de archivos Trimestre 09I 11 / 464 Francisco Zaragoza (UAM Azcapotzalco) Estructuras de archivos
5
Trimestre 09I 10 / 464 Francisco Zaragoza (UAM Azcapotzalco)
Estructuras de archivos
Trimestre 09I
12 / 464
Contenido
Apertura de un archivo
Apertura de un archivo en C
Dise no y especicaci on de estructuras de archivos Antes de que un programa pueda usar un archivo l ogico, este se debe relacionar con un archivo f sico. A esta operaci on se le llama apertura. Un archivo se puede abrir para escritura, lectura, sobreescritura, agregado y combinaciones de estas. Puede tener acceso secuencial o arbitrario. En algunos sistemas operativos se pueden indicar los modos de uso y permisos.
Abajo fis es el archivo f sico, fp es el archivo l ogico y modo es alguno de w (escritura) r, (lectura) o a (agregado) seguido posiblemente de + (actualizaci on) o b (binario). #include <stdio.h> FILE *fp;
Operaciones fundamentales de procesamiento de archivos Archivos f sicos y l ogicos Apertura de archivos Cerrado de archivos Lectura y escritura de archivos Tipos de acceso y b usqueda Consideraciones especiales
Almacenamiento secundario
if ((fp = fopen(fis, modo)) == NULL) { /* no se pudo abrir el archivo */ } else { /* todo bien */ }
5
Trimestre 09I 13 / 464 Francisco Zaragoza (UAM Azcapotzalco) Estructuras de archivos
Estructuras de archivos
Contenido
Cerrado de un archivo
Cerrado de un archivo en C
Dise no y especicaci on de estructuras de archivos La operaci on contraria se llama cerrado. Esto libera un archivo l ogico en el programa que se puede reusar para otro archivo f sico. Tambi en garantiza que toda la informaci on enviada al archivo l ogico quede almacenada en el archivo f sico. Normalmente, el sistema operativo se encarga de cerrar todos los archivos que hayan quedado abiertos al nalizar la ejecuci on de un programa (aunque lo mejor es que lo haga el propio programa).
Operaciones fundamentales de procesamiento de archivos Archivos f sicos y l ogicos Apertura de archivos Cerrado de archivos Lectura y escritura de archivos Tipos de acceso y b usqueda Consideraciones especiales
Abajo fp es el archivo l ogico. if (fclose(fp) == EOF) { /* no se pudo cerrar el archivo */ } else { /* todo bien */ }
Almacenamiento secundario
Estructuras de archivos
Contenido
Lectura de archivos
Lectura de archivos en C
Al nivel m as bajo se tiene al menos la operaci on lee(archivo, destino, cuenta) que lee cuenta bytes del archivo l ogico coloc andolos en la direcci on destino. A niveles m as altos, se pueden tener varias operaciones de lectura de caracteres, enteros, otantes, cadenas, estructuras, etc. r = fread(a, sizeof(tipo), n, fp); size_t r, n; tipo a[MAX];
Operaciones fundamentales de procesamiento de archivos Archivos f sicos y l ogicos Apertura de archivos Cerrado de archivos Lectura y escritura de archivos Tipos de acceso y b usqueda Consideraciones especiales
Abajo n es el n umero de objetos de cierto tipo que se desean leer del archivo l ogico fp en el arreglo a y r es el n umero de objetos que se leyeron en realidad.
Almacenamiento secundario
5
Trimestre 09I 19 / 464 Francisco Zaragoza (UAM Azcapotzalco) Estructuras de archivos Trimestre 09I 20 / 464 Francisco Zaragoza (UAM Azcapotzalco)
Estructuras de archivos
Escritura de archivos
Escritura de archivos en C
Fin de archivo
Normalmente se tiene una operaci on que nos indica si ya hemos le do el u ltimo dato o byte de un archivo l ogico. En C, esto se hace de la siguiente forma:
Abajo n es el n umero de objetos de cierto tipo que se desean escribir en el archivo l ogico fp del arreglo a y r es el n umero de objetos que se escribieron en realidad.
que escribe cuenta bytes en el archivo l ogico tomados a partir de la direcci on fuente.
A niveles m as altos, se pueden tener varias operaciones de escritura de caracteres, enteros, otantes, cadenas, estructuras, etc.
if (feof(fp)) { /* llegamos al fin de archivo */ } else { /* aun quedan datos por leer */ }
Estructuras de archivos
Trimestre 09I
22 / 464
Estructuras de archivos
Trimestre 09I
23 / 464
Estructuras de archivos
Trimestre 09I
24 / 464
Contenido
Operaci on de b usqueda
Cada vez que hacemos una lectura o escritura avanzamos una o m as posiciones en el archivo. A este tipo de acceso se le llama secuencial. Pero en ocasiones queremos brincar a alguna posici on espec ca del archivo, por ejemplo, porque sabemos que all est a el siguiente dato que necesitamos. A este tipo de acceso se le llama arbitrario.
A la operaci on que nos permite brincar de una posici on a otra de un archivo se le llama b usqueda (seek en ingl es). Esta operaci on es de la forma busqueda(archivo, posici on) donde se indica la posici on del archivo l ogico a la que se quiere brincar.
Operaciones fundamentales de procesamiento de archivos Archivos f sicos y l ogicos Apertura de archivos Cerrado de archivos Lectura y escritura de archivos Tipos de acceso y b usqueda Consideraciones especiales
Almacenamiento secundario
Estructuras de archivos
B usqueda de archivos en C
1
Contenido
Dise no y especicaci on de estructuras de archivos
Algunos sistemas cambian unos caracteres por otros sin preguntar. Otros agregan informaci on innecesaria. La mayor a de los sistemas organizan los archivos en directorios, pero sus estructuras son distintas de sistema a sistema. Algunos sistemas tienen tipos especiales de archivos (dispositivos f sicos, tuber as, redirecciones, etc.).
Abajo pos es la posici on en el archivo l ogico fp a la que queremos brincar con respecto al origen que puede ser SEEK SET (principio), SEEK CUR (actual) o SEEK END (n).
Operaciones fundamentales de procesamiento de archivos Archivos f sicos y l ogicos Apertura de archivos Cerrado de archivos Lectura y escritura de archivos Tipos de acceso y b usqueda Consideraciones especiales Almacenamiento secundario Conceptos fundamentales de estructuras de archivos Manipulando archivos con registros
Estructuras de archivos Trimestre 09I 29 / 464 Francisco Zaragoza (UAM Azcapotzalco) Estructuras de archivos
5
Trimestre 09I 28 / 464 Francisco Zaragoza (UAM Azcapotzalco)
Estructuras de archivos
Trimestre 09I
30 / 464
Contenido
Hardware de discos
Operaciones fundamentales de procesamiento de archivos Los accesos al disco siempre son m as lentos que los accesos a la memoria. Recuerde que los discos son unas 106 veces m as lentos que la memoria. Pero no todos los accesos al disco son igual de lentos. Esto se debe a la forma en la que trabajan los discos.
La informaci on est a almacenada en Nsup supercies que giran alrededor de un eje. Ejemplo: Nsup = 4. Cada una tiene una cabeza de lectura y escritura que est a unida a un brazo.
Almacenamiento secundario Discos Cintas magn eticas Tipos de almacenamiento Archivos y el sistema operativo Buers
Sectores y cilindros
Capacidad de un disco
Un sector es la unidad m as peque na que se puede direccionar en un disco. Al conjunto de pistas que quedan una arriba de otra en las diferentes supercies se le llama cilindro. Se pueden leer todos los datos almacenados en un cilindro sin mover las cabezas. A este movimiento se le llama b usqueda.
Ejemplo: Npis = 10. Cada pista est a dividida en Nsec sectores separados por espacios.
Cada uno de los sectores de un disco tiene una cierta capacidad de Csec bytes. La capacidad de pistas, supercies y disco pueden calcularse en t erminos de Csec :
Cpis = Nsec Csec . Csup = Npis Cpis . Cdis = Nsup Csup .
Estructuras de archivos
Trimestre 09I
34 / 464
Estructuras de archivos
Trimestre 09I
35 / 464
Estructuras de archivos
Trimestre 09I
36 / 464
Compaginaci on
Grupos y alcance
Fragmentaci on interna
0 As , una vez que se localiza un grupo en el disco se pueden leer todos sus sectores sin realizar ninguna b usqueda. Ejemplo: grabar 300 bytes en un sector de 512 bytes. A esto se le llama fragmentaci on interna. Tambi en puede ocurrir al nivel de grupos. Los grupos suelen usarse en las tablas de asignaci on de archivos (FAT). Una colecci on de grupos adyacentes se llama un alcance. En ingl es: cluster y extent.
Se pueden numerar los sectores de una pista como est an colocados de forma f sica, pero es posible que no se puedan leer en ese orden.
Todos los sectores de un disco debieran contener el mismo n umero de bytes, pero a veces eso no es posible.
Por eso a veces se compaginan para no tener que esperar una vuelta completa para leer dos sectores consecutivos.
Estructuras de archivos
Trimestre 09I
37 / 464
Estructuras de archivos
Trimestre 09I
38 / 464
Estructuras de archivos
Trimestre 09I
39 / 464
P erdida de espacio
Tipos de espera
El tiempo de b usqueda es el requerido para mover el brazo al cilindro 1 del tiempo de lado a lado. correcto. En promedio es 3
Hay muchas t ecnicas para tratar de minimizar los efectos de estas esperas:
1 2 3 4 5
Por ejemplo, la debida a informaci on que necesite estar en el disco pero que no est a relacionada con los datos. El tiempo de transferencia se puede calcular bytes transferidos tiempo de revoluci on bytes en una pista
La espera rotacional es el tiempo que necesita el disco para girar de modo que el sector deseado se encuentre bajo la cabeza. En promedio on. es 1 2 del tiempo de revoluci
Cambiar el tama no de los grupos. Usar m ultiples discos. Usar paralelismo. Usar discos en memoria. Usar caches, buers, etc.
Estructuras de archivos
Trimestre 09I
40 / 464
Estructuras de archivos
Trimestre 09I
41 / 464
Estructuras de archivos
Trimestre 09I
42 / 464
Contenido
Hardware de cintas
Operaciones fundamentales de procesamiento de archivos A diferencia de los discos, las cintas no proveen de ninguna facilidad para el acceso directo (o arbitrario) de datos. Sin embargo, proveen de un acceso secuencial muy r apido. Las cintas son peque nas y econ omicas comparadas con los discos de la misma capacidad. bloque
marco 0 1 1 0 1 0 0 1 1 bloque
Almacenamiento secundario Discos Cintas magn eticas Tipos de almacenamiento Archivos y el sistema operativo Buers
bloque
Una cinta se puede pensar como dividida en pistas. Cada pista es una sucesi on de bits. Un marco son los bits en la misma posici on de todas las pistas.
Estructuras de archivos
Trimestre 09I
45 / 464
Marcos y paridad
Marcos y espacios
Las cintas se suelen clasicar seg un tres de sus par ametros. Los marcos est an agrupados en bloques de datos. Los bloques est an separados por espacios que no contienen datos. El prop osito de los espacios es el de sincronizar el ujo de datos. Adem as se considera la longitud de la cinta. Observe que todos estos par ametros son constantes.
Su densidad d (de 800 a 30000 bit/in). Su velocidad v (de 30 a 200 ft/s). Su tama no de espacio s (de 0.3 a 0.75 in).
El u ltimo bit del marco no suele formar parte de un dato, sino que se suele usar para vericar su validez.
Un m etodo com un es el de asegurar que la cantidad de unos en un marco siempre tenga la misma paridad.
Estructuras de archivos
Trimestre 09I
46 / 464
Estructuras de archivos
Trimestre 09I
47 / 464
Estructuras de archivos
Trimestre 09I
48 / 464
Contenido
Dise no y especicaci on de estructuras de archivos Operaciones fundamentales de procesamiento de archivos
Si la cinta tiene n bloques de datos y cada uno de ellos mide b in, entonces su longitud queda dada por = n(b + s ). La tasa efectiva de transmisi on de datos es la velocidad real a la que b se transmiten datos de una cinta y queda dada por 12vd b+ s. En ambos casos se debe multiplicar por el n umero de bits de datos en un marco.
La tasa nominal de transmisi on de datos es la m axima velocidad a la que se pueden transmitir datos de una cinta y queda dada por 12vd . De d onde sali o el 12?
3
La elecci on adecuada de estos par ametros impacta la cantidad de informaci on que se puede almacenar en la cinta.
Qu e pasa si n = 1? Y si b = 0?
Almacenamiento secundario Discos Cintas magn eticas Tipos de almacenamiento Archivos y el sistema operativo Buers
4
Estructuras de archivos
Trimestre 09I
49 / 464
Estructuras de archivos
Discos y cintas
Almacenamiento primario
Almacenamiento secundario
Los discos se usan para tener acceso arbitrario a archivos y para almacenar archivos cuando se desea acceso inmediato.
Tipos: registros, memoria, disco en memoria y memoria cach e. Medio: semiconductores. Tiempo de acceso: 109 a 105 s. Capacidad: 1 a Costo: 104 a 109 101 bytes. pesos/bit.
Tipos: acceso directo y secuencial. Medio: cintas y discos magn eticos. Tiempo de acceso: 103 a 102 s. Capacidad: 104 a 1011 bytes. Costo: 107 a 102 pesos/byte.
Las cintas se usan para procesar archivos secuencialmente y para almacenar archivos por periodos de tiempo muy largos.
Estos roles han cambiado un poco gracias a la disminuci on del costo de los discos.
Estructuras de archivos
Trimestre 09I
52 / 464
Estructuras de archivos
Trimestre 09I
53 / 464
Estructuras de archivos
Trimestre 09I
54 / 464
Almacenamiento terciario
1
Contenido
Dise no y especicaci on de estructuras de archivos Operaciones fundamentales de procesamiento de archivos
El camino de un byte
Qu e pasa cuando un programa escribe un byte a un archivo en un disco? Sabemos que el programa llama a una funci on de escritura. Tambi en sabemos que eventualmente el byte quedar a escrito de alguna forma en el disco. Pero lo que pasa entre la llamada del programa y la escritura en el disco es moderadamente complicado.
Almacenamiento secundario Discos Cintas magn eticas Tipos de almacenamiento Archivos y el sistema operativo Buers Conceptos fundamentales de estructuras de archivos Manipulando archivos con registros
Estructuras de archivos Organizaci on de archivos para mejora del desempe no Trimestre 09I 56 / 464 Francisco Zaragoza (UAM Azcapotzalco) Estructuras de archivos
Estructuras de archivos
Trimestre 09I
55 / 464
Trimestre 09I
57 / 464
El manejador de archivos
Supongamos que queremos agregar un byte que representa al caracter P almacenado en la variable ch en cierto archivo. El manejador de archivos verica que la solicitud se pueda llevar a cabo (archivo abierto para escritura, etc.). Si todo va bien, lee de la FAT en que disco, cilindro, pista y sector se debe colocar el byte.
El sistema operativo, siendo sucientemente complejo, contiene un subsistema llamado manejador de archivos que se encarga de todo lo relacionado a la entrada, salida y dispositivos de almacenamiento.
El manejador de archivos debe determinar si ese sector ya est a en la memoria o no. En el segundo caso, se debe encontrar un buer de entrada y salida para poder leer el sector en ese espacio. El buer permite que se puedan hacer los accesos de entrada y salida al disco en unidades de un sector o un bloque. El buer se copiar a al disco cuando se llene o cuando se cierre el archivo correspondiente.
Esto resulta en una solicitud al sistema operativo, el cual se encargar a de supervisar que la llamada se efect ue exitosamente.
Estructuras de archivos
Trimestre 09I
58 / 464
Estructuras de archivos
Trimestre 09I
59 / 464
Estructuras de archivos
Trimestre 09I
60 / 464
ch Hasta este momento, todo el movimiento del byte ha ocurrido en la memoria principal. Lo que pasa ahora es mec anico y muy lento. El disco debe mover su cabeza a la pista pedida (a menos que ya est e all ) y debe esperar a que el sector deseado pase debajo de la cabeza. Cuando esto ocurre, se env an al disco uno por uno los bytes del buer (incluyendo nuestra P) y sus bits se escriben uno por uno a la supercie del disco. Este procesador ahora deber a esperar hasta que el controlador del disco le indique que est a disponible para escritura. Y la P queda all , girando pl acidamente.
abc sector
Ahora el contenido del buer se pasar a a un procesador de entrada y salida junto con la informaci on de en qu e parte del disco deber a ser almacenado.
buer
abc
Estructuras de archivos
Contenido
Dise no y especicaci on de estructuras de archivos Operaciones fundamentales de procesamiento de archivos La idea de tener un buer es la de trabajar con grandes cantidades de informaci on antes de hacer una operaci on de entrada o salida. La cantidad y tama no de los buers puede afectar bastante el desempe no del programa. El caso m as sencillo es el de mantener un buer en memoria para todas las operaciones de entrada y salida. Qu e pasa si s olo se tiene un buer y se hacen lecturas y escrituras alternadas?
Manejo de buers
controlador
2
abcPsector
3
abcP
buer
abcP
4
Almacenamiento secundario Discos Cintas magn eticas Tipos de almacenamiento Archivos y el sistema operativo Buers Conceptos fundamentales de estructuras de archivos Manipulando archivos con registros
Estructuras de archivos Organizaci on de archivos para mejora del desempe no Trimestre 09I 65 / 464 Francisco Zaragoza (UAM Azcapotzalco) Estructuras de archivos
El buer se copia al procesador de entrada y salida, de all va al controlador del disco y nalmente al sector.
5
Trimestre 09I 64 / 464 Francisco Zaragoza (UAM Azcapotzalco) 6
Estructuras de archivos
Trimestre 09I
66 / 464
Dos o m as buers
1
Contenido
Dise no y especicaci on de estructuras de archivos Operaciones fundamentales de procesamiento de archivos
Persistencia de datos
Para evitar ese problema se suelen mantener al menos dos buers cambiando sus roles.
2 3
La intenci on de escribir archivos es la de volver persistentes los datos. Almacenamiento secundario Conceptos fundamentales de estructuras de archivos Organizaci on por campos y registros Manipulando archivos con registros Organizaci on de archivos para mejora del desempe no Los datos deben sobrevivir a la vida del programa que los crea. Adem as debe ser posible que otros programas los puedan usar.
4
La idea es que se puedan procesar los datos de un buer mientras se est an transriendo datos entre el otro buer y el disco.
Por supuesto, se pueden mantener m as de dos buers estableciendo pol ticas m as o menos complicadas para su uso (usado menos recientemente, etc.).
5
Estructuras de archivos
Trimestre 09I
67 / 464
Estructuras de archivos
Trimestre 09I
68 / 464
Estructuras de archivos
Trimestre 09I
69 / 464
Campos y registros
La unidad b asica de informaci on es el campo, el cual contiene un solo valor. Los campos se pueden organizar de al menos dos formas. Imagine que tenemos algunas estructuras con varios miembros. Qu e pasa si las escribimos a un archivo? Si no tenemos cuidado no podremos distinguir entre los varios campos o registros y ser a imposible recuperar las estructuras originales. Es por eso que se necesita organizar los campos en un archivo de una forma m as inteligente que la simple concatenaci on. Existen al menos cuatro formas de organizaci on:
1 2 3 4
Esto corresponde con los conceptos de miembro, vector y estructura almacenados en la memoria principal.
Ejemplos de arreglos
cero|uno|dos|tres|cuatro cero..uno...dos...tres..cuatro
Hacer que los campos tengan longitud predecible. Comenzar cada campo con un indicador de longitud. Colocar un separador al nal de cada campo. Utilizar expresiones de la forma dato=valor para identicar cada campo y su contenido.
Ejemplos de registros
Estructuras de archivos
Es muy f acil recuperar la informaci on del archivo. Si agregamos la longitud, sigue siendo f acil recuperar la informaci on (siempre y cuando se coloque la cuenta al inicio del campo). Incluso se puede saber con cierta precisi on cu anto espacio adicional se necesita para incluir esta cuenta. Observe que el subcampo de longitud es a su vez de longitud ja. Por lo tanto, la selecci on del separador es importante.
Si agregamos separadores, estos se deben poder distinguir f acilmente de los datos. Por ejemplo, no podemos usar espacios como separadores si los datos son frases de m as de una palabra.
Ejemplos
15 4 41413File StructuresFolk1998Addison Wesley0-201-87401-6 17 9 4 713Algoritmos en C++Sedgewick1995Pearson968-444-401-X
Ejemplos
Ejemplos
File Structures|Folk|1998|Addison Wesley|0-201-87401-6 Algoritmos en C++|Sedgewick|1995|Pearson|968-444-401-X
Estructuras de archivos
Trimestre 09I
73 / 464
Estructuras de archivos
Trimestre 09I
74 / 464
Estructuras de archivos
Trimestre 09I
75 / 464
Observaciones I
A diferencia de las anteriores formas, ahora es posible que un campo provea informaci on acerca de s mismo. De la misma manera, se necesitan organizar los registros en un archivo. Existen al menos cinco formas de hacer esto.
1 2 3 4 5
La primera forma es muy com un. Observe que no es equivalente a que todos los campos tengan longitud ja. La segunda forma es muy u til cuando los registros tengan esa propiedad. La tercera forma es muy com un cuando se trabaja con registros de longitud variable.
Hay que cuidar que el descriptor dato no sea muy largo con respecto a valor.
Ejemplos
Hacer que tengan longitud predecible. Hacer que los registros tengan un n umero de campos predecible. Comenzar con un indicador de longitud. Colocar un separador al nal del registro. Usar un segundo archivo para almacenar el lugar de inicio de cada registro.
Estructuras de archivos
Trimestre 09I
77 / 464
Estructuras de archivos
Trimestre 09I
78 / 464
Observaciones II
Representaci on de la longitud
En la cuarta forma se mantienen las reglas sobre delimitadores y normalmente se usa uno distinto al que separa los campos.
Si queremos colocar un indicador de longitud al principio de cada registro debemos conocer su valor de antemano. Es por eso que primero se debe construir el registro para despu es escribirlo al archivo. A esto tambi en se le llama buer. Los buers tambi en se pueden usar para leer un registro completo a la vez. Las operaciones de escritura y lectura se deben poder coordinar entre s .
Hay al menos dos formas en las que se puede escribir la longitud: binario o ASCII. Sin importar cu al se use, debe ser posible distinguirla del resto del archivo. Ejemplo: 65 en ASCII produce 0x36 0x35 mientras que en binario produce 0x41. No todos los sistemas representan los n umeros binarios de la misma forma. La pareja de bytes 0x01 0x02 puede signicar 258 en un sistema y 513 en otro.
En general, ning un m etodo es mejor que los dem as para una situaci on cualquiera.
Estructuras de archivos
Trimestre 09I
79 / 464
Estructuras de archivos
Trimestre 09I
80 / 464
Estructuras de archivos
Trimestre 09I
81 / 464
Contenido
Llaves o claves
Operaciones fundamentales de procesamiento de archivos Nuestra estructura de archivos se enfoca en el registro como unidad de informaci on. Tiene sentido pensar en c omo leer un registro espec co sin leer todo el archivo. Como primera medida resulta conveniente identicar un registro con una llave o clave. En ingl es key.
Es m as f acil pensar en el registro de Juan que en el primer registro. Como esta clave ser a proporcionada por un usuario que puede cometer errores, se debe establecer una forma can onica. Esto quiere decir que algunas claves que parecen distintas (como Juan, jUaN y JUAN) en realidad deben representar a la misma clave (por ejemplo juan).
Almacenamiento secundario
Estructuras de archivos
Clave primaria
Selecci on de la clave
Normalmente se desea que las claves de todos los registros presentes sean distintas. Se debe tener cuidado en la selecci on de la clave primaria. Lo mejor es que la clave primaria no dependa de los campos del registro. Cu antos registros con clave juan hay? La clave primaria no debe cambiar cuando cambie el registro (recuerde que una persona puede cambiar sus datos personales, pero sigue siendo la misma persona).
Una vez que tenemos claves es muy sencillo escribir un programa que lea el archivo secuencialmente hasta que encuentre los registros con las claves deseadas. Qu e tan eciente es esto? Recuerde que nuestra principal preocupaci on es la cantidad de lecturas que se hacen del disco.
Ejemplos
Estructuras de archivos
Trimestre 09I
85 / 464
Estructuras de archivos
Trimestre 09I
86 / 464
Estructuras de archivos
Trimestre 09I
87 / 464
Si tenemos n registros y hacemos una lectura por registro entonces haremos un m aximo de n y un promedio de n/2 lecturas.
Aunque la b usqueda secuencial parece demasiado lenta, tiene sus aplicaciones: B usqueda de patrones. Archivos con pocos registros. Archivos en los que casi nunca tiene que realizarse una b usqueda. Archivos almacenados en cinta. B usquedas en las que se espera obtener muchos resultados.
Una alternativa es el acceso directo. Se puede tener acceso directo a un registro si podemos buscar (seek) directamente el principio del registro para leerlo inmediatamente. De esta manera no importa que tan grande sea el archivo, se puede localizar cualquier registro en un tiempo constante.
Por supuesto, si agrupamos los registros en grupos de k entonces haremos un m aximo de n/k y un promedio de n/(2k ) lecturas.
Estructuras de archivos
Trimestre 09I
88 / 464
Estructuras de archivos
Trimestre 09I
89 / 464
Estructuras de archivos
Trimestre 09I
90 / 464
Contenido
Dise no y especicaci on de estructuras de archivos Operaciones fundamentales de procesamiento de archivos Almacenamiento secundario Conceptos fundamentales de estructuras de archivos Manipulando archivos con registros Acceso a registros Estructura de registros Organizaci on de archivos para mejora del desempe no
Estructuras de archivos Trimestre 09I 92 / 464 Francisco Zaragoza (UAM Azcapotzalco) Estructuras de archivos Trimestre 09I 93 / 464
Longitud de un registro
Si ya decidimos tener registros de longitud ja es necesario pensar en c omo se puede escoger esa longitud. Imagine que un sector tiene 512 bytes y que un registro debe medir al menos 30 bytes.
La m as f acil es cuando todos los registros tienen la misma longitud y sabemos el n umero de registro relativo que buscamos.
4
Si sabemos que cada registro mide r bytes y que el registro buscado tiene n umero relativo n entonces este comienza a partir del byte rn.
5
Entonces tiene sentido escoger que cada uno de los registros mida 32 bytes para asegurar que cada sector contiene un n umero entero de registros.
Estructuras de archivos
Trimestre 09I
91 / 464
Registro de cabecera
1
Contenido
Dise no y especicaci on de estructuras de archivos Operaciones fundamentales de procesamiento de archivos Almacenamiento secundario
3 4
En ocasiones es necesario o conveniente agregar cierta informaci on adicional a un archivo que sirva para su uso posterior. Seguramente, el registro de cabecera tendr a una estructura distinta a la de los dem as registros del archivo. El prop osito del registro de cabecera es que el archivo se autodescriba. Esto sirve para que los programas que usen este archivo no necesiten saber con anticipaci on todos los detalles de la estructura del archivo.
Frecuentemente se usa un registro de cabecera para incluir informaci on como el n umero de registros, el tama no de los registros, el momento de su u ltima actualizaci on, el nombre del archivo y la longitud de la cabecera.
Organizaci on de archivos para mejora del desempe no Compresi on de datos Compactaci on de archivos B usqueda y ordenamiento internos Ordenamiento por claves
Trimestre 09I 95 / 464 Francisco Zaragoza (UAM Azcapotzalco) Estructuras de archivos Trimestre 09I 96 / 464
Estructuras de archivos
Trimestre 09I
94 / 464
Estructuras de archivos
Compresi on de archivos
Reducci on de redundancia
Hay muchas razones por las cuales es buena idea comprimir archivos:
Existen varias t ecnicas de compresi on de datos: Usar una notaci on distinta (abreviaturas). Suprimir informaci on repetida. Uso de c odigos de longitud variable. Eliminaci on de datos.
Se logra codicando los datos en campos de longitud ja y casi siempre resulta en datos binarios (es decir, no en ASCII). Tiene varios problemas: El archivo ya no podr a ser le do por una persona com un y corriente. Hay un costo de codicaci on y decodicaci on. Todos los programas que usen el archivo deber an de conocer la codicaci on.
Transmisi on m as r apida.
Estructuras de archivos
Trimestre 09I
97 / 464
Estructuras de archivos
Trimestre 09I
98 / 464
Estructuras de archivos
Trimestre 09I
99 / 464
Cu ando usarla?
Ejemplo de corridas
Suponga que se quiere comprimir la cadena Se usa en archivos que contienen pocos datos y mucho espacio desperdiciado (como las im agenes con pocos detalles). Se transforman las secuencias de datos consecutivos id enticos (llamadas corridas) en secuencias especiales. Estas consisten de un byte indicador de corrida, el dato que se repite y la cantidad de veces que se repite. La cadena comprimida resultante es 00122112212152052232142081000. Ser a cierto que siempre se comprime? 00121211111000002221111000000001000 usando al 2 como indicador de corrida y los d gitos del 1 al 9 para indicar la cuenta. Una corrida debe tener longitud al menos cuatro, excepto para el 2. Porqu e?
Si el archivo ya es muy peque no, si lo usan muchos programas distintos o si alguno de ellos no puede lidiar con datos en binario entonces es una mala idea.
Si el archivo es muy grande y s olo lo usa un programa entonces es una buena idea.
Estructuras de archivos
Trimestre 09I
100 / 464
Estructuras de archivos
Trimestre 09I
101 / 464
Estructuras de archivos
Trimestre 09I
102 / 464
C odigo Morse
C odigo de Human
Si un dato aparece muchas m as veces en un archivo que otro dato en el mismo archivo tiene sentido asignarle un c odigo m as corto al primero que al segundo. E I S U R W D K G O A N M T
A diferencia del c odigo Morse, este tipo de c odigos no necesita separadores para saber donde termina una letra. Se obtienen a partir de las probabilidades de aparici on de las letras en un archivo. Ejemplo: si las letras a, b, c, d, e, f aparecen con probabilidades 0.1, 0.23, 0.45, 0.06, 0.07, 0.09 entonces sus c odigos son 0000, 01, 1, 0011, 0010, 0001. Qu e dice en 10010111010110010101? . en Morse.
Otro ejemplo (donde la tabla de codicaci on puede cambiar de archivo a archivo) es la codicaci on de Human. Arbol binario de decisi on que contiene parte del c odigo Morse La palabra MORSE se codica como -- --- .-. ...
Estructuras de archivos
Trimestre 09I
103 / 464
Estructuras de archivos
Trimestre 09I
104 / 464
Estructuras de archivos
Trimestre 09I
105 / 464
Contenido
Dise no y especicaci on de estructuras de archivos Operaciones fundamentales de procesamiento de archivos Almacenamiento secundario Conceptos fundamentales de estructuras de archivos Manipulando archivos con registros
5 6
Si el u nico tipo de operaci on que se realiza en un archivo es la de agregar registros entonces nunca se desperdiciar a espacio. La situaci on cambia si se permiten borrados o modicaciones de registros. Una modicaci on se puede ver como un borrado seguido de una adici on, por lo que no la estudiaremos a detalle.
Organizaci on de archivos para mejora del desempe no Compresi on de datos Compactaci on de archivos B usqueda y ordenamiento internos Ordenamiento por claves
106 / 464 Francisco Zaragoza (UAM Azcapotzalco) Estructuras de archivos Trimestre 09I 107 / 464 Francisco Zaragoza (UAM Azcapotzalco) Estructuras de archivos Trimestre 09I 108 / 464
Estructuras de archivos
Trimestre 09I
Compactaci on de archivos
Problemas de la compactaci on
La compactaci on no se hace con frecuencia. Los programas que usen estos archivos deben ignorar los registros borrados. Una ventaja es que se puede recuperar un registro borrado siempre y cuando no se haya realizado una compactaci on. Si hay espacio disponible, la forma m as f acil de hacer la compactaci on es usando un segundo archivo (aunque no es necesario). La compactaci on tiene varios problemas. Si el archivo se modica con gran frecuencia entonces la compactaci on tambi en deber a ocurrir frecuentemente.
Un primer mecanismo para recuperar el espacio perdido por operaciones de borrado se llama compactaci on. Este busca a trav es del archivo aquel espacio en el que no haya datos y lo recupera.
Para ello se necesita una forma de saber si cierto espacio contiene o no datos.
Si el programa que usa el archivo es interactivo entonces el usuario tendr a que esperar una cantidad considerable de tiempo para que se efect ue esta operaci on.
Estructuras de archivos
Trimestre 09I
109 / 464
Estructuras de archivos
Trimestre 09I
110 / 464
Estructuras de archivos
Trimestre 09I
111 / 464
Registros de longitud ja
Suponga que los registros son de longitud ja. Entonces cualquier registro cabe en el espacio liberado por uno borrado. Una forma de lograr esto es creando una lista ligada de registros disponibles. Como el orden en el que se encuentren estos registros es indistinto conviene utilizar el tipo de lista ligada m as sencillo de implementar. Cu al es?
Se necesita un m etodo para decidir inmediatamente si hay o no espacio reutilizable y, en su caso, saber d onde est a.
Se necesita una forma de indicar d onde est a el tope de la pila y cu ando no hay m as elementos en la pila. No podemos usar apuntadores porqu e? Pero podemos usar los n umeros de registro relativos para indicar d onde est a el siguiente elemento libre y el -1 para indicar que no hay m as elementos. Este indicador se puede guardar en un campo del registro (y el tope en la cabecera).
Una forma simple es la de buscar secuencialmente en el archivo hasta que encontremos un registro borrado.
Estructuras de archivos
Trimestre 09I
112 / 464
Estructuras de archivos
Trimestre 09I
113 / 464
Estructuras de archivos
Trimestre 09I
114 / 464
Fragmentaci on externa
Ya no podemos usar el n umero de registro relativo, as que debemos usar en su lugar la posici on en bytes del registro en el archivo.
Un problema nuevo es qu e hacer con el espacio que sobra al usar un registro disponible m as grande de lo necesario? La idea de usar registros de longitud variable era la de desaparecer este problema! Una opci on es colocar ese espacio extra de nuevo en la lista de espacio disponible. Puede ocurrir que ese espacio sea tan peque no que no sea utilizable. Este es un caso de fragmentaci on externa.
C omo decidimos cu al espacio libre utilizar para grabar un registro? Esto ya no es ciencia, sino m as bien arte. Algunas estrategias comunes son:
1 2 3
Adem as, necesitamos saber de qu e longitud es cada registro (aunque esa informaci on podr a ya existir en el registro).
En el primero que quepa (rst t). En el de menor tama no (best t). En el de mayor tama no (worst t).
Tampoco podemos usar cualquier registro libre sino s olo los que sean sucientemente grandes: la pila ya no nos ser au til.
Ninguna de ellas es mejor que las dem as para una situaci on arbitraria.
Estructuras de archivos
Trimestre 09I
115 / 464
Estructuras de archivos
Trimestre 09I
116 / 464
Estructuras de archivos
Trimestre 09I
117 / 464
Contenido
B usqueda y ordenamiento
Limitaciones
Dise no y especicaci on de estructuras de archivos Suponga que un archivo tiene n registros. La b usqueda secuencial tarda n. El ordenamiento secuencial tarda n2 . La b usqueda binaria tarda log n. El ordenamiento eciente tarda n log n. Todos son muy lentos con archivos. Estas operaciones debieran hacerse solamente en la memoria. Mantener un archivo ordenado es muy caro. El ordenamiento en memoria s olo sirve para archivos peque nos. Los m etodos ecientes de b usqueda y ordenamiento tienen serias limitaciones. La b usqueda binaria requiere de m as de dos accesos al disco.
Almacenamiento secundario
Organizaci on de archivos para mejora del desempe no Compresi on de datos Compactaci on de archivos B usqueda y ordenamiento internos Ordenamiento por claves
Trimestre 09I 118 / 464 Francisco Zaragoza (UAM Azcapotzalco) Estructuras de archivos Trimestre 09I 119 / 464 Francisco Zaragoza (UAM Azcapotzalco) Estructuras de archivos Trimestre 09I 120 / 464
Estructuras de archivos
Contenido
Dise no y especicaci on de estructuras de archivos Operaciones fundamentales de procesamiento de archivos Almacenamiento secundario Conceptos fundamentales de estructuras de archivos Manipulando archivos con registros Organizaci on de archivos para mejora del desempe no Compresi on de datos Compactaci on de archivos B usqueda y ordenamiento internos Ordenamiento por claves
Estructuras de archivos Trimestre 09I 122 / 464
Observe que no se necesita tener todo el registro para poder ordenarlo. Basta tener las llaves o claves. Un primer m etodo de mejora es:
1 2 3
No debe ser necesario reorganizar los registros en un archivo cada vez que se agregue un nuevo registro ( ndices y t ecnica de dispersi on). Debe estar asociado con una estructura que nos permita una mejora sustancial en la velocidad de reorganizaci on de un archivo ( arboles B , B + , B , etc).
4 5
Leer las llaves junto con los n umeros relativos de cada registro. Ordenar las llaves en memoria. Reescribir los registros en el nuevo orden.
Estructuras de archivos
Trimestre 09I
121 / 464
Estructuras de archivos
Trimestre 09I
123 / 464
Primer m etodo
Archivo original ana sol Al principio parece que el m etodo funciona. Podemos ordenar archivos mucho m as grandes en la misma cantidad de memoria. Pero los registros se deben leer dos veces. La primera vez es en orden secuencial. uno 2 uno voz voz 4 Pero la segunda vez es en orden arbitrario. As que no funciona como esper abamos. C omo resolver este problema?
ola
uno
non
voz
res
non 3
voz 4
res 5
No reescribamos el archivo, sino que generemos un segundo archivo ndice. Este archivo contendr a la estructura generada en memoria. Cada uno de sus registros contendr a dos campos: la clave y el n umero relativo del registro original. Esto se puede hacer con una lectura secuencial del archivo original seguida de una escritura secuencial del archivo ndice. Esto s es m as r apido que la soluci on original.
Copia en la memoria pez ola uno 0 1 2 Ordenado en memoria ana non ola 6 3 1 Archivo nal
pez 0
res 5
sol 7
ana
non
ola
pez
res
sol
Estructuras de archivos
Trimestre 09I
124 / 464
Estructuras de archivos
Trimestre 09I
125 / 464
Estructuras de archivos
Trimestre 09I
126 / 464
Archivo e ndice
Efectos secundarios
Observe que con este m etodo los registros no se mueven de su lugar. 6 ana Qu e pasar a si en alg un registro del archivo hubiera un indicador del n umero relativo de otro registro? 7 sol
1 ola Al mover los registros el indicador ser a in util. 6 uno 2 Cuando un archivo contiene este tipo de referencias se dice que los registros est an jos (pinned) y si estas se pierden se dice que quedan colgando (dangling). 7 voz 4
2 uno
3 non
4 voz
5 res
1 non 3
2 ola 1
3 pez 0
4 res 5
5 sol 7
Estructuras de archivos
Trimestre 09I
127 / 464
Estructuras de archivos
Trimestre 09I
128 / 464
Trimestre 09I
129 / 464
Contenido
Objetos y conexiones
Mapas y caminos
B 5 6 7 3 4 6
Representaci on de grafos y aplicaciones Grafos (no dirigidos) Grafos dirigidos Muchos problemas cotidianos se formulan de manera natural por medio de objetos y las conexiones que haya entre ellos. Mapas y caminos. Laberintos. Circuitos el ectricos. Redes de computadoras. Redes sociales.
Recorridos de un grafo
15 9 A 9 1 4 7 8 3 2 A
Laberintos
Circuitos el ectricos
Redes de computadoras
Un laberinto resuelto
Trimestre 09I 133 / 464 Francisco Zaragoza (UAM Azcapotzalco) Grafos y sus aplicaciones Trimestre 09I 134 / 464
Dibujos de grafos
Un grafo G = (V , E ) es una pareja ordenada de conjuntos de v ertices y aristas. Generalmente se representa a un grafo con un dibujo donde cada v ertice es un punto y cada arista es una l nea que une dos puntos. 5 4 7 2 6 Un bosque, un camino y un ciclo.
Trimestre 09I 136 / 464 Francisco Zaragoza (UAM Azcapotzalco) Grafos y sus aplicaciones Trimestre 09I 137 / 464 Francisco Zaragoza (UAM Azcapotzalco) Grafos y sus aplicaciones
Todos los v ertices y aristas de G deben ser distintos (es decir, tener nombres distintos). La ubicaci on de los puntos y la forma de las l neas suele no importar, pues solamente representan relaciones. Pero a veces un grafo representa a un objeto geom etrico y en ese caso ambas cosas resultan ser importantes. 6
A veces una arista une a un v ertice consigo mismo (lazo) o m as de una arista une a los mismos v ertices (paralelas). 7 2
Trimestre 09I
138 / 464
Caminos y conexidad
Ciclos y arboles
Sean n = |V | y m = |E |. Un camino que comienza y termina en el mismo v ertice es un circuito. Un circuito que no repite v ertices es un ciclo. Un grafo que no tiene ciclos se llama bosque. Un bosque conexo se llama arbol. Un arbol que pasa por todos los v ertices de un grafo se llama abarcador.
Un camino es una secuencia de v ertices en la que cada dos v ertices consecutivos est an unidos por una arista.
Un grafo (sin aristas paralelas ni lazos) que tiene todas las aristas posibles (es decir, si m = 1 2 n(n 1)) se llama completo.
Un grafo que tiene relativamente pocas aristas (es decir, si m n) se llama disperso. Un grafo que tiene relativamente muchas aristas (es decir, si m n2 ) se llama denso.
Teorema
Un grafo es un arbol si y s olo si es conexo y tiene m = n 1.
Trimestre 09I
139 / 464
Trimestre 09I
140 / 464
Trimestre 09I
141 / 464
Representaciones de un grafo
Matriz de adyacencia
3 4
Las tres se pueden usar para representar los costos de las aristas.
A 0 1 2 3 4 5 6 7
0 0 1 0 1 1 0 0 0
1 1 0 1 0 0 0 0 0
2 0 1 0 1 0 0 0 0
3 1 0 1 0 1 0 0 0
4 1 0 0 1 0 0 0 0
5 0 0 0 0 0 0 1 0
6 0 0 0 0 0 1 0 1
7 0 0 0 0 0 0 1 0
scanf("%d", &n); for(i = 0; i < n; i++) for(j = 0; j < n; j++) scanf("%d", &a[i][j]);
8 0 1 0 1 1 0 0 0
1 0 1 0 0 0 0 0
0 1 0 1 0 0 0 0
1 0 1 0 1 0 0 0
1 0 0 1 0 0 0 0
0 0 0 0 0 0 1 0
0 0 0 0 0 1 0 1
0 0 0 0 0 0 1 0
Trimestre 09I
142 / 464
Trimestre 09I
143 / 464
Trimestre 09I
144 / 464
Listas de adyacencia
int n, i, j; int a[MAXV][MAXV]; 0 0 : 1 3 4. 5 2 : 1 3. 3 : 0 2 4. 4 : 0 3. 5 : 6. 2 6 : 5 7. 7 : 6. 6 7 1 0 0 0 0 4 1 0 0 0 0 1 0 0 0 1 scanf("%d%d", &n, &m); for (i = 0; i < n; i++) inicializa(&a[i]); for (j = 0; j < m; j++) { scanf("%d%d", &u, &v); inserta(u, &a[v]); inserta(v, &a[u]); } 1 3 1 : 0 2. 8 0 1 2 3 4 0 5 6 8 1 2 3 4 0 3 6 7 int n, m, u, v, i, j; lista a[MAXV];
scanf("%d", &n); for(i = 0; i < n; i++) for(j = 0; j <= i; j++) if (i == j) a[i][j] = 0; else { scanf("%d", &a[i][j]); a[j][i] = a[i][j]; }
8 1 0 1 1 0 0 0
1 0 0 0 0 0
Trimestre 09I
145 / 464
Trimestre 09I
146 / 464
Trimestre 09I
147 / 464
Matriz de incidencia
Contenido
0
7
Recorridos de un grafo
9
I 0 1 2 3 4 5 6 7 scanf("%d%d", &n, &m); for (j = 0; j < m; j++) { scanf("%d%d", &u, &v); for (i = 0; i < n; i++) { if (i == u || i == v) a[i][j] = 1; else a[i][j] = 0; } } 8 0 1 2 3 4 0 5 6 8 1 2 3 4 0 3 6 7
01 1 1 0 0 0 0 0 0
12 0 1 1 0 0 0 0 0
23 0 0 1 1 0 0 0 0
34 0 0 0 1 1 0 0 0
40 1 0 0 0 1 0 0 0
03 1 0 0 1 0 0 0 0
56 0 0 0 0 0 1 1 0
67 0 0 0 0 0 0 1 1
Trimestre 09I
148 / 464
Trimestre 09I
149 / 464
Trimestre 09I
150 / 464
Objetos y precedencias
Calles de un sentido
Secuenciaci on de tareas
IC IP
Otros problemas cotidianos se formulan por medio de objetos y las relaciones de precedencia que haya entre ellos. SB
ED
MN
Secuenciaci on de tareas.
IA
ARI
IO
Un grafo dirigido D = (V , A) es una pareja ordenada de conjuntos de v ertices y arcos. 5 4 7 2 6 5 1 3 3 Todos los v ertices y arcos son distintos. Cada arco va de un v ertice a otro. A veces un arco va de un v ertice a s mismo (lazo) o m as de un arco va de un mismo v ertice a otro (arcos paralelos). Y a veces los arcos tienen capacidades. 6 Uno fuertemente conexo y el otro no.
Trimestre 09I 154 / 464 Francisco Zaragoza (UAM Azcapotzalco) Grafos y sus aplicaciones Trimestre 09I 155 / 464 Francisco Zaragoza (UAM Azcapotzalco) Grafos y sus aplicaciones
Trimestre 09I
156 / 464
Caminos dirigidos
Matriz de adyacencia
0 Hay al menos tres formas de representar un grafo dirigido en un programa. La matriz de adyacencia se usa para representar grafos dirigidos densos. La lista de adyacencia se usa para representar grafos dirigidos dispersos. En ocasiones se usa la matriz de incidencia. Las tres se pueden usar para representar las capacidades de los arcos. 6 7 5 1 4 2 3
Un camino dirigido es una secuencia de v ertices en la que hay un arco de cada v ertice al siguiente.
Un grafo dirigido es fuertemente conexo si hay caminos entre cada pareja de v ertices.
Si un grafo dirigido no es fuertemente conexo entonces tiene m as de una componente fuertemente conexa.
A 0 1 2 3 4 5 6 7
0 0 0 0 0 1 0 0 0
1 1 0 0 0 0 0 0 0
2 0 1 0 0 0 0 0 0
3 1 0 1 0 0 0 0 0
4 0 0 0 1 0 0 0 0
5 0 0 0 0 0 0 0 0
6 0 0 0 0 0 1 0 0
7 0 0 1 0 0 0 1 0
Trimestre 09I
157 / 464
Trimestre 09I
158 / 464
Trimestre 09I
159 / 464
Lista de adyacencia
0 0 : 1 3. 1 : 2. 5 1 4 2 6 7 3 2 : 3 7. 3 : 4. 4 : 0. 5 : 6. 6 : 7. 7 : nil.
scanf("%d", &n); for (i = 0; i < n; i++) for (j = 0; j < n; j++) scanf("%d", &a[i][j]);
8 0 0 0 0 1 0 0 0
1 0 0 0 0 0 0 0
scanf("%d%d", &n, &m); for (i = 0; i < n; i++) inicializa(&a[i]); for (j = 0; j < m; j++) { scanf("%d%d", &u, &v); inserta(u, &a[v]); }
8 0 1 2 3 4 0 5 6 2
9 1 2 3 4 0 3 6 7 7
Trimestre 09I
160 / 464
Trimestre 09I
161 / 464
Trimestre 09I
162 / 464
Matriz de incidencia
Contenido
0
8
5 1
Recorridos de un grafo B usqueda en profundidad B usqueda en amplitud Componentes conexas y biconexas Uni on y pertenencia Ordenamiento topol ogico Grafos con costos
6
9
I 0 1 2 3 4 5 6 7
01 -1 +1 0 0 0 0 0 0
12 0 -1 +1 0 0 0 0 0
23 0 0 -1 +1 0 0 0 0
34 0 0 0 -1 +1 0 0 0
40 +1 0 0 0 -1 0 0 0
03 -1 0 0 +1 0 0 0 0
56 0 0 0 0 0 -1 +1 0
67 0 0 0 0 0 0 -1 +1
27 0 0 -1 0 0 0 0 +1
scanf("%d%d", &n, &m); for (j = 0; j < m; j++) { scanf("%d%d", &u, &v); for (i = 0; i < n; i++) a[i][j] = 0; a[u][j] = -1; a[v][j] = +1; }
8 0 1 2 3 4 0 5 6 2
9 1 2 3 4 0 3 6 7 7
Trimestre 09I
163 / 464
Trimestre 09I
164 / 464
Trimestre 09I
165 / 464
Recorrido de un grafo
B usqueda en profundidad
(0,-)
(0,1)
Cuando se trabaja con grafos uno se encuentra con preguntas comunes. El primer m etodo se puede describir f acilmente de forma recursiva. Al inicio se marcan todos los v ertices del grafo como no vistos. Luego, para cada v ertice no visto se le marca como ya visto y se visita recursivamente a todos sus vecinos no vistos.
Para responder a estas preguntas se debe poder recorrer un grafo de forma met odica, de modo que se visiten todos sus v ertices y aristas (de preferencia una sola vez).
Estos algoritmos pueden ser recursivos o iterativos y s olo dependen un poco de la representaci on.
Trimestre 09I
166 / 464
Trimestre 09I
167 / 464
Trimestre 09I
168 / 464
(0,1)
(0,1)
(0,1)
(0,1)
(0,1)
(0,1)
(5,-)
(5,-) (1,2) (4,-) (2,3) (7,-) (6,-) (3,4) (1,2) (4,-) (2,3) (7,-) (3,4)
(1,2)
(4,-)
(3,-)
(1,2)
(2,-)
(6,-)
(7,-)
(6,-)
Trimestre 09I
169 / 464
Trimestre 09I
170 / 464
Trimestre 09I
171 / 464
Implementaci on de profundidad
(0,1)
(0,1)
(0,1)
(0,1)
Se necesita un arreglo visto que indique si el v ertice correspondiente ha sido visto o no. El valor de no visto puede ser 0 mientras que el de visto puede ser el del orden de visita.
(5,-) (4,5) (2,3) (7,-) (6,7) (7,-) (6,7) (7,8) (2,3) (2,3) (3,4) (4,5) (4,5) (1,2) (3,4) (3,4) (1,2) El resto depende de la representaci on.
(5,6)
(5,6)
(5,6)
(1,2)
(4,5)
(3,4)
(1,2)
(2,3)
(6,-)
(7,-)
(6,-)
orden = 0; for (k = 0; k < n; k++) visto[k] = 0; for (k = 0; k < n; k++) if (visto[k] == 0) visita(k);
Trimestre 09I
172 / 464
Trimestre 09I
173 / 464
Trimestre 09I
174 / 464
Profundidad no recursiva
Se necesita una pila (cualquier representaci on).
En este caso la b usqueda en profundidad toma tiempo m + n. void visita(int k) { int t; visto[k] = ++orden; for (t = 0; t < n; t++) if (a[k][t] != 0) if (visto[t] == 0) visita(t); }
n2 .
void visita(int k) { nodo *t; mete(k, pila); while (!vacia(pila)) { k = saca(pila); visto[k] = ++orden; for (t = a[k]; t != NULL; t = t->sig) if (visto[t->v] == 0) { mete(t->v, pila); visto[t->v] = -1; /* en pila */ } } }
Trimestre 09I 176 / 464 Francisco Zaragoza (UAM Azcapotzalco) Grafos y sus aplicaciones Trimestre 09I 177 / 464
Trimestre 09I
175 / 464
Observaciones de profundidad
(0,-) Los algoritmos de b usqueda en profundidad para grafos se pueden usar sin cambios en grafos dirigidos. Lo que cambia es la estructura generada. Los arcos solamente se visitan una vez. Los arcos que no pertenecen al bosque de b usqueda en profundidad pueden apuntar hacia arriba, hacia abajo o ser transversales. (6,-)
(0,1)
Con este m etodo se visita cada v ertice una vez y cada arista dos veces. (5,-) (1,-) (4,-) (2,-) (7,-) (6,-) (3,-) (5,-) (1,-) (4,-) (2,-) (7,-) (3,-)
Las aristas que visitan por primera vez v ertices no vistos forman el bosque de b usqueda en profundidad.
Trimestre 09I
178 / 464
Trimestre 09I
179 / 464
Trimestre 09I
180 / 464
(0,1)
(5,-) (5,-) (3,-) (1,2) (4,-) (2,3) (6,-) (7,-) (6,-) (7,-) (6,-) (7,6) (6,-) (2,3) (2,3) (3,4) (1,2) (4,5) (3,4) (1,2) (4,5) (3,4) (1,2) (4,5) (5,-) (5,-) (5,7)
(5,-)
(3,-)
(1,2) (4,-)
(3,4)
(2,-)
(2,3) (7,6)
(6,-)
(7,-)
(6,-)
Trimestre 09I
181 / 464
Trimestre 09I
182 / 464
Trimestre 09I
183 / 464
Contenido
B usqueda en amplitud
(0,1)
7
(5,7) (3,4)
(5,7)
Si en el m etodo de b usqueda en profundidad no recursivo se reemplaza la pila por una cola se obtiene un recorrido distinto. A este se le llama b usqueda en amplitud. Este m etodo es parecido al de recorrer un arbol por niveles a partir de la ra z.
(3,4)
(1,2) (4,5)
Recorridos de un grafo B usqueda en profundidad B usqueda en amplitud Componentes conexas y biconexas Uni on y pertenencia Ordenamiento topol ogico
(6,8)
(7,6)
(6,8)
Trimestre 09I
184 / 464
Trimestre 09I
185 / 464
Trimestre 09I
186 / 464
Ejemplo de amplitud 1
Ejemplo de amplitud 2
Ejemplo de amplitud 3
(0,-)
(0,1)
(0,1)
(0,1)
(0,1)
(0,1)
(5,-)
(5,-) (1,2) (4,-) (2,-) (7,-) (6,-) (3,-) (1,2) (4,-) (2,-) (7,-) (3,3)
(1,-)
(4,-)
(3,-)
(1,-)
(2,-)
(6,-)
(7,-)
(6,-)
Trimestre 09I
187 / 464
Trimestre 09I
188 / 464
Trimestre 09I
189 / 464
Ejemplo de amplitud 4
Ejemplo de amplitud 5
(0,1)
(0,1)
(0,1)
(0,1)
(0,-)
(0,1)
(5,)
(5,6) (4,4) (4,-) (2,-) (6,-) (7,-) (6,-) (2,5) (7,-) (6,7) (7,-) (6,7) (7,8) (2,5) (2,5) (3,3) (4,4) (4,4) (1,-) (3,-) (1,-) (4,-) (1,2) (3,3) (1,2) (3,3)
(5,6)
(5,6)
(5,-)
(5,-) (3,-)
(1,2)
(4,4)
(3,3)
(1,2)
(2,5)
(2,-) (7,-)
(6,-)
(7,-)
(6,-)
Trimestre 09I
190 / 464
Trimestre 09I
191 / 464
Trimestre 09I
192 / 464
(0,1)
(0,1)
(0,1)
(0,1)
(0,1)
(0,1)
(5,-) (3,3) (1,2) (4,-) (2,4) (6,-) (7,-) (6,-) (7,-) (2,4) (3,3) (1,2) (4,5) (3,3)
(5,-)
(5,-)
(5,-)
(3,-)
(1,2) (4,-)
(2,-)
(6,-)
(7,-)
(6,-)
Trimestre 09I
193 / 464
Trimestre 09I
194 / 464
Trimestre 09I
195 / 464
Contenido
Componentes conexas
(0,1)
7 8
(0,1)
Representaci on de grafos y aplicaciones Tanto la b usqueda en profundidad como en amplitud se pueden usar para encontrar las componentes conexas de un grafo. Las u nicas modicaciones que se necesitan son que visita enumere el v ertice que se acaba de visitar y que la llamada no recursiva a visita separe las listas de v ertices. Esto se puede hacer con un arreglo inver que tome los valores inver[orden] = k (el negativo en la llamada no recursiva).
(5,7) (3,3)
(5,7)
(3,3)
(1,2) (4,5)
(2,4)
Recorridos de un grafo B usqueda en profundidad B usqueda en amplitud Componentes conexas y biconexas Uni on y pertenencia Ordenamiento topol ogico Grafos con costos
(6,8)
(7,6)
(6,8)
Trimestre 09I
196 / 464
Trimestre 09I
197 / 464
Trimestre 09I
198 / 464
Implementaci on de componentes
A F A veces es u til revisar que un grafo no tiene cuellos de botella o puntos de fallo u nicos. E B D L J K Componentes biconexas de un grafo.
Trimestre 09I 199 / 464 Francisco Zaragoza (UAM Azcapotzalco) Grafos y sus aplicaciones Trimestre 09I 200 / 464 Francisco Zaragoza (UAM Azcapotzalco) Grafos y sus aplicaciones Trimestre 09I 201 / 464
Componentes biconexas
A G J H I M K C G
orden = 0; for (k = 0; k < n; k++) visto[k] = 0; for (k = 0; k < n; k++) if (visto[k] == 0) { visita(k); inver[visto[k]] = -inver[visto[k]]; }
H I
Un punto de articulaci on es un v ertice de un grafo que al borrarlo aumenta el n umero de componentes conexas del grafo. C E F L M Un grafo que no tiene puntos de articulaci on se llama biconexo. En un grafo biconexo cada pareja de v ertices distintos est an conectados por al menos dos caminos disjuntos.
void visita(int k) { nodo *t; visto[k] = ++orden; inver[orden] = k; for (t = a[k]; t != NULL; t = t->sig) if (visto[t->v] == 0) visita(t->v); }
Implementaci on de biconexas
Contenido
Un v ertice x no es de articulaci on si cada uno de sus hijos y tiene alg un descendiente conectado a un punto m as alto que x .
Recorridos de un grafo B usqueda en profundidad B usqueda en amplitud Componentes conexas y biconexas Uni on y pertenencia Ordenamiento topol ogico
9
visto[k] = ++orden; alto = orden; for (t = a[k]; t != NULL; t = t->sig) if (visto[t->v] == 0) { temp = visita(t->v); if (temp < alto) alto = temp; if (temp >= visto[k]) articulacion(k); } else if (visto[t->v] < alto) alto = visto[t->v]; return alto; }
Francisco Zaragoza (UAM Azcapotzalco) Grafos y sus aplicaciones Trimestre 09I 203 / 464
Trimestre 09I
202 / 464
Trimestre 09I
204 / 464
Uni on y pertenencia
Bosque de arboles
En algunas variantes del problema de conexidad lo u nico que se quiere saber es si un cierto v ertice est a conectado a otro.
Hasta ahora todas las gr acas que hemos considerado han sido est aticas (no cambian). El algoritmo que estudiaremos funciona con gr acas a las que se les agregan aristas. A la operaci on de agregar una arista la llamaremos uni on y a la pregunta de conexidad la llamaremos pertenencia. Estos nombres vienen de la versi on del problema con conjuntos.
La estructura que usaremos para representar a los subconjuntos es un bosque de arboles. Al principio cada elemento forma su propio subconjunto y queda representado por un arbol con un solo v ertice. Cuando se unen dos subconjuntos, sus arboles se juntan en un solo arbol. Para vericar la pertenencia se revisa si los dos elementos est an en el mismo arbol.
Otro problema id entico es el siguiente: se tiene una familia de subconjuntos disjuntos y se quiere saber si dos elementos est an en el mismo subconjunto.
Trimestre 09I
205 / 464
Trimestre 09I
206 / 464
Trimestre 09I
207 / 464
1 3
Trimestre 09I
208 / 464
Trimestre 09I
209 / 464
Trimestre 09I
210 / 464
1 5
1 2
Trimestre 09I
211 / 464
Trimestre 09I
212 / 464
Trimestre 09I
213 / 464
Contenido
Representaci on de grafos y aplicaciones En muchas aplicaciones es importante que un grafo dirigido no contenga ciclos dirigidos. Por ejemplo, si los v ertices representan actividades y los arcos precedencias entonces la presencia de un ciclo dirigido implica una inconsistencia. Se les llama grafos dirigidos ac clicos (en ingl es directed acyclic graph o DAG).
Para hacer la uni on de dos elementos buscamos sus ra ces i, j y si son distintas hacemos padre[i] = j.
9
Recorridos de un grafo B usqueda en profundidad B usqueda en amplitud Componentes conexas y biconexas Uni on y pertenencia Ordenamiento topol ogico Grafos con costos
Trimestre 09I
214 / 464
Trimestre 09I
215 / 464
Trimestre 09I
216 / 464
Contenido
A F K D M A veces lo que interesa es un orden topol ogico inverso. La b usqueda en profundidad recursiva encuentra un orden topol ogico inverso. C omo se halla un orden normal?
9
H Los v ertices de un grafo ac clico pueden procesarse de modo que ning un v ertice se procese antes que otro que apunte a el. L
8 7
D E
H Grafos con costos B usqueda por prioridad Arboles abarcadores de costo m nimo Caminos m as cortos
Trimestre 09I
217 / 464
Trimestre 09I
218 / 464
Trimestre 09I
219 / 464
A 4 F 1 4 4 1 H G C 3 2 3 B E 2 3 D 2 3 Si en el m etodo de b usqueda en profundidad no recursivo se reemplaza la pila por una cola de prioridad se obtiene un recorrido distinto. A este se le llama b usqueda por prioridad. La prioridad se le asigna a los v ertices. Recordemos que una cola de prioridad se puede implementar con un mont culo.
En muchas aplicaciones se desea elegir algunas aristas de un grafo para satisfacer algunas restricciones.
El factor de decisi on suele estar asociado con un cierto costo de las aristas.
c A B C D E F G H
A 3 3 2 4 -
B 3 3 1 -
C 3 3 2 1
D 3 3 2 -
E 2 2 2 -
F 4 1 4 -
G 4 4
H 1 4 -
Trimestre 09I
220 / 464
Trimestre 09I
221 / 464
Trimestre 09I
222 / 464
2 6 4 1 5
2 6
2 6 4 1 1
2 6 4 1
2 6 4 1
7 [(2, 0), (3, 0), (4, 0), (6, 0)] [(3, 0), (4, 0), (5, 2), (6, 0)] [(1, 3), (4, 0), (5, 2), (6, 0)].
7 [(1, 3), (4, 0), (5, 2), (6, 0)] [(4, 0), (5, 2), (6, 0), (7, 1)] [(5, 2), (6, 0), (7, 1)].
Cola de prioridad [(0, )] [(2, 0), (3, 0), (4, 0), (6, 0)].
Trimestre 09I 223 / 464
Trimestre 09I
224 / 464
Trimestre 09I
225 / 464
Contenido
2 6
9 8
Recordemos que un arbol abarcador es un arbol que usa todos los v ertices de un grafo. Si las aristas tienen costos le asignaremos a cada arbol abarcador como costo la suma de los costos de las aristas que lo forman. Un grafo conexo suele tener m as de un arbol abarcador. Nos interesa encontrar un arbol abarcador de costo m nimo. Aplicaci on: Conexi on a costo m nimo. Dos algoritmos para resolver este problema.
4 1 Grafos con costos B usqueda por prioridad Arboles abarcadores de costo m nimo Caminos m as cortos
Cola de prioridad [(5, 2), (6, 0), (7, 1)] [(6, 0), (7, 1)] [(7, 1)].
Trimestre 09I 226 / 464 Francisco Zaragoza (UAM Azcapotzalco) Grafos y sus aplicaciones Trimestre 09I 227 / 464 Francisco Zaragoza (UAM Azcapotzalco) Grafos y sus aplicaciones Trimestre 09I 228 / 464
Algoritmo de Prim
A 4 F B E 2 2 3 C G H 4 1 G 4 3 3 4 C G H 4 1 3 1 E 1 4 2 B 2 3 2 D F 2 D 3 3 4 3 F B 1 4 3 A 4
A 4 3 E 2 3 2 2 3 D
El algoritmo de Prim construye un arbol abarcador de costo m nimo usando la b usqueda por prioridad.
La prioridad de cada v ertice viene dada por el costo m nimo de las aristas que lo unan a los v ertices ya explorados.
Esto necesita una estructura de datos que pueda actualizar la prioridad. [(A, , 0)] [(E , A, 2), (B , A, 3), (D , A, 3), (F , A, 4)] [(D , E , 2), (C , E , 2), (B , A, 3), (F , A, 4)].
Trimestre 09I 229 / 464 Francisco Zaragoza (UAM Azcapotzalco) Grafos y sus aplicaciones
Algoritmo de Kruskal
3 3 E 2 3 2 2 D
El algoritmo de Kruskal construye un arbol abarcador m nimo con uni on y pertenencia. Al principio cada v ertice forma su propia componente conexa. Las aristas se ordenan crecientemente por costo y se consideran en ese orden. Si los dos v ertices de una arista est an en diferentes componentes conexas se hace la uni on y se agrega la arista al arbol abarcador, en caso contrario se ignora.
[(H , C , 1), (B , A, 3), (F , A, 4)] [(B , A, 3), (F , A, 4), (G , H , 4)] [(F , B , 1), (G , H , 4)].
Trimestre 09I
Trimestre 09I
234 / 464
A 3 3 2 2
4 3 2 E 2 2 F
FB, CH, AE, ED, EC, AD, AB, BC, DC, FA, GH, FG.
Contenido
Grafos con costos B usqueda por prioridad Arboles abarcadores de costo m nimo Caminos m as cortos
Caminos m as cortos
Algoritmo de Dijkstra
Si un grafo es conexo entonces todos sus v ertices est an conectadas por caminos.
El algoritmo de Dijkstra genera los caminos m as cortos desde un v ertice inicial a todos los dem as usando la b usqueda por prioridad. La prioridad de cada v ertice es el costo m nimo de un camino a el desde el v ertice inicial usando s olo los v ertices ya explorados. Al principio el v ertice inicial tiene prioridad 0 y todos los dem as tienen prioridad +. Cada que se explora un v ertice se actualizan las prioridades de sus vecinos no explorados.
Si a cada camino le asignamos un costo igual a la suma de los costos de las aristas que lo forman nos interesa encontrar un camino de costo m nimo o camino m as corto.
Si todos los costos son iguales a 1 entonces ya sabemos como resolver este problema.
4 (G , )
(H , )
4 (G , )
(C , ) (H , ) [(A, , 0)] [(E , A, 2), (B , A, 3), (D , A, 3), (F , A, 4)] [(B , A, 3), (D , A, 3), (C , E , 4), (F , A, 4)].
Trimestre 09I
241 / 464
Trimestre 09I
242 / 464
Trimestre 09I
243 / 464
(A, 0)
4 4 (D , 3) (F , 4) 2 1 2 3 1 3 4 (C , 4) 4 (G , ) 1 2 3 (E , 2) 3 2 (D , 3) (F , 4)
(F , 4) 2 4 (E , 2)
(B , 3)
(D , 3)
(F , 4)
(E , 2)
(B , 3)
(C , 4)
4 (G , )
(H , )
4 (G , )
[(B , A, 3), (D , A, 3), (C , E , 4), (F , A, 4)] [(D , A, 3), (C , E , 4), (F , A, 4)] [(C , E , 4), (F , A, 4)].
(A, 0)
(A, 0) 3 (D , 3)
5 3 2 (F , 5) (E , 2) 2
(F , ) 3 (C , )
(B , )
(D , ) (F , 5)
(B , 3)
(E , )
4 (G , )
(C , )
(H , )
4 (G , )
[(A, , 0)] [(E , A, 2), (B , A, 3), (D , A, 3), (F , A, 5)] [(B , A, 3), (D , A, 3), (C , E , 5), (F , A, 5)].
Observaciones de Dijkstra
(A, 0)
(F , 4) 3
(B , 3)
(D , 3)
(F , 4)
(E , 2)
(B , 3)
El algoritmo de Dijkstra construye un arbol de caminos m as cortos con ra z en el v ertice inicial. Este arbol no es u nico. El algoritmo de Dijkstra se ejecuta en tiempo (m + n) log n usando listas de adyacencia y en tiempo n2 usando matrices de adyacencia.
A veces queremos encontrar las longitudes (o costos) de los caminos ertices de un grafo. m as cortos entre todas las parejas de v Podemos hacerlo usando el algoritmo de Dijkstra n veces, una desde cada v ertice. Esto se ejecuta en tiempo n(m + n) log n usando listas de adyacencia y en tiempo n3 usando matrices de adyacencia. Hay una forma m as sencilla.
(C , 4)
(G , 8) 4
(H , 5)
(G , 8) 4
Algoritmo de Floyd
Implementaci on de Floyd
Suponga que los v ertices est an numerados del 1 al n y queremos responder la siguiente pregunta:
Se comienza con una matriz de adyacencia a con los costos de las aristas (o n umeros muy grandes donde no las haya).
Paso 0
Paso 1
Paso 2
Cu al es la longitud a(u , v , i ) del camino m as corto del v ertice u al v usando s olo v ertices intermedios con n umeros i ?
Porqu e?
for (i = 0; i < n; i++) for (u = 0; u < n; u++) for (v = 0; v < n; v++) { t = a[u][i] + a[i][v]; if (t < a[u][v]) a[u][v] = t; }
0 3 3 2 4 -
3 0 3 1 -
3 0 3 2 1
3 3 0 2 -
2 2 2 0 -
4 1 0 4 -
4 0 4
1 4 0
0 3 3 2 4 -
3 0 3 6 5 1 -
3 0 3 2 1
3 6 3 0 2 7 -
2 5 2 2 0 6 -
4 1 7 6 0 4 -
4 0 4
1 4 0
0 3 6 3 2 4 -
3 0 3 6 5 1 -
6 3 0 3 2 4 1
3 6 3 0 2 7 -
2 5 2 2 0 6 -
4 1 4 7 6 0 4 -
4 0 4
1 4 0
Trimestre 09I
253 / 464
Trimestre 09I
254 / 464
Trimestre 09I
255 / 464
Contenido
Paso 6
Paso 7
Paso 8
Part III
10
0 3 4 3 2 4 8 5
3 0 3 6 5 1 5 4
4 3 0 3 2 4 8 1
3 6 3 0 2 7 + 4
2 5 2 2 0 6 + 3
4 1 4 7 6 0 4 5
8 5 8 + + 4 0 4
5 4 1 4 3 5 4 0
0 3 4 3 2 4 8 5
3 0 3 6 5 1 5 4
4 3 0 3 2 4 8 1
3 6 3 0 2 7 + 4
2 5 2 2 0 6 + 3
4 1 4 7 6 0 4 5
8 5 8 + + 4 0 4
5 4 1 4 3 5 4 0
0 3 4 3 2 4 8 5
3 0 3 6 5 1 5 4
4 3 0 3 2 4 5 1
3 6 3 0 2 7 8 4
2 5 2 2 0 6 7 3
4 1 4 7 6 0 4 5
8 5 5 8 7 4 0 4
5 4 1 4 3 5 4 0
Arboles AVL
Arboles balanceados Arboles binarios de b usqueda Arboles AVL Arboles 2-3-4 Arboles rojinegros
Trimestre 09I
256 / 464
Arboles AVL
Trimestre 09I
257 / 464
Arboles AVL
Trimestre 09I
258 / 464
Q W E
E R
W F Q Q F G F G F G F G
Recordemos que un arbol binario de b usqueda es un arbol binario donde cada nodo tiene una clave. Q E R W
La clave de un nodo es mayor que la clave de su hijo izquierdo y es menor que la de su hijo derecho.
E Y I R
W Y A
E I R
W Y
H J
H J K
Insertando Q, W, E, R, Y, I, A Insertando A, D, F, G, H, J, K
Trimestre 09I 259 / 464 Francisco Zaragoza (UAM Azcapotzalco) Arboles AVL Trimestre 09I 260 / 464 Francisco Zaragoza (UAM Azcapotzalco) Arboles AVL Trimestre 09I 261 / 464
Arboles AVL
Contenido
+ 0 + 0 0 * + 0 0 0 + 0 0 0 + 0 0 Arboles que s y no son AVL
Trimestre 09I 262 / 464 Francisco Zaragoza (UAM Azcapotzalco) Arboles AVL Trimestre 09I 263 / 464 Francisco Zaragoza (UAM Azcapotzalco) Arboles AVL Trimestre 09I 264 / 464
0 Una soluci on al problema de creaci on de arboles binarios degenerados es la de reorganizar los nodos de un arbol conforme se van haciendo operaciones. 0 0 Los arboles AVL cumplen la propiedad de que las alturas de los dos sub arboles que comparten una ra z dieren a lo mucho en 1. 0 0 Estos arboles y sus operaciones fueron inventados por Adelson-Velsky y Landis. Arboles balanceados de tipo 1. -
10
Arboles balanceados Arboles binarios de b usqueda Arboles AVL Arboles 2-3-4 Arboles rojinegros
Arboles AVL
Contenido
Arboles 2-3-4
La b usqueda, inserci on y el borrado en arboles AVL inician de la misma forma que los arboles binarios de b usqueda.
10
Para entender mejor los arboles rojinegros, primero estudiaremos los arboles 2-3-4. Cada nodo de un arbol 2-3-4 puede tener una, dos o tres claves. Esto signica dos, tres o cuatro hijos, respectivamente. Un nodo con k claves dene k + 1 intervalos (es por eso que tiene k + 1 hijos). La b usqueda en estos arboles es muy parecida a la de los arboles binarios.
La diferencia es que al descubrir un desbalance se debe realizar una o m as rotaciones para recuperar el balance.
Arboles balanceados Arboles binarios de b usqueda Arboles AVL Arboles 2-3-4 Arboles rojinegros
Arboles AVL Trimestre 09I 265 / 464 Francisco Zaragoza (UAM Azcapotzalco)
Arboles AVL
Trimestre 09I
266 / 464
Arboles AVL
Trimestre 09I
267 / 464
Inserci on en un 4-nodo
M GL NR TZ
HQ
FMS
La inserci on es un poco m as complicada. Primero se hace una b usqueda (posiblemente infructuosa). El caso sencillo es cuando debemos insertar en un 2-nodo o en un 3-nodo: simplemente se transforma en un 3-nodo o en un 4-nodo. El problema es cuando debemos insertar en un 4-nodo.
Una primera opci on ser a insertar como hijo de ese 4-nodo. Pero resulta que una mejor opci on es dividir el 4-nodo en dos 2-nodos. Se pasa una de las claves al nodo padre. Se inserta la nueva clave en uno de los dos 2-nodos reci en creados.
AL
NZ
AG
IP
RZ
AE
Arboles AVL
Trimestre 09I
268 / 464
Arboles AVL
Trimestre 09I
269 / 464
Arboles AVL
Trimestre 09I
270 / 464
Casos especiales
E Qu e pasa si el padre del 4-nodo es un 4-nodo? LPT Esto garantiza que ning un 4-nodo tenga un 4-nodo como padre. DPV Qu e pasa si el 4-nodo es la ra z del arbol? En este caso simplemente se divide en tres 2-nodos y uno de ellos se vuelve la nueva ra z del arbol. L T Esto se puede evitar si durante la b usqueda se divide cada 4-nodo que se vea. Todos los caminos de la ra z a las hojas miden lo mismo. Los arboles 2-3-4 quedan balanceados sin mayor esfuerzo.
DH
DV
JOT
LPT
EO
DHP
Las implementaciones suelen ser lentas al tener que trabajar con diferentes tipos de nodos.
Arboles AVL Trimestre 09I 271 / 464 Francisco Zaragoza (UAM Azcapotzalco) Trimestre 09I 272 / 464 Francisco Zaragoza (UAM Azcapotzalco)
Arboles AVL
Arboles AVL
Trimestre 09I
273 / 464
Ejemplo de construcci on I
Ejemplo de construcci on II
QT Q E E W R UWY EI R UWY
QT
QW
EQW
QT
QT
RW
RTW
Inserci on de Q, W, E, R, T, Y Inserci on de U, I, O
Inserci on de P, A, S
Trimestre 09I 274 / 464 Francisco Zaragoza (UAM Azcapotzalco) Arboles AVL Trimestre 09I 275 / 464 Francisco Zaragoza (UAM Azcapotzalco) Arboles AVL Trimestre 09I 276 / 464
Arboles AVL
Contenido
Arboles rojinegros
Representaci on de nodos
M Curiosamente, los arboles 2-3-4 se pueden representar como arboles binarios con un bit adicional por liga. A este bit se le llama color y este puede ser rojo o negro. A estos arboles se les llama rojinegros. Algunas veces se asignan colores a los nodos, pero es lo mismo que asignarle colores a las ligas. H M Q
HQ
FMS
10
Arboles balanceados Arboles binarios de b usqueda Arboles AVL Arboles 2-3-4 Arboles rojinegros
Arboles AVL
Cambios de color
Observe que si se contraen las ligas rojas se obtiene un arbol 2-3-4. Cada una de las operaciones con los 4-nodos se puede traducir a las operaciones correspondientes en un arbol rojinegro. Estas operaciones se llaman cambios de color y rotaciones. Los cambios de color ocurren en los casos sencillos del arbol 2-3-4. Las rotaciones ocurren en los casos complicados del arbol 2-3-4.
Todos los caminos de la ra z a las hojas tienen el mismo n umero de ligas negras.
Arboles AVL Trimestre 09I 280 / 464 Francisco Zaragoza (UAM Azcapotzalco) Trimestre 09I 281 / 464 Francisco Zaragoza (UAM Azcapotzalco)
Arboles AVL
Arboles AVL
Trimestre 09I
282 / 464
Necesidad de rotaciones
Rotaciones simples
?
El problema se detecta cuando se encuentran dos ligas rojas consecutivas. Esto s olo pudo ocurrir porque el 3-nodo qued o orientado en la direcci on equivocada. Hay dos orientaciones para un 3-nodo.
?
Trimestre 09I 283 / 464 Francisco Zaragoza (UAM Azcapotzalco) Arboles AVL
Arboles AVL
Rotaciones dobles
Rotaciones rojinegras
Ejemplo de construcci on I
Q Q W E Q E W E R Q W E R T Q W Q W
Hay dos tipos de rotaciones simples (II y DD). Y dos tipos de rotaciones dobles (ID y DI). Todas ellas se pueden deducir de manera sencilla de las operaciones correspondientes en arboles 2-3-4.
Inserci on de Q, W, E, R, T
Trimestre 09I 286 / 464 Francisco Zaragoza (UAM Azcapotzalco) Arboles AVL Trimestre 09I 287 / 464 Francisco Zaragoza (UAM Azcapotzalco) Arboles AVL Trimestre 09I 288 / 464
Arboles AVL
Ejemplo de construcci on II
Q Q T R Q Q T I T O R U A Inserci on de P, A, S
Arboles AVL Trimestre 09I 290 / 464 Francisco Zaragoza (UAM Azcapotzalco) Arboles AVL Trimestre 09I 291 / 464
Ejemplo de construcci on IV
Q E W
E R E Y U W
Inserci on de T, Y, U
Trimestre 09I 289 / 464 Francisco Zaragoza (UAM Azcapotzalco)
Inserci on de I, O
Arboles AVL
Rotaciones AVL
b a a a h b h h h+1 h h+1 h h1
Rotaciones II y DD
Rotaciones ID y DI
c b
Recordemos que en un arbol AVL las alturas de los dos sub arboles de cada nodo dieren a lo mucho en 1.
h b
h1
h2
Para recuperar el balance se hace tiene que hacer uno de cuatro tipos de rotaciones.
h2
Rotaci on izquierda derecha con h = max{h1 , h2 } y h 1 min{h1 , h2 } (la rotaci on derecha izquierda es sim etrica)
Francisco Zaragoza (UAM Azcapotzalco) Arboles AVL Trimestre 09I 294 / 464
Arboles AVL
Contenido
Qu e es un ndice?
Part IV
11
Las u ltimas p aginas de la mayor a de los libros contienen un ndice. Tal ndice es una tabla que contiene una lista de temas (claves) y los n umeros de p agina (referencias) donde se pueden encontrar esos temas. Todos los ndices est an basados en los mismos dos conceptos b asicos: claves y referencias.
Indices
Indices
Trimestre 09I
295 / 464
Indices
Trimestre 09I
296 / 464
Indices
Trimestre 09I
297 / 464
El ndice de un libro provee de una manera r apida de encontrar un tema (en lugar de buscar secuencialmente por todo el libro). Los ndices funcionan de manera indirecta. Permiten imponer un orden en un archivo sin ordenar el archivo. Esto permite el uso de registros jos. Tambi en hace que agregar registros sea mucho m as r apido que si mantuvieramos el archivo ordenado.
Las palabras en un libro son como los registros jos (pinned). Considere el problema de buscar libros en la biblioteca.
Normalmente uno quiere poder localizarlos por autor, t tulo o tema. Una forma de lograr esto es con tres bibliotecas: una organizada por autor, otra por t tulo y la u ltima por tema. En la realidad, una biblioteca mantiene tres cat alogos: uno organizado por autor, otro por t tulo y el u ltimo por tema.
Si orden aramos alfab eticamente las palabras de un libro ser a muy f acil encontrarlas.
Dice dif cil el entender libro lo m as pero poco que ser a un.
Indices Trimestre 09I 298 / 464 Francisco Zaragoza (UAM Azcapotzalco) Trimestre 09I 299 / 464 Francisco Zaragoza (UAM Azcapotzalco)
Indices
Indices
Trimestre 09I
300 / 464
Indices m ultiples
Indices sencillos
Los tres cat alogos son en realidad tres ndices distintos. Primero estudiaremos los ndices sencillos. Estos se llaman as porque la estructura que los representa es un arreglo sencillo. M as adelante estudiaremos ndices con estructuras m as complejas, en particular con la estructura de un arbol.
Existen varios tipos de ndices dependiendo de la estructura de datos que se utilice para representarlos.
La clave primaria se form o concatenando los dos primeros campos de los registros
De este modo podemos tener distintas formas de buscar registros a trav es del uso de ndices m ultiples.
Claves ANG3795 COL31809 COL38358 DG139201 DG18807 FF245 LON2312 MER75016 RCA2626 WAR23699
Registros LON|2312|Romeo and Juliet|Prokofiev|Maazel RCA|2626|Quartet in C Sharp Minor|Beethoven|Julliard WAR|23699|Touchstone|Corea|Corea ANG|3795|Symphony No. 9|Beethoven|Giulini COL|38358|Nebraska|Springsteen|Springsteen DG|18807|Symphony No. 9|Beethoven|Karajan MER|75016|Coq dOr Suite|Rimsky-Korsakov|Leinsdof COL|31809|Symphony No. 9|Dvorak|Bernstein DG|139201|Violin Concerto|Beethoven|Ferras FF|245|Good News|Sweet Honey in the Rock|Sweet Honey
Indices
Trimestre 09I
302 / 464
Indices
Trimestre 09I
303 / 464
En este caso no podemos ordenar el archivo y usar b usqueda binaria en el. Porqu e?
El ndice est a ordenado por clave primaria mientras que el archivo est a ordenada por orden de llegada. Para poder hacer b usqueda binaria el ndice debe estar almacenado en la memoria. Una vez que se encuentra la clave primaria en el ndice basta hacer una b usqueda en el disco para recuperar el registro. Para poder usar el ndice varias veces, este se debe volver persistente.
Creaci on de los archivos de datos y de ndice. Carga del ndice a la memoria. Escritura del ndice al disco. Agregar registros al archivo de datos. Eliminar registros del archivo de datos. Actualizar registros en el archivo de datos. Actualizaci on del ndice.
En nuestro caso, el ndice es un arreglo que contiene las claves primarias en orden junto con las referencias a los registros.
Indices
Trimestre 09I
304 / 464
Indices
Trimestre 09I
305 / 464
Indices
Trimestre 09I
306 / 464
Actualizaci on de registros
Qu e ocurre si no hacemos o no se completa la escritura del ndice al disco? Agregar o eliminar registros es muy sencillo. Recordemos que se debe actualizar el ndice. Hay dos tipos de actualizaci on de registros: Si la actualizaci on cambia el valor del campo de clave se necesita una reorganizaci on del ndice (y posiblemente de los datos). Si la actualizaci on no cambia el valor del campo de clave no se necesita reorganizar el ndice (pero posiblemente s los datos).
Qu e pasa si el ndice es tan grande que no se puede almacenar en memoria? En este caso debemos pensar en otras organizaciones del ndice. Una opci on es usar una estructura de arbol (por ejemplo los arboles B y B + que veremos m as adelante). Otra opci on es usar alguna t ecnica de dispersi on (como las que estudiaremos al nal del curso).
Es muy importante que el programa contenga al menos las siguientes dos previsiones:
Se debe poder saber que el ndice no es correcto (mediante una bandera de estado).
Indices Trimestre 09I 307 / 464 Francisco Zaragoza (UAM Azcapotzalco) Trimestre 09I 308 / 464 Francisco Zaragoza (UAM Azcapotzalco)
Indices
Indices
Trimestre 09I
309 / 464
Contenido
11
Es dif cil pensar que haremos b usquedas usando las claves primarias. Casi siempre haremos b usquedas usando combinaciones de claves secundarias. C omo lograr encontrar un dato usando una clave secundaria? Podr amos mantener un segundo ndice ordenado por la clave secundaria y con una referencia al registro que la contiene.
El primer problema que surge es que las claves secundarias no son u nicas. Por lo tanto puede haber varios registros distintos que la contengan. Esto lo resolveremos ordenando las diferentes apariciones de una clave secundaria seg un su referencia.
Indices
Trimestre 09I
311 / 464
Indices
Trimestre 09I
312 / 464
Uso de referencias
Dijimos que podr amos pensar en usar como referencia el lugar de inicio del registro correspondiente.
La ventaja de esto es que si un registro cambia de lugar s olo se debe actualizar el ndice primario.
Primaria ANG3795 COL31809 COL38358 DG139201 DG18807 FF245 LON2312 MER75016 RCA2626 WAR23699
Secundaria BEETHOVEN BEETHOVEN BEETHOVEN BEETHOVEN COREA DVORAK PROKOFIEV RIMSKY-KORS SPRINGSTEEN SWEET HONEY
Primaria ANG3795 DG139201 DG18807 RCA2626 WAR23699 COL31809 LON2312 MER75016 COL38358 FF245
Secundaria COQ DOR SU GOOD NEWS NEBRASKA QUARTET IN ROMEO AND J SYMPHONY NO SYMPHONY NO SYMPHONY NO TOUCHSTONE VIOLIN CONC
Primaria MER75016 FF245 COL38358 RCA2626 LON2312 ANG3795 COL31809 DG18807 WAR23699 DG139201
Indices
Trimestre 09I
313 / 464
Indices
Trimestre 09I
314 / 464
Indices
Trimestre 09I
315 / 464
Mejoras a la estructura
Es sencillo implementar b usquedas con uniones o intersecciones (OR y AND). Una posibilidad es dejar que cada clave secundaria se reera a un vector de tama no jo de claves primarias. Secundaria BEETHOVEN COREA ... ANG3795 DG139201 DG18807 WAR23699 RCA2626 Primarias
Observe que es poco eciente insertar varias veces la misma clave secundaria. Otra posibilidad es la de separar el ndice secundario en dos archivos. Uno conteniendo s olo las claves secundarias y una referencia a la primera clave primaria en el segundo archivo. El segundo archivo tendr a la estructura de una lista ligada ordenada.
Primero encontramos la primera entrada de cada ndice secundario que contiene las palabras de nuestra b usqueda.
Notemos que a cada paso es f acil saber si esa entrada nos interesa o no ya que vienen ordenadas por clave primaria.
Indices Trimestre 09I 316 / 464 Francisco Zaragoza (UAM Azcapotzalco) Trimestre 09I 317 / 464 Francisco Zaragoza (UAM Azcapotzalco)
Indices
Indices
Trimestre 09I
318 / 464
Ventajas y desventajas
Indices selectivos
Secundaria El primer archivo s olo debe ordenarse cuando se agregue una nueva clave secundaria. El segundo archivo no debe reordenarse y se puede hacer con registros de tama no jo. El segundo archivo no tiene la propiedad de localidad y se requiere hacer b usquedas en el disco para moverse en la lista ordenada.
Ref
# Primaria Sig
Estos son ndices que no contienen entradas para todos los registros de un archivo. Los ndices selectivos son u tiles cuando el contenido de un archivo se puede dividir natural y l ogicamente en diversas categor as.
0 6 1 8 5 9 4
0 1 2 3 4 5 6 7 8 9
ANG3795 COL31809 DG18807 DG139201 FF245 MER75016 WAR23699 RCA2626 LON2312 COL38358
3 -1 7 2 -1 -1 -1 -1 -1 -1
Indices
Trimestre 09I
320 / 464
Indices
Trimestre 09I
321 / 464
Contenido
Atado (binding)
11
En qu e momento queda atada una clave a la direcci on f sica del registro asociado? En nuestro ndice primario en el momento de construcci on mientras que en nuestro ndice secundario en el momento de uso. El primer momento resulta en un acceso m as r apido pero tiene un costo de reorganizaci on muy alto. El segundo momento resulta en un acceso m as lento pero m as seguro.
El atado tard o permite que los ndices secundarios contengan errores sin que esto sea un gran problema. Al nal es mejor hacer los cambios importantes en un solo lugar (el ndice primario) que en varios. Hay al menos una aplicaci on del atado pronto: en sistemas de archivos grabados en medios no reescribibles (nunca cambian).
Indices
Trimestre 09I
322 / 464
Indices
Trimestre 09I
323 / 464
Indices
Trimestre 09I
324 / 464
Contenido
Operaciones cosecuenciales
Part V
12
Ordenamiento externo
Mezcla o uni on. Apareamiento o intersecci on.
Operaciones cosecuenciales Procesos cosecuenciales Aplicaci on de procesos cosecuenciales Ordenamiento interno revisitado Ordenamiento externo en discos Ordenamiento externo en cintas Se requiere poner atenci on a varios detalles. Que son sencillos bajo ciertas suposiciones.
Estas son operaciones que consisten en el procesamiento coordinado de dos o m as listas secuenciales para producir una sola lista de salida. Algunos ejemplos de estas operaciones:
Ordenamiento externo
Trimestre 09I
325 / 464
Ordenamiento externo
Trimestre 09I
326 / 464
Ordenamiento externo
Trimestre 09I
327 / 464
Detalles
Suposiciones
Contenido
Inicializaci on: acomodar las cosas de modo que podamos comenzar. Se desean procesar dos o m as archivos de entrada en forma paralela para producir uno o m as archivos de salida.
12
Obtenci on y acceso del siguiente elemento de la lista: se requiere de un m etodo sencillo. Cada archivo est a ordenado por una o m as claves y todos los archivos est an ordenados de la misma forma. De ser necesario, deben existir dos valores especiales (centinelas) uno menor y otro mayor que todas las claves posibles. Los registros se deben procesar en el orden l ogico (no f sico). Para cada archivo debe haber un u nico registro actual y este es el registro que se debe procesar. Los registros s olo se pueden manipular en memoria interna.
Sincronizaci on: debemos asegurar que estamos procesando los elementos en las listas en el orden apropiado de modo que no dejemos de considerar a ninguno.
Operaciones cosecuenciales Procesos cosecuenciales Aplicaci on de procesos cosecuenciales Ordenamiento interno revisitado Ordenamiento externo en discos Ordenamiento externo en cintas
Reconocimiento de errores: si ocurre alg un error en los datos (por ejemplo datos duplicados o fuera de orden) queremos poder detectarlo y tomar alguna acci on.
Ordenamiento externo
Trimestre 09I
328 / 464
Ordenamiento externo
Trimestre 09I
329 / 464
Ordenamiento externo
Trimestre 09I
330 / 464
Mezcla de k v as
A D C B Q D C G C D C B A A
Contenido
Considere el problema de mezclar k listas ordenadas de entrada en una sola lista ordenada de salida.
La forma m as sencilla es a trav es de un ciclo que revise todas las listas para averiguar cu al es el siguiente elemento a procesar. Z X E R V T Q W S D C F G Y
Q Z X E R V T Y A W S D C F G B
Z X E R V T Y
Q W S D C F G B
12
Operaciones cosecuenciales Procesos cosecuenciales Aplicaci on de procesos cosecuenciales Ordenamiento interno revisitado Ordenamiento externo en discos Ordenamiento externo en cintas Q Z W X S E D R V F T G Y
Ordenamiento externo
Ordenamiento interno
Ahorrando tiempo
Si los datos a ordenar caben en memoria, la forma m as simple de ordenarlos consta de tres pasos: Si hubiera dos discos la lectura y la escritura se podr an hacer en paralelo. La clave es el uso de buers m ultiples. Si s olo hubiera un disco se podr a empalmar el ordenamiento con la lectura y escritura. La idea es usar ordenamiento por mont culo.
En la primera etapa se construye el mont culo al mismo tiempo que se leen los datos. En la segunda etapa vamos ordenando los datos al mismo tiempo que los escribimos. En la primera etapa se lee un buer mientras el anterior se agrega al mont culo. En la segunda etapa se escribe un buer mientras el siguiente se borra del mont culo.
De esta forma parece que el tiempo necesario para estas tres operaciones es la suma de los tres tiempos de cada paso.
Ordenamiento externo
Trimestre 09I
334 / 464
Ordenamiento externo
Trimestre 09I
335 / 464
Ordenamiento externo
Trimestre 09I
336 / 464
Contenido
Q A Z W X S E D
A D E Q X Z S W
Z W X S E D
12
A Q
E Q S W X Z A D
Aun no tenemos un algoritmo para ordenar archivos que no quepan en memoria. Sin embargo, el algoritmo de mezcla de k v as es un buen principio. Recordemos que existen algoritmos que pueden ordenar un vector sin necesitar almacenamiento adicional. Un ejemplo eciente es el de ordenamiento por mont culo.
X S E D
A Q Z W
S W X Z A D E Q
E D
Operaciones cosecuenciales Procesos cosecuenciales Aplicaci on de procesos cosecuenciales Ordenamiento interno revisitado Ordenamiento externo en discos Ordenamiento externo en cintas
A Q S W X Z
X Z A D E Q SW
A D E Q X Z S W
A D E Q SW X Z
Ordenamiento externo
Corridas
Ejemplo de corridas
QA Z WS X E D C R F V T G B Y H N U J M I K O 1 A Q SWX Z 2 3 C D E F R V 5 5 5 B G H N T Y I J KM O U 5 A B C D E F G H I J K MN O Q R S T U VWX Y Z Cuatro corridas y mezcla de 4 v as
Trimestre 09I 340 / 464 Francisco Zaragoza (UAM Azcapotzalco) Ordenamiento externo Trimestre 09I 341 / 464
Caracter sticas
Ordenar archivos de cualquier tama no. 4 La lectura de la entrada es secuencial. La lectura de cada corrida es secuencial. La escritura de la salida es secuencial. B usquedas s olo al cambiar de corrida. Si se usan mont culos se puede traslapar la entrada y salida con el procesamiento. Tambi en funciona con cintas.
Luego leer una segunda parte, ordenarla y grabarla en otro archivo, etc.
Una vez que el archivo original se ha ordenado parcialmente en varias corridas podemos usar el algoritmo de mezcla de k v as para producir un solo archivo ordenado.
Ordenamiento externo
Ordenamiento externo
Trimestre 09I
342 / 464
Se tarda m as de lo deseado al cambiar de corrida pues se requiere una b usqueda. Agregar m as memoria o discos (que normalmente no se puede hacer). Realizar la mezcla en m as de un paso. Incrementar de alguna forma el tama no inicial de las corridas (usando reemplazo directo).
M M /k
Esto se puede minimizar leyendo en un buer tanto como se pueda de cada corrida. Finalmente realizamos una mezcla de estas k1 corridas.
Suponga que tenemos k = k1 k2 corridas de tama no M cada una. Entonces podemos realizar k1 veces el proceso de mezclar k2 corridas para obtener k1 corridas de tama no k2 M .
Sea M la memoria disponible. = k b usquedas Encontrar otras formas de traslapar la entrada y salida con el proceso.
Ordenamiento externo
Trimestre 09I
343 / 464
Ordenamiento externo
Trimestre 09I
344 / 464
Ordenamiento externo
Trimestre 09I
345 / 464
Observaciones
QA Z WS X E D C R F V T G B Y H N U J M I K O I M J U Cada corrida de la segunda etapa mide k2 M y tendr a un buer de k2 M usquedas. tama no M /k1 por lo que har a M /k1 = k1 k2 b Entre las dos etapas se har an k1 k2 (k1 + k2 ) b usquedas. Esto es menos de k 2 b usquedas si k1 , k2 > 1. K O
2 b La primera etapa har a k 1 k2 usquedas.
A Q
S X
C R
G T
H N
WZ
D E
F V
B Y
Cada registro se lee dos veces (pero esto se hace de forma secuencial). Cu al es el mejor valor para k1 y k2 ? Es f acil ver que deben ser iguales a k . S olo es posible si k es un cuadrado perfecto. Qu e hacer si k no es un cuadrado perfecto? Se puede hacer un an alisis similar para mezcla en m etapas.
A D E Q S WX Z
B C F G R T V Y
H I J KM N O U
A B C D E F G H I J KM N O Q R S T U VWX Y Z
Con k = k1 k2 = 3 4 = 12 corridas
Trimestre 09I 346 / 464 Francisco Zaragoza (UAM Azcapotzalco) Ordenamiento externo Trimestre 09I 347 / 464 Francisco Zaragoza (UAM Azcapotzalco) Ordenamiento externo Trimestre 09I 348 / 464
Ordenamiento externo
Contenido
Ordenamiento en cintas
Reemplazo directo
12
Los m etodos para ordenar en cintas son parecidos a los m etodos para ordenar en discos. El archivo original se distribuye en corridas ordenadas y luego se mezclan las corridas para construir el archivo completo. Una diferencia fundamental es que el m etodo de ordenamiento usado para crear las corridas puede ser el reemplazo directo.
El reemplazo directo tiende a crear corridas m as largas que las que se pueden crear con ordenamiento por mont culo. El reemplazo directo no es muy bueno en discos porque incrementa el n umero de b usquedas. En cintas eso no es problema porque siempre suponemos que tenemos dos o m as de ellas. Supondremos que ya hemos creado las corridas.
Operaciones cosecuenciales Procesos cosecuenciales Aplicaci on de procesos cosecuenciales Ordenamiento interno revisitado Ordenamiento externo en discos Ordenamiento externo en cintas
Ordenamiento externo
Trimestre 09I
349 / 464
Ordenamiento externo
Trimestre 09I
350 / 464
Ordenamiento externo
Trimestre 09I
351 / 464
N umero de fases
T1 0 2 0-3 0-9 0-7 En el ejemplo esto lo hicimos cuatro veces. Si hay k corridas se requieren log2 k fases. 89 Fase 2 Fase 3 Fase 4 4-7 01 23 Fase 0 Diez corridas y cuatro fases 67 Fase 1 45 89 89 3 5 7 9 4 6 8 T2 1 T3 T4
Este m etodo requiere que las corridas est en distribuidas en dos cintas.
A cada paso de la mezcla (excepto el u ltimo) la salida estar a distribuida en dos cintas.
Debido a que no hay b usquedas, el tiempo se mide en t erminos de cu antas veces leemos y escribimos los datos, as como cu antas veces rebobinamos las cintas.
Ordenamiento externo
Trimestre 09I
352 / 464
Ordenamiento externo
Trimestre 09I
353 / 464
Ordenamiento externo
Trimestre 09I
354 / 464
Mezcla balanceada de n v as
Ejemplo de mezcla de n v as
Este m etodo es similar al anterior, excepto que se tienen n cintas de entrada y n cintas de salida en cada fase. T3 T4
T2 1 3
La idea es tratar de evitar al m aximo la simple copia de datos. Esto lograr a tambi en evitar rebobinar las cintas. Existen dos m etodos que usan esta idea llamados mezcla polif asica y en cascada.
Ordenamiento externo
Trimestre 09I
355 / 464
Ordenamiento externo
Trimestre 09I
356 / 464
Ordenamiento externo
Trimestre 09I
357 / 464
Caracter sticas
Preguntas
T1 0 3 6 7 4 5 T2 1 T3 2 T4
6 7
8 01267 012
9 3458 01267
La distribuci on inicial de las corridas es tal que al menos la primera mezcla es de n 1 v as si se tienen n cintas.
C omo se debe escoger la distribuci on inicial de las corridas que nos lleve a un patr on de mezcla eciente? Existir a alg un algoritmo que encuentre estos patrones as como las distribuciones iniciales? Fase 0 345 Fase 1 345 Fase 2 Fase 3 0-9 Fase 4 Si tenemos k corridas y n cintas existir a alguna manera de calcular la forma optima de mezclar de modo que se pueda comparar nuestro algoritmo contra lo optimo?
La distribuci on de las corridas es tal que las cintas suelen contener un n umero distinto de corridas en cada fase.
Ordenamiento externo
Trimestre 09I
358 / 464
Ordenamiento externo
Trimestre 09I
359 / 464
Ordenamiento externo
Trimestre 09I
360 / 464
Contenido
13
Part VI
Qu e hacer si un ndice es demasiado grande como para caber en memoria? Es obvio que parte del ndice deber a estar en el disco y, por lo tanto, el ndice ser a lento. Si queremos resolver este problema:
1 2
Arboles B y B+
Arboles B Indexaci on con arboles binarios Arboles binarios paginados Indexaci on multinivel Operaciones en arboles B Propiedades de un arbol B Borrado y otros detalles en arboles B Arboles B Arboles B+
La b usqueda en el ndice debe ser m as r apida que la b usqueda binaria. Insertar y borrar una clave debe ser tan r apido como la b usqueda.
14
Arboles B y B+ Trimestre 09I 361 / 464 Francisco Zaragoza (UAM Azcapotzalco) Trimestre 09I 362 / 464 Francisco Zaragoza (UAM Azcapotzalco)
Arboles B y B+
Arboles B y B+
Trimestre 09I
363 / 464
Contenido
13
El uso del disco es demasiado ineciente. Cada lectura de un nodo puede producir una b usqueda en el disco. La lectura s olo trae tres cosas u tiles: la clave actual y las direcciones de los sub arboles izquierdo y derecho. Como una lectura del disco lee al menos un sector es muy importante que en ese sector almacenemos tanta informaci on u til como sea posible.
14
Un arbol binario de b usqueda no ser a suciente pues su estructura puede degenerar en una lista.
Los arboles balanceados AVL, rojinegros y 2-3-4 no tienen este problema, pero no resuelven la primera parte.
Arboles B Indexaci on con arboles binarios Arboles binarios paginados Indexaci on multinivel Operaciones en arboles B Propiedades de un arbol B Borrado y otros detalles en arboles B Arboles B Arboles B+
Arboles B y B+
Trimestre 09I
365 / 464
Arboles B y B+
Trimestre 09I
366 / 464
Los arboles binarios paginados intentan resolver esta situaci on colocando tantos nodos adyacentes de un arbol binario como sea posible dentro de un sector.
Si agregaramos otros dos niveles de sectores podr amos encontrar cualquiera de 4095 nodos con s olo 4 b usquedas. Uno esperar a que cupieran m as de 7 nodos en un sector. Por ejemplo, si en cada lectura del disco podemos leer 511 nodos entonces podemos encontrar cualquiera de 134217727 claves con s olo 3 lecturas. Este es el desempe no que buscamos! 63 nodos en 9 sectores
Por ejemplo, si se pueden escribir 7 nodos en un sector entonces ser a posible escribir todos los nodos de un arbol balanceado con 63 nodos en 9 sectores.
La b usqueda de cualquier nodo s olo requerir a 2 lecturas del disco (en vez de 6).
Arboles B y B+
Trimestre 09I
367 / 464
Arboles B y B+
Trimestre 09I
368 / 464
Arboles B y B+
Trimestre 09I
369 / 464
Problemas
Contenido
13
Si podemos leer k nodos en una lectura del disco entonces podremos encontrar cualquiera de n claves en un m aximo de logk +1 (n + 1) lecturas de disco. C omo aseguramos que las claves en el sector ra z distribuyen de forma adecuada a las dem as claves? C omo evitamos que en un mismo sector queden claves que no distribuyen bien a las claves debajo de ellos? C omo garantizamos que cada sector contenga al menos un n umero m nimo de claves?
14
Aun puede ser que nuestro arbol binario quede desbalanceado, por lo que la b usqueda se puede volver secuencial. Arboles B+
Arboles B Indexaci on con arboles binarios Arboles binarios paginados Indexaci on multinivel Operaciones en arboles B Propiedades de un arbol B Borrado y otros detalles en arboles B Arboles B
Arboles B y B+ Trimestre 09I 370 / 464 Francisco Zaragoza (UAM Azcapotzalco) Trimestre 09I 371 / 464 Francisco Zaragoza (UAM Azcapotzalco)
Arboles B y B+
Arboles B y B+
Trimestre 09I
372 / 464
Arboles B
13
Los arboles B resuelven el problema de la inserci on y borrado lineal. Se han vuelto la forma est andar de representar un ndice. La soluci on requiere de dos ideas:
No se requiere que los registros del ndice est en llenos. Las claves que van a un registro lleno no se env an a otro registro, sino que este se divide en dos registros llenos a la mitad.
Esto nos puede proveer de la capacidad de encontrar cualquiera de una gran cantidad de registros con pocas lecturas del disco.
Sin embargo, esto nos lleva a la posibilidad de requerir tiempo lineal para la inserci on de una clave.
Arboles B Indexaci on con arboles binarios Arboles binarios paginados Indexaci on multinivel Operaciones en arboles B Propiedades de un arbol B Borrado y otros detalles en arboles B Arboles B Arboles B+
Arboles B y B+
Trimestre 09I
374 / 464
Arboles B y B+
Trimestre 09I
375 / 464
Inserci on en un arbol B
Cada nodo de un arbol B es un registro del ndice y puede contener hasta un n umero m aximo de claves.
Se busca el registro donde debe ir la clave. Si se introduce una clave en un registro que no est a lleno s olo se actualiza ese registro. A menos que la nueva clave resulte ser la m as grande del registro. En este caso se deben actualizar tambi en los niveles superiores del arbol. Esto tiene un costo acotado por la altura del arbol.
En este caso el registro se divide en dos, cada parte con la mitad de las claves. Como se ha creado un nodo su clave m as grande se debe insertar en el nodo superior. A esto se le llama la promoci on de una clave. Esto puede causar que otros nodos se subdividan. Si se subdivide la ra z se agrega un nuevo nivel al arbol. El costo sigue acotado por la altura del arbol.
Arboles B y B+
Trimestre 09I
376 / 464
Arboles B y B+
Trimestre 09I
377 / 464
Arboles B y B+
Trimestre 09I
378 / 464
Q A Q S W X Z Q Z D Q Z A D E Q S W X Z S W X Z A D E Q S W X Z
A Q Z
A QWZ
Q Z
A Q
Arboles B y B+
D Q W Z
D Q X Z A C D X Z A C D D Q W Z D Q E F Q R S Q Z E F Q R S W
SWZ
A C D
E Q
S W
VW
X Z
D Q W Z
E Q
R S W
A C D
E F Q
R S V W
X Z A C D
SWZ
E F Q
T VW
X Z
Arboles B y B+
Trimestre 09I
384 / 464
Contenido
Propiedades de un arbol B
13
Cada registro ndice tiene un m aximo de m hijos (m es el orden). Cada registro ndice, excepto por la ra z y las hojas, tiene al menos m/2 hijos. La ra z tiene cero o al menos dos hijos. Todas las hojas aparecen en el mismo nivel. El nivel de las hojas forma un ndice completo y ordenado.
Note que el nivel d del arbol tiene al menos 2m/2d 1 nodos. Si n 2m/2d 1 y d es la altura del arbol entonces d 1 + logm/2 (n/2).
Arboles B Indexaci on con arboles binarios Arboles binarios paginados Indexaci on multinivel Operaciones en arboles B Propiedades de un arbol B Borrado y otros detalles en arboles B Arboles B
14
Arboles B+
Arboles B y B+
Trimestre 09I
385 / 464
Arboles B y B+
Trimestre 09I
386 / 464
Arboles B y B+
Trimestre 09I
387 / 464
Contenido
Borrado en arboles B
13
Debemos buscar una forma de borrar claves que mantenga todas las propiedades de un arbol B mencionadas anteriormente. Es obvio que esas reglas van a depender de cu antas claves haya en el nodo del que se quiera borrar. Tambi en van a depender de cu al es la posici on de la clave que se borra.
Se desea borrar la clave C del nodo N . Si N tiene m as claves que el n umero m nimo y C no es la clave m as grande de N , entonces simplemente se borra C . Si N tiene m as claves que el n umero m nimo pero C es la clave m as grande de N , entonces se borra C y se modican los niveles superiores del ndice para reejar la nueva clave m as grande en N .
Arboles B Indexaci on con arboles binarios Arboles binarios paginados Indexaci on multinivel Operaciones en arboles B Propiedades de un arbol B Borrado y otros detalles en arboles B Arboles B
14
Arboles B+
Arboles B y B+ Trimestre 09I 388 / 464 Francisco Zaragoza (UAM Azcapotzalco) Trimestre 09I 389 / 464 Francisco Zaragoza (UAM Azcapotzalco)
Arboles B y B+
Arboles B y B+
Trimestre 09I
390 / 464
D Q Z
A D
E Q
S W X Z
A D
E Q
S W X Z
Suponga que N tiene exactamente el n umero m nimo de claves y uno de los hermanos de N tiene pocas claves. Entonces se mezcla a N con ese hermano y se borra una clave del nodo padre de N . Qu e quiere decir pocas claves?
D Q Z
D Q X
A D
E Q
S W Z
A D
E Q
S W X
Borrado de X
Trimestre 09I 391 / 464 Francisco Zaragoza (UAM Azcapotzalco) Arboles B y B+
Borrado de Z
Trimestre 09I 392 / 464 Francisco Zaragoza (UAM Azcapotzalco) Arboles B y B+ Trimestre 09I 393 / 464
Arboles B y B+
D Q Z
A D
E Q
S W X Z
Suponga que N tiene exactamente el n umero m nimo de claves y uno de los hermanos de N tiene claves extras.
A D
E Q
S W X Z
E Z
Entonces se mueven algunas de las claves del hermano a N y se modican los niveles superiores del ndice para reejar las claves m as grandes de los nodos afectados. Qu e quiere decir claves extras? A D
D S Z
A D E
S W X Z
W X Z
Borrado de Q
Trimestre 09I 394 / 464 Francisco Zaragoza (UAM Azcapotzalco) Arboles B y B+ Trimestre 09I 395 / 464
Borrado de Q
Francisco Zaragoza (UAM Azcapotzalco) Arboles B y B+ Trimestre 09I 396 / 464
Arboles B y B+
Casos especiales
F Z
Ejemplo de borrado de la ra z
D F Q Z C D A Q F X W Z A W Z E F R S T VW X Z Z A W Z
SWZ
Si la ra z termina con s olo una clave y un hijo, esta se puede eliminar y su u nico hijo se vuelve la nueva ra z.
Cuando este sea el caso, se puede aplicar cualquiera de las dos reglas.
E F
R S
T VWX
Arboles B y B+
Arboles B y B+
Trimestre 09I
399 / 464
Contenido
F Z
13
D F Uno podr a imaginar usar la redistribuci on al insertar una clave. X Z Como consecuencia mejorar a el uso del espacio en el arbol B . Algunos estudios emp ricos sugieren redistribuir a menos que ambos hermanos del nodo est en llenos.
14
C D
E F
R S
T VW
F X
Arboles B Indexaci on con arboles binarios Arboles binarios paginados Indexaci on multinivel Operaciones en arboles B Propiedades de un arbol B Borrado y otros detalles en arboles B Arboles B Arboles B+
D F
S V X
C D
E F
R S
T V
WX
Arboles B y B+
Arboles B
Observaciones
Knuth sugiri o una modicaci on de los arboles B basada en la regla de redistribuir cuando se pueda.
Cada nodo tiene un m aximo de m hijos. Cada nodo (excepto la ra z) tiene al menos 2m31 hijos. La ra z tiene al menos dos hijos (a menos que sea hoja). Todas las hojas aparecen al mismo nivel.
Los arboles B tienen algoritmos un poco m as complicados que los arboles B por el trato especial a la ra z (que no tiene hermanos). Existen otras estrategias para disminuir el n umero de accesos al disco. Por ejemplo, los arboles B virtuales mantienen un buer de nodos del arbol B . Como de costumbre, la eciencia de este mecanismo depender a de la estrategia de reutilizaci on de buers (LRU, etc.).
La idea es redistribuir las claves de dos hermanos en tres (uno de ellos nuevo) cuando no se pueda redistribuir.
B .
Arboles B y B+
Trimestre 09I
403 / 464
Arboles B y B+
Trimestre 09I
404 / 464
Arboles B y B+
Trimestre 09I
405 / 464
Contenido
Conjuntos secuenciales
13
Arboles B Hemos visto c omo estructurar un archivo para realizar operaciones secuenciales o para realizar b usquedas con ndices. Sin embargo, nuestras soluciones no son capaces de resolver ecientemente el otro tipo de acceso. Existen muchos casos reales en los que se necesitan los dos tipos de acceso sobre los mismos archivos: sistemas de registro de estudiantes, de pago de servicios, etc. A este conjunto lo llamaremos secuencial.
14
Arboles B+ Conjuntos secuenciales y bloques Agregar un ndice al conjunto secuencial Separadores Operaciones con arboles B +
Ataquemos primero el problema de mantener un conjunto de registros en orden f sico por clave mientras se agregan o eliminan registros.
Arboles B y B+ Trimestre 09I 406 / 464 Francisco Zaragoza (UAM Azcapotzalco) Trimestre 09I 407 / 464 Francisco Zaragoza (UAM Azcapotzalco)
Arboles B y B+
Arboles B y B+
Trimestre 09I
408 / 464
Bloques
Lista de bloques
Una forma de localizar las modicaciones a un archivo que contiene varios conjuntos secuenciales es la de grabar cada uno de ellos en un bloque. Insertar o borrar registros de esta estructura se hace de forma similar a como se hace en un arbol B (excepto que esta es una lista). La inserci on puede causar sobrecupo. El borrado puede dejar un bloque muy vac o.
Como los bloques l ogicamente consecutivos no son necesariamente f sicamente consecutivos tambi en contendr an apuntadores a sus bloques adyacentes.
A B C D
I J K L
E F G H
MN O P
Debido a que podemos leer y escribir bloques en una sola operaci on, se volver an nuestra unidad de entrada y salida.
Una vez que se lee un bloque, todos los registros contenidos en el est an en memoria, donde se les puede modicar r apidamente.
Arboles B y B+
Trimestre 09I
410 / 464
Arboles B y B+
Trimestre 09I
411 / 464
Observaciones
Contenido
13
Arboles B Podemos notar que cada bloque contiene un rango de las claves. Si podemos separar esos rangos entonces podemos saber d onde debiera estar una clave dada. Por ejemplo, podemos usar la clave m as grande en cada bloque para identicar al bloque completo de un ndice.
Esta estructura nos permite mantener los registros ordenados sin la necesidad de reordenar todo el archivo. Esto no es gratuito:
14
Nuestro nuevo archivo usa m as espacio que si todos los registros estuvieran ordenados. El orden de los registros no sigue una secuencia f sica.
El tama no del bloque es crucial: no debe ser ni muy grande ni muy peque no.
Arboles B+ Conjuntos secuenciales y bloques Agregar un ndice al conjunto secuencial Separadores Operaciones con arboles B +
Arboles B y B+
Trimestre 09I
412 / 464
Arboles B y B+
Trimestre 09I
413 / 464
Arboles B y B+
Trimestre 09I
414 / 464
Ventajas y desventajas
H P DH
14
L P
13
Arboles B
Por otro lado, notemos que las inserciones y los borrados pueden requerir modicar el ndice de forma secuencial, lo que puede ser demasiado caro. A B C D MN O P I J K L E F G H
Esto, junto con la posibilidad de que el ndice no quepa en memoria, nos lleva a pensar en una estructura de tipo arbol para el ndice.
Arboles B+ Conjuntos secuenciales y bloques Agregar un ndice al conjunto secuencial Separadores Operaciones con arboles B +
Arboles B y B+
Separadores m as cortos
Observe que el ndice s olo nos sirve para llegar al bloque correcto. Observe que los separadores m as cortos no son necesariamente u nicos, pero cualquiera con esa propiedad nos podr a guiar al tomar decisiones. Ejemplo: abajo y abeja. A un arbol B de separadores m as cortos junto con el conjunto de secuencias se le llama un arbol B + de prejos simples.
ABAL ABEL
ABONABRI
Arboles B y B+
Trimestre 09I
Trimestre 09I
Una idea es la de usar lo que se conoce como separador m as corto. Este es una cadena de longitud m nima tal que es mayor que todas las cadenas del bloque izquierdo pero menor o igual a todas las cadenas del bloque derecho.
Contenido
13
Arboles B Los cambios m as sencillos que podemos hacer en un arbol B + son los de borrado e inserci on de claves que no resulten en ninguna mezcla ni redistribuci on de bloques. En estos casos no se necesita cambiar el contenido del arbol B puesto que los separadores que este contiene siguen siendo v alidos. La situaci on es un poco m as complicada cuando los cambios en el umero de bloques. arbol B + cambian el n Si tenemos m as bloques necesitamos m as separadores y viceversa. Por lo tanto este tipo de cambios s alteran el contenido del arbol B .
14
Arboles B+ Conjuntos secuenciales y bloques Agregar un ndice al conjunto secuencial Separadores Operaciones con arboles B +
Arboles B y B+
Trimestre 09I
421 / 464
Arboles B y B+
Trimestre 09I
422 / 464
Arboles B y B+
Trimestre 09I
423 / 464
Tres casos
Recordatorios
Si se divide alg un bloque en el conjunto de secuencias se debe insertar un nuevo separador en el conjunto ndice. No sobra hacer los siguientes recordatorios: Toda inserci on o borrado modica el conjunto de secuencias. Pero s olo algunas de estas operaciones modican el conjunto ndice. Y en este caso lo hacen como si fuera un simple arbol B . Esto suele ser buena idea por varias razones:
Aunque no es necesario, el tama no del nodo del arbol B suele ser el mismo que el tama no del nodo del conjunto de secuencias. Se puede usar el mismo conjunto de buers para ambos tipos de nodos. Ambos tipos de bloques pueden aparecer en el mismo archivo. El tama no se escogi o de acuerdo a las caracter sticas del disco y la memoria.
Si se mezclan dos bloques en el conjunto de secuencias se debe eliminar un separador del conjunto ndice.
Si se redistribuyen registros entre dos bloques en el conjunto de secuencias se debe cambiar el valor de uno de los separadores del conjunto ndice.
Arboles B y B+ Trimestre 09I 424 / 464 Francisco Zaragoza (UAM Azcapotzalco) Trimestre 09I 425 / 464 Francisco Zaragoza (UAM Azcapotzalco)
Arboles B y B+
Arboles B y B+
Trimestre 09I
426 / 464
Conclusiones
NNLLS1S2...SNI1I2...INR1R2...RN NN es el n umero de separadores (f). LL es la longitud total de los separadores (f). S1, ..., SN son los NN separadores (v). I1, ..., IN forman un ndice de los separadores en el nodo (f). R1, ..., RN son los n umeros de bloque relativo de los nodos hijo (f).
La raz on fue la posibilidad de que cupieran tantos separadores como fuera posible en un nodo del arbol B .
No es trivial determinar cu ando se debe dividir, mezclar o redistribuir. Los arboles B + simples dieren de los de prejos en que los separadores son claves. Esto obliga a usar un poco m as de espacio en los nodos y de tiempo de procesamiento. Pero es m as f acil que trabajar con la estructura variable de los nodos. Tambi en se usan si los separadores no son muy cortos.
Pero entonces no es cierto que todos los nodos de este arbol tienen el mismo n umero de separadores.
Por lo tanto necesitamos que la estructura del nodo nos permita tener un n umero variable de registros de tama no variable.
Arboles B y B+
Trimestre 09I
428 / 464
Arboles B y B+
Trimestre 09I
429 / 464
Contenido
Tiempo de acceso
Part VII
15
Hasta ahora hemos logrado acceso a un archivo con n claves en tiempo: O (n) con b usqueda secuencial. O (logk n) con arboles B . Lo que realmente queremos es acceso en tiempo constante O (1). Recuerde que el tiempo se mide en t erminos del n umero de b usquedas en el disco.
Dispersi on
16
Introducci on a la dispersi on Dispersi on y colisiones Una funci on de dispersi on sencilla Otras funciones de dispersi on Memoria y densidad de empacado T ecnicas de dispersi on
Dispersi on
Trimestre 09I
430 / 464
Dispersi on
Trimestre 09I
431 / 464
Dispersi on
Trimestre 09I
432 / 464
Dispersi on
Dispersi on y colisiones
Resoluci on de colisiones
Una funci on de dispersi on es una funci on que transforma una clave en una direcci on. Es extremadamente dif cil dise nar funciones de dispersi on que no produzcan colisiones. Algunas formas de lograr esto son: Por lo que en general debemos preocuparnos por c omo resolverlas. Usar m as memoria. Ya sea escogiendo funciones que produzcan pocas colisiones. O jugando con la forma en la que se almacenan los sin onimos.
A diferencia de un ndice, es posible que dos claves se asocien con la misma direcci on, a lo que se le llama colisi on.
Lograr una buena distribuci on de las claves. De preferencia uniforme. Poner m as de una clave en una direcci on. A esto se le llama una cubeta.
Dos claves a las que se les asocia la misma direcci on se llaman sin onimas.
Dispersi on
Trimestre 09I
433 / 464
Dispersi on
Trimestre 09I
434 / 464
Dispersi on
Trimestre 09I
435 / 464
Contenido
15
Una funci on de dispersi on sencilla trabaja as : Representa la clave en forma num erica. La divide en partes iguales y las suma. Divide el resultado entre un primo p y usa el residuo como direcci on. Las sumas se pueden hacer m odulo p . Las direcciones estar an en el rango 0 a p 1.
Considere la clave EJEMPLO. En ASCII es 69, 74, 69, 77, 80, 76, 79. Sumamos las partes para obtener 524. Escogemos el n umero primo p = 97. Y obtenemos la direcci on 524 mod 97 = 39.
Introducci on a la dispersi on Dispersi on y colisiones Una funci on de dispersi on sencilla Otras funciones de dispersi on Memoria y densidad de empacado
16
T ecnicas de dispersi on
Dispersi on
Trimestre 09I
436 / 464
Dispersi on
Trimestre 09I
437 / 464
Dispersi on
Trimestre 09I
438 / 464
Ejemplo de colisiones
Contenido
15
Considere las siete claves CERO, UNO, DOS, TRES, CUATRO, CINCO y SEIS.
Usar una parte de la clave como direcci on. Dividir y sumar s olo una parte de la clave. Dividir la clave completa entre un primo. Elevar la clave al cuadrado y tomar el centro. Cambiar de base la clave.
Introducci on a la dispersi on Dispersi on y colisiones Una funci on de dispersi on sencilla Otras funciones de dispersi on Memoria y densidad de empacado T ecnicas de dispersi on
Hay otra colisi on entre las claves CUATRO, CINCO y SEIS en la direcci on 0.
Dispersi on
Trimestre 09I
439 / 464
Dispersi on
Trimestre 09I
440 / 464
Dispersi on
Trimestre 09I
441 / 464
Probabilidad discreta
Distribuci on de Poisson
Usar la E y obtener 69. Es decir, si hay n posiciones de memoria entonces p (i ) = Suponga que se han asignado r claves. Cu al es la probabilidad de que no le toquen claves a la posici on de memoria i ? Cu al es la probabilidad de que le toque una clave a la posici on de memoria i ? P (i , k ) =
1 r k r /n . k! ( n ) e 1 n.
Supongamos que la probabilidad de que una clave c sea asignada a una posici on de memoria i es uniforme.
La probabilidad de que le toquen k claves a la posici on de memoria i r 1 r k 1 . ) despu es de asignar r claves es p (i , k ) = k (1 n nk Esta distribuci on binomial es dif cil de calcular exactamente si r y n son grandes.
Dispersi on
Trimestre 09I
442 / 464
Dispersi on
Trimestre 09I
443 / 464
Dispersi on
Trimestre 09I
444 / 464
Contenido
15
p (i , 0) = 0.3487 y P (i , 0) = 0.3679.
Si r = 10 y n = 20 entonces tenemos que 1 p (i , 0) p (i , 1) = 0.0862 (se obtiene 0.0902 con Poisson). Si r = 10 y n = 30 entonces tenemos que 1 p (i , 0) p (i , 1) = 0.0418 (se obtiene 0.0447 con Poisson).
r se le llama densidad de empacado y de ella depende la A la raz on n cantidad de colisiones esperadas.
p (i , 1) = 0.3874 y P (i , 1) = 0.3679.
p (i , 2) = 0.1937 y P (i , 2) = 0.1839.
16
Introducci on a la dispersi on Dispersi on y colisiones Una funci on de dispersi on sencilla Otras funciones de dispersi on Memoria y densidad de empacado T ecnicas de dispersi on
r n
= 1,
1 2
y 1 3.
Dispersi on
Trimestre 09I
445 / 464
Dispersi on
Trimestre 09I
446 / 464
Dispersi on
Trimestre 09I
447 / 464
Contenido
Sobreujo progresivo
15
Introducci on a la dispersi on Este m etodo es muy simple. Si una clave nueva tiene la misma direcci on que una clave que ya est a almacenada entonces se prueba en las siguientes direcciones hasta que se encuentre una direcci on vac a. En caso de que se llegue al nal del archivo se contin ua desde el principio.
Inserci on de CERO, UNO, DOS, TRES, CUATRO, CINCO y SEIS con claves 3, 4, 6, 3, 0, 0, 0
DIR CERO 0 1 2 3 4 5 6 CERO UNO CERO UNO DOS CERO UNO DOS TRES CERO UNO TRES DOS CUATRO CINCO CUATRO CERO UNO TRES DOS CUATRO CINCO CERO UNO TRES DOS SEIS CUATRO CINCO SEIS CERO UNO TRES DOS
16
T ecnicas de dispersi on Sobreujo progresivo Cubetas Borrado de registros Otras formas de resolver colisiones
Dispersi on
Trimestre 09I
448 / 464
Dispersi on
Trimestre 09I
449 / 464
Dispersi on
Trimestre 09I
450 / 464
Registros ausentes
Longitud de la b usqueda
Contenido
15
Introducci on a la dispersi on
Si se encuentra una direcci on vac a ya se sabe que el registro nunca se ha puesto all . Aunque no analizaremos esto, la longitud promedio de una b usqueda aumenta muy r apidamente con respecto a la densidad de empacado. Se considera que si la longitud promedio de una b usqueda es mayor que 2 entonces es inaceptable.
Si el archivo est a lleno la b usqueda regresar a al punto inicial, momento en el que se sabe que el registro no est a all .
T ecnicas de dispersi on Sobreujo progresivo Cubetas Borrado de registros Otras formas de resolver colisiones
Dispersi on
Trimestre 09I
451 / 464
Dispersi on
Trimestre 09I
452 / 464
Dispersi on
Trimestre 09I
453 / 464
Cubetas
Ejemplo de cubetas
Inserci on de CERO, UNO, DOS, TRES, CUATRO, CINCO y SEIS con claves 3, 4, 6, 3, 0, 0, 0
D CERO UNO DOS TRES CUATRO CINCO SEIS
Recordemos que es igual de costoso leer un registro del disco que leer todo el bloque que lo contiene (al que llamaremos cubeta).
Se puede analizar esta situaci on y descubrir que habr a menos sobreujos si las cubetas son m as grandes. Esto considerando igualdad de espacio total disponible. Sin embargo, queda claro que una cubeta no debe ser m as grande que una pista, pues se tendr a que mover el brazo para terminar de leer la cubeta completa.
As , una idea es almacenar varios registros en una sola direcci on de bloque, la cual se obtiene por dispersi on.
0 1 2 3 4 5 6 - - - - - - CERO - CERO - UNO - - - - - - - CERO UNO - DOS - - - CERO TRES UNO - DOS CUATRO - - CERO TRES UNO - DOS CUATRO CINCO - - CERO TRES UNO - DOS -
Cuando la cubeta se llene aun debemos preocuparnos por el sobreujo, pero esto ocurrir a con mucha menor frecuencia que en el caso anterior.
Dispersi on
Trimestre 09I
454 / 464
Dispersi on
Trimestre 09I
455 / 464
Dispersi on
Trimestre 09I
456 / 464
Contenido
Borrado de registros
L apidas
15
Introducci on a la dispersi on
Borrar un registro de un archivo de dispersi on es mucho m as complicado que agregar un registro por dos razones: El espacio liberado por el borrado no debe obstruir b usquedas futuras. Debiera ser posible reutilizar el espacio liberado para futuras inserciones. Esto es particularmente importante si se usa un m etodo de resoluci on de colisiones por sobreujo progresivo.
16
Una forma sencilla de resolver ambos problemas es a trav es del uso de l apidas, es decir, marcas especiales que indiquen que all hab a un registro pero ya no est a. Es importante observar que s olo se debe poner una l apida donde se necesite. Por ejemplo, no se necesita si el siguiente espacio est a vac o. Tambi en se debe notar que las l apidas crean nuevos problemas que no exist an.
T ecnicas de dispersi on Sobreujo progresivo Cubetas Borrado de registros Otras formas de resolver colisiones
Dispersi on
Trimestre 09I
457 / 464
Dispersi on
Trimestre 09I
458 / 464
Dispersi on
Trimestre 09I
459 / 464
Ejemplo de l apidas
Contenido
Introducci on a la dispersi on Dispersi on doble: si ocurre una colisi on se usa una segunda funci on de dispersi on para obtener una nueva direcci on que se suma a la anterior hasta que se encuentre una direcci on vac a. Sobreujo encadenado: cada registro contendr a una direcci on donde se pueda encontrar al siguiente registro que obtuvo la misma direcci on al aplicar la funci on de dispersi on. T ecnicas de dispersi on Sobreujo progresivo Cubetas Borrado de registros Otras formas de resolver colisiones
DIR
16
CERO -
CUATRO CINCO
DOS
UNO
TRES
0 1 2 3 4 5 6
+ UNO TRES -
+ + TRES -
Dispersi on
Trimestre 09I
460 / 464
Dispersi on
Trimestre 09I
461 / 464
Dispersi on
Trimestre 09I
462 / 464
Esto es todo
Encadenamiento con area de sobreujo: se crea una segunda area donde se coloquen de forma encadenada los registros que han causado sobreujo (suele ser m as lento). Fin
Tablas de b usqueda: se podr a tener un archivo de dispersi on que no contuviera registros, sino s olo apuntadores a los mismos. Esto es equivalente a un ndice que se accede por dispersi on.
Dispersi on
Trimestre 09I
463 / 464
Dispersi on
Trimestre 09I
464 / 464