Gómez Hernández Leonel Alejandro Estructura de archivos sección D05 Ordenamiento shell El algoritmo Shell sort mejora el ordenamiento por inserción comparando elementos separados por un espacio de varias posiciones. Esto permite que un elemento haga "pasos más grandes" hacia su posición esperada. Los pasos múltiples sobre los datos se hacen con tamaños de espacio cada vez más pequeños. El último paso del Shell sort es un simple ordenamiento por inserción, pero para entonces, ya está garantizado que los datos del vector están casi ordenados. Método: //java public static void shellSort( int a[ ]) { for( int gap = a.length / 2; gap > 0; gap = gap == 2 ? 1 : (int) ( gap / 2.2 ) ){ for( int i = gap; i < a.length; i++ ){ int tmp = a[ i ]; int j; for(j = i; j >= gap && tmp < a[ j - gap ] ; j -= gap ){ a[ j ] = a[ j - gap ]; } Búsqueda y clasificación externa Cuando hablamos de archivos sabemos la diferencia en tiempo que resulta de hacer una búsqueda y una clasificación en una memoria RAM si la comparamos contra un disco de unidad fijo. Aun en una buena clasificación, físicamente, implica cada una de las comparaciones un desplazamiento y la clasificación se vuelve lenta. En el análisis de la clasificación y búsqueda se deben desarrollar enfoques que minimicen el número de accesos a disco y la cantidad de tiempo invertido. Búsqueda Binaria En una búsqueda binaria lo primero que tenemos que saber es que los registros deben estar ordenados en términos de la llave que se está usando en la búsqueda. Supongamos que queremos buscar algún nombre en un archivo de x cantidad registros, primero compararíamos con la llave que está a la mitad del archivo. El resultado de la comparación, indica en cuál mitad del archivo se contiene dicho registro, por decirlo así si nuestro registro fuera otro diferente, sabríamos que el que buscamos se encontraría en la primera mitad de los archivos. Este proceso se repite hasta que se encuentre el registro, o en dado caso hasta saber que no se encuentra allí. Este tipo búsqueda reduce las comparaciones considerablemente. Gómez Hernández Leonel Alejandro Ordenamiento en memoria Estructura de archivos sección D05 Cuando nos referimos a un ordenamiento en memoria estamos hablando de almacenar un archivo en la memoria RAM y clasificarlo desde ahí, de esta manera ya no tendríamos que trasportar grandes distancias desde una posición inicial en un disco duro, ahorrándonos saltos, desplazamientos y relectura de datos, ya que esto es una operación muy lenta. Este tipo de ordenamiento solo tiene ventaja cuando el archivo es pequeño. Ordenamiento por llaves Método de clasificación de un archivo que no requiere almacenarlo por completo en la memoria, es decir, Sólo las llaves se mantienen en memoria, junto con apuntadores que las asocian con los registros del archivo donde se extrajeron. Las llaves se clasifican, y la lista de llaves clasificada se usa para construir una nueva versión del archivo que tienen los registros ya ordenados. La ventaja principal de esta clasificación es que requiere menos memoria que la clasificación en memoria RAM. La desventaja es que el proceso de construcción de un archivo nuevo requiere bastantes desplazamientos. Registros fijos Se dice que un registro está fijo cuando existen otros registros o estructuras de archivos referidas a él mediante su posición física. Está fijo en el sentido de que no se tiene la libertad de alterar la posición física del registro, ya que al hacerlo se destruiría la validez de las referencias físicas al registro. Estas referencias se convierten en apuntadores suspendidos que no sirven de mucho. Indización y operaciones La indización permite varios caminos de acceso a un archivo. También proporciona acceso por llave a archivos de registros de longitud variable. En una indización tiene un campo llave distinto pero todos tienen el mismo número de catálogo como campo de referencia. Las operaciones para el manejo y mantenimiento de un archivo son las siguientes: Creación de los archivos, carga del índice en la memoria, reescritura del archivo en índices de la memoria, adición de registros, eliminación de registros y actualización de registros. Índices Selectivos Un índice selectivo contiene llaves sólo para una porción de los registros del archivo de datos, dicho índice permite al usuario ver un subconjunto específico de los registros del archivo. Enlace (BINDING) El enlace se realiza cuando una llave se asocia con un determinado registro físico del archivo de datos; en general, puede tener lugar ya sea durante la preparación del archivo de datos e índices o durante la ejecución del programa. En el primer caso, que es llamado enlace fuertemente acoplado, los índices contienen referencias explícitas a los registros Gómez Hernández Leonel Alejandro Estructura de archivos sección D05 físicos de datos asociados. En el último caso, la conexión entre una llave y un registro físico en particular se posterga hasta que realmente se extrae el registro, durante la ejecución del programa.