Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sustentante:
Jeily Yisnely Rodríguez Jáquez
Max Javier Abreu Rodriguez
Matricula:
16-1913
16-2367
Tema:
Resumen del capítulo 7 y 8
Profesor:
Ambiorix Liriano
Fecha:
05 de junio de 2020
Algoritmos de ordenación de archivos
FLUJOS Y ARCHIVOS
Los datos están organizados de tal modo que puedan ser recuperados fácilmente,
actualizados o borrados y almacenados de nuevo en el archivo con todos los cambios
realizados.
Según las características del soporte empleado y el modo en que se han organizado
los registros, se consideran dos tipos de acceso a los registros de un archivo:
• Acceso secuencial.
• Acceso directo.
Un flujo (stream) es una abstracción que se refiere a un flujo o corriente de datos que
fluyen entre un origen o fuente (productor) y un destino o sumidero (consumidor).
CLASE File
Un archivo consta de un nombre, además de la ruta que indica donde está ubicado, por
ejemplo, “C:\pasaje.dat”. Este identificador del archivo (cadena de caracteres) se
transmite al constructor del flujo de entrada o de salida que procesa al fichero:
Este tipo de objeto contiene el nombre del archivo, la ruta y más propiedades relativas
al archivo.
La clase File define métodos para conocer propiedades del archivo (última
modificación, permisos de acceso, tamaño ...); también, métodos para
modificar alguna característica del archivo.
Ambas son clases abstractas que declaran métodos que deben de redefinirse en sus
clases derivadas.
InputStream es la clase base de todas las clases definidas para flujos de entrada, y
OutputStream es la clase base de todas las clases definidas para flujos de salida.
Por ejemplo, el flujo mf se asocia al archivo Temperatura.dat del directorio por defecto:
FileOutputStream mf = newFileOutputStream("Temperatura.dat");
◦ int read() throws IOException; Lee un byte del flujo asociado. Devuelve –1 si
alcanza el fin del fichero.
◦ int read(byte[] s) throws IOException; Lee una secuencia de bytes del flujo y se
almacena en el array s. Devuelve –1 si alcanza el fin del fichero, o bien el número
de bytes leídos.
◦ int read(byte[] s, int org, int len) throws IOException; Lee una secuencia de
bytes del flujo y se almacena en array s desde la posición org y un máximo de len
bytes. Devuelve –1 si alcanza el fin del fichero, o bien el númerode bytes leídos.
Está ligada con los archivos y los dispositivos en que se encuentra, al leer el archivo
para realizar la ordenación el tiempo de lectura de los registros es notablemente mayor
que el tiempo que se tarda en realizar las operaciones de ordenación.
MEZCLA DIRECTA
◦ 3. Separar pares de registros del archivo original O en los dos archivos auxiliares
F1 y F2.
Fusión Natural
El método de fusión natural mejora el tiempo de ejecución de la mezcla directa al
introducir una pequeña variación respecto a la longitud de las secuencias de registros.
En el método de mezcla directa, las secuencias de registros tienen longitudes que son
múltiplos de dos: 1, 2, 4, 8, 16... de tal forma que el número de pasadas a realizar es
fijo, dependiente del número de registros.
Para aumentar la eficiencia hay que reducir el número de pasadas, de esa forma se
reduce el número de operaciones de entrada/salida en dispositivos externos.
1. Distribuir registros del archivo original por tramos en los m/2 primeros archivos
auxiliares. A continuación, estos se consideran archivos de entrada.
El primer paso del algoritmo realiza la distribución de los tramos del archivo original en
los archivos de entrada, a la vez determina el número de tramos del archivo. En todo
momento es importante conocer el número de tramos, ya que cuando queda sólo uno
el archivo está ordenado, y éste será el archivo f[c[0]].
En el momento en que uno de los archivos de entrada alcanza su final hay un cambio
de cometido, pasa a ser considerado como archivo de salida, y el archivo que en ese
momento era de salida pasa a ser de entrada y la mezcla de tramos continúa. La
sucesión de pasadas continúa hasta alcanzar el archivo ordenado.
1. En cada pasada hay un sólo archivo destino (salida), en vez de los m/2 que
necesita la mezcla equilibrada múltiple.
3. El número de archivos origen (de entrada) varía dependiendo del número de tramo
en proceso.
4. Puede ocurrir que se alcance el último registro del archivo m-1 y sean necesarias
más mezclas que utilicen tramos ficticios de ese archivo.
CAPITULO 8
Lista enlazada
Una lista enlazada es una colección o secuencia de elementos dispuestos uno detrás
de otro, en la que cada elemento se conecta al siguiente elemento por un “enlace” o
“referencia”.
• Listas simplemente enlazadas. Cada nodo (elemento) contiene un único enlace que lo
conecta al nodo siguiente o nodo sucesor. La lista es eficiente en recorridos directos
(“adelante”).
• Listas doblemente enlazadas. Cada nodo contiene dos enlaces, uno a su nodo
predecesor y otro a su nodo sucesor. La lista es eficiente tanto en recorrido directo
(“adelante”) como en recorrido inverso (“atrás”).
• Lista circular doblemente enlazada. Una lista doblemente enlazada en la que el último
elemento se enlaza al primer elemento y viceversa. Esta lista se puede recorrer de
modo circular (“en anillo”) tanto en dirección directa (“adelante”) como inversa (“atrás”).
Una lista se utiliza para almacenar información del mismo tipo, con la característica de
que puede contener un número indeterminado de elementos y que estos elementos
mantienen un orden explícito. Una lista es una estructura de datos dinámica. El número
de nodos puede variar rápidamente en un proceso, aumentando por inserciones o
disminuyendo por eliminación de nodos.
OPERACIONES en LISTAS ENLAZADAS
La implementación del TAD Lista requiere, en primer lugar, declarar la clase Nodo, en
la que se combinarán sus dos partes: el dato (entero, real, doble, carácter o referencias
a objetos) y un enlace. Además, la clase Lista con las operaciones y el atributo con la
cabeza de la lista. Las operaciones tendrán las siguientes funciones:
2. Hacer que el campo enlace del nuevo nodo apunte a la cabeza (primero) de la
lista original.
La inserción para insertar entre dos nodos (n1, n2) requiere las siguientes
etapas:
2. Hacer que el campo enlace del nuevo nodo apunte al nodo n2, ya que el nodo
creado se ubicará justo antes de n2 (en la Figura 8.7, el nodo 40).
3. La variable referencia anterior tiene la dirección del nodo n1 (en la Figura 8.7,
el nodo 25), y eso exige hacer que anterior.enlace apunte al nodo creado.
2. El enlace del nodo anterior que apunte al siguiente nodo del cual se elimina.
La definición de una lista está muy ligada al tipo de datos de sus elementos; así, se han
puesto ejemplos en los que el tipo es int, otros en los que el tipo es double, otros String.
Declarando el campo dato de tipo Object se consigue una lista genérica, válida para
cualquier tipo de dato, aunque exigirá muchas conversiones de datos cuando se
concrete para un tipo de dato particular.