280 likes | 436 Views
Ordenación Externa. Ordenación de porciones de un archivo desordenado en memoria, generando varios archivos de trabajo ordenados Fusión de archivos ordenados Mejoras
E N D
Ord. Externa con Montículos Ordenación Externa • Ordenación de porciones de un archivo desordenado en memoria, generando varios archivos de trabajo ordenados • Fusión de archivos ordenados Mejoras • Reemplazo de registros que salen ordenados por registros desordenados: archivos ordenados con más registros que la capacidad del buffer de ordenación • Ordenación interna por montículos: menor movimiento de registros en el buffer de ordenación
Ord. Externa con Montículos Variantes Ordenación Externa • Cuando no se puede incorporar un nuevo registro al buffer de ordenación las opciones son: • Se achica el buffer un registro y se usa el espacio para guardar al registro con identificador menor al último que salió ordenado (replacement selection) • No se achica el buffer: se guarda el registro en un archivo temporal que no puede tener más registros que el buffer de ordenación (natural selection)
Ord. Externa con Montículos Ordenación Interna por Montículos • Un montículo (heap) es un árbol binario perfecto representado implícitamente en un arreglo. • Para ordenar de menor a mayor, los identificadores en un nodo deben ser menores a los de cualesquiera de sus descendientes. • El árbol se representa en el arreglo sin punteros: los hijos de un nodo en la posición i están en las posiciones 2*i y 2*i+1. • Un árbol con n nodos se almacena en las posiciones 1 a n del arreglo.
Ord. Externa con Montículos Ejemplo de Selección con Reemplazo • Registros a ordenar (representados por identificadores): • 29, 132, 234, 68, 130, 49, 197, 35, 110, 146, 174, 153, 189, 200, 115 • Buffer de ordenación con capacidad para 7 registros • 1. Se carga el buffer desde el archivo (única vez): • 29, 132, 234, 68, 130, 49, 197
Ord. Externa con Montículos 29, 132, 234, 68, 130, 49, 197, 35, 110, 146, 174, 153, 189, 200, 115 • 2. Construir montículo en el buffer (de izquierda derecha, hasta el último elemento cargado): • 29, 132, 234, 68, 130, 49, 197 • 29, 132, 234, 68, 130, 49, 197 • 29, 132, 234, 68, 130, 49, 197 • 29, 132, 234, 68, 130, 49, 197 • 29, 68, 234, 132, 130, 49, 197 • 29, 68, 234, 132, 130, 49, 197 • 29, 68, 234, 132, 130, 49, 197 • 29, 68, 49, 132, 130, 234, 197 • 29, 68, 49, 132, 130, 234, 197
Ord. Externa con Montículos 29, 132, 234, 68, 130, 49, 197,35, 110, 146, 174, 153, 189, 200, 115 • 3. Crear archivo de trabajo ordenado y repetir hasta que se agote el montículo • Extraer registro de la raíz y escribirlo ordenado • 29, 68, 49, 132, 130, 234, 197 • Tomar un registro desordenado • 35, 68, 49, 132, 130, 234, 197 29
Ord. Externa con Montículos 29, 132, 234, 68, 130, 49, 197, 35, 110, 146, 174, 153, 189, 200, 115 • Extraer registro de la raíz y escribirlo ordenado • 35, 68, 49, 132, 130, 234, 197 • Tomar un registro desordenado • 110, 68, 49, 132, 130, 234, 197 • 49, 68, 110, 132, 130, 234, 197 29, 35
Ord. Externa con Montículos 29, 132, 234, 68, 130, 49, 197, 35, 110,146, 174, 153, 189, 200, 115 • Extraer registro de la raíz y escribirlo ordenado • 49, 68, 110, 132, 130, 234, 197 • Tomar un registro desordenado • 146, 68, 110, 132, 130, 234, 197 • 68, 146, 110, 132, 130, 234, 197 • 68, 130, 110, 132, 146, 234, 197 29, 35, 49
Ord. Externa con Montículos 29, 132, 234, 68, 130, 49, 197, 35, 110,146,174, 153, 189, 200, 115 • Extraer registro de la raíz y escribirlo ordenado • 68, 130, 110, 132, 146, 234, 197 • Tomar un registro desordenado • 174, 130, 110, 132, 146, 234, 197 • 110, 130, 174, 132, 146, 234, 197 29, 35, 49, 68
Ord. Externa con Montículos 29, 132, 234, 68, 130, 49, 197, 35, 110,146,174,153, 189, 200, 115 • Extraer registro de la raíz y escribirlo ordenado • 110, 130, 174, 132, 146, 234, 197 • Tomar un registro desordenado • 153, 130, 174, 132, 146, 234, 197 • 130, 153, 174, 132, 146, 234, 197 • 130, 132, 174, 153, 146, 234, 197 29, 35, 49, 68, 110
Ord. Externa con Montículos 29, 132, 234, 68, 130, 49, 197, 35, 110,146,174,153,189, 200, 115 • Extraer registro de la raíz y escribirlo ordenado • 130, 132, 174, 153, 146, 234, 197 • Tomar un registro desordenado • 189, 132, 174, 153, 146, 234, 197 • 132, 189, 174, 153, 146, 234, 197 • 132, 146, 174, 153, 189, 234, 197 29, 35, 49, 68, 110, 130
Ord. Externa con Montículos 29, 132, 234, 68, 130, 49, 197, 35, 110,146,174,153,189,200, 115 • Extraer registro de la raíz y escribirlo ordenado • 132, 146, 174, 153, 189, 234, 197 • Tomar un registro desordenado • 200, 146, 174, 153, 189, 234, 197 • 146, 200, 174, 153, 189, 234, 197 • 146, 153, 174, 200, 189, 234, 197 29, 35, 49, 68, 110, 130, 132
Ord. Externa con Montículos 29, 132, 234, 68, 130, 49, 197, 35, 110,146,174,153,189,200, 115 • Extraer registro de la raíz y escribirlo ordenado • 146, 153, 174, 200, 189, 234, 197 • Tomar un registro desordenado • 197, 153, 174, 200, 189, 234, 115 • 197, 153, 174, 200, 189, 234, 115 • 153, 197, 174, 200, 189, 234, 115 • 153, 189, 174, 200, 197, 234, 115 29, 35, 49, 68, 110, 130, 132, 146
Ord. Externa con Montículos 29, 132, 234, 68, 130, 49, 197, 35, 110,146,174,153,189,200, 115 • Extraer registro de la raíz y escribirlo ordenado • 153, 189, 174, 200, 197, 234, 115 • Tomar un registro desordenado • 234, 189, 174, 200, 197, 234,115 • 234, 189, 174, 200, 197, 234,115 • 174, 189, 234, 200, 197, 234,115 29, 35, 49, 68, 110, 130, 132, 146, 153
Ord. Externa con Montículos 29, 132, 234, 68, 130, 49, 197, 35, 110,146,174,153,189,200, 115 • Extraer registro de la raíz y escribirlo ordenado • 174, 189, 234, 200, 197, 234,115 • Tomar un registro desordenado • 197, 189, 234, 200, 197,234,115 • 197, 189, 234, 200, 197,234,115 • 189, 197, 234, 200, 197,234,115 29, 35, 49, 68, 110, 130, 132, 146, 153, 174
Ord. Externa con Montículos 29, 132, 234, 68, 130, 49, 197, 35, 110,146,174,153,189,200, 115 • Extraer registro de la raíz y escribirlo ordenado • 189, 197, 234, 200, 197,234,115 • Tomar un registro desordenado • 200, 197, 234, 200,197,234,115 • 200, 197, 234, 200,197,234,115 • 197, 200, 234, 200,197,234,115 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189
Ord. Externa con Montículos 29, 132, 234, 68, 130, 49, 197, 35, 110,146,174,153,189,200, 115 • Extraer registro de la raíz y escribirlo ordenado • 197, 200, 234, 200,197,234,115 • Tomar un registro desordenado • 234, 200, 234,200,197,234,115 • 234, 200, 234,200,197,234,115 • 200, 234, 234,200,197,234,115 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189, 197
Ord. Externa con Montículos 29, 132, 234, 68, 130, 49, 197, 35, 110,146,174,153,189,200, 115 • Extraer registro de la raíz y escribirlo ordenado • 200, 234, 234,200,197,234,115 • Tomar un registro desordenado • 234, 234,234,200,197,234,115 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189, 197, 200
Ord. Externa con Montículos 29, 132, 234, 68, 130, 49, 197, 35, 110,146,174,153,189,200, 115 • Extraer registro de la raíz y escribirlo ordenado • 234, 234,234,200,197,234,115 • Tomar un registro desordenado • 234,234,234,200,197,234,115 • ¡Montículo agotado! • Se cierra el archivo de trabajo ordenado y se justifican a izquierda los elementos congelados • 115 (Y se continúa desde el paso 2...) 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189, 197, 200, 234
Ord. Externa con Montículos 29, 132, 234, 68, 130, 49, 197, 35, 110,146,174,153,189,200, 115 • 2. Construir montículo en el buffer (de izquierda derecha, hasta el último elemento cargado): • 115 • 3. Crear archivo de trabajo ordenado y repetir hasta que se agote el montículo • Extraer registro de la raíz y escribirlo ordenado • 115 • Tomar un registro desordenado • 115 • ¡Montículo agotado! ... 115
Ord. Externa con Montículos 29 • 4. Fusionar los archivos de trabajo ordenados: • Leer un registro de cada archivo y obtener el de menor identificador • 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189, 197, 200, 234 • 115 Mientras el menor identificador no sea la clave máxima 999: Escribir el registro en el archivo fusión y obtener el siguiente menor • 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189, 197, 200, 234 • 115
Ord. Externa con Montículos 29, 35 • Escribir el registro en el archivo fusión y obtener el siguiente menor • 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189, 197, 200, 234 • 115 • Escribir el registro en el archivo fusión y obtener el siguiente menor • 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189, 197, 200, 234 • 115 29, 35, 49
Ord. Externa con Montículos 29, 35, 49, 68 • Escribir el registro en el archivo fusión y obtener el siguiente menor • 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189, 197, 200, 234 • 115 • Escribir el registro en el archivo fusión y obtener el siguiente menor • 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189, 197, 200, 234 • 115, 999 29, 35, 49, 68, 110
Ord. Externa con Montículos 29, 35, 49, 68, 110, 115 • Escribir el registro en el archivo fusión y obtener el siguiente menor • 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189, 197, 200, 234 • 115, 999 • Escribir el registro en el archivo fusión y obtener el siguiente menor • 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189, 197, 200, 234 • 115, 999 29, 35, 49, 68, 110, 115, 130
Ord. Externa con Montículos 29, 35, 49, 68, 110, 115, 130, 132 • Escribir el registro en el archivo fusión y obtener el siguiente menor • 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189, 197, 200, 234 • 115, 999 • Escribir el registro en el archivo fusión y obtener el siguiente menor • 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189, 197, 200, 234 • 115, 999 29, 35, 49, 68, 110, 115, 130, 132, 146
Ord. Externa con Montículos 29, 35, 49, 68, 110, 115, 130, 132, 146, 153 • Escribir el registro en el archivo fusión y obtener el siguiente menor • 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189, 197, 200, 234 • 115, 999 • Escribir el registro en el archivo fusión y obtener el siguiente menor • 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189, 197, 200, 234 • 115, 999 29, 35, 49, 68, 110, 115, 130, 132, 146, 153, 174
Ord. Externa con Montículos 29, 35, 49, 68, 110, 115, 130, 132, 146, 153, 174, 189 • Escribir el registro en el archivo fusión y obtener el siguiente menor • 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189, 197, 200, 234 • 115, 999 • Escribir el registro en el archivo fusión y obtener el siguiente menor • 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189, 197, 200, 234 • 115, 999 29, 35, 49, 68, 110, 115, 130, 132, 146, 153, 174, 189, 197
Ord. Externa con Montículos 29, 35, 49, 68, 110, 115, 130, 132, 146, 153, 174, 189, 197, 200 • Escribir el registro en el archivo fusión y obtener el siguiente menor • 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189, 197, 200, 234, 999 • 115, 999 • Escribir el registro en el archivo fusión y obtener el siguiente menor • 29, 35, 49, 68, 110, 130, 132, 146, 153, 174, 189, 197, 200, 234, 999 • 115, 999 29, 35, 49, 68, 110, 115, 130, 132, 146, 153, 174, 189, 197, 200, 234