30 de marzo de 2011

Búsqueda Binaria

     Es un algoritmo que reduce el tiempo de búsqueda, ya que reduce exponencialmente el numero de iteraciones necesarias.
     Se utiliza cuando el arreglo en el que queremos determinar la existencia de una elemento esta previamente ordenado.
     Consiste en dividir el intervalo de búsqueda en dos partes, comparando el elemento buscado con el que ocupa la posición central en el arreglo. En caso de que no sean iguales, se predefinen los extremos del intervalo, según el elemento central sea mayor o menor que el elemento buscado, disminuyendo el espacio de búsqueda, el proceso termina cuando encuentra el elemento buscado o el intervalo de búsqueda se anula, es vació.
     Con cada iteración del método el espacio de búsqueda se reduce a la mitad.




Click aquí para ver el vídeo de búsqueda binaria

Búsqueda Secuencial

    La búsqueda es el proceso de localizar un registro (elemento) con un valor de llave particular. La búsqueda termina exitosamente cuando se localiza el registro que contenga la llave buscada, o termina sin éxito, cuando se determina que no aparece ningún registro con esa llave.
 
    Búsqueda secuencial, también se le conoce como búsqueda lineal. Supongamos una colección de registros organizados como una lista lineal. El algoritmo básico de búsqueda secuencial consiste en empezar al inicio de la lista e ir a través de cada registro hasta encontrar la llave indicada(k), o hasta al final de la lista.
 
 
La situación óptima es que el registro buscado sea el primero en ser examinado. El peor caso es cuando las llaves de todos los n registros son comparados con k (lo que se busca). El caso promedio es n/2 comparaciones.
    Este método de búsqueda es muy lento, pero si los datos no están en orden es el único método que puede emplearse para hacer las búsquedas. Si los valores de la llave no son únicos, para encontrar todos los registros con una llave particular, se requiere buscar en toda la lista.

10 de marzo de 2011

Acceso a los Archivos


     Dependiendo de la manera en que se acceden a los registren de un archivo, se le clasifican como SECUENCIALES o como DIRECTOS.  
En los archivos de acceso secuencial, para tener acceso al registro localizado en la posición N, se deben haber procesado los N-1 registros previos, en un orden secuencial.
Cuando se tienen pocos registros en un archivo, o que los registros son pequeños, la diferencia entre los tipos de acceso de forma secuencial y directa pueden no ser perceptible para el usuario; sin embargo, la diferencia viene a ser significativa cuando se manejan archivos con grandes cantidades de información.
La forma de manejar los archivos de acceso secuencial es mas sencilla en la mayoría de los lenguajes de programación, por lo que su estudio se antepone al de los archivos de acceso directo.
El manejo secuencial de un archivo es recomendable cuando se deben procesar todos o la mayoría de los registros, como por ejemplo en los casos de una nomina de empleados o en la elaboración de reportes contables. 

Lectura de un archivo

Normalmente la lectura de un archivo no tiene sentido por si sola, si no que adquiere significado cuando se asocia con la actualización del archivo o con la generación de un reporte cualquiera.
   De alguna manera podemos pensar en la lectura de un archivo como un proceso inverso al de su creación, puesto que ahora se pasara la información desde el disco hacia la memoria auxiliar.
Veamos un procedimiento que lea todos los registros del archivo “empleados.dat”, y los despliegues en la pantalla.

2 de marzo de 2011

Mantenimiento de Archivos y Eliminación (Conceptos)

1) Mantenimiento de Archivos
      Son aquellas modificaciones que se le pueden realizar a un archivo. Pueden ser de tres formas:
  • Agregar
  • Actualizar
  • Eliminar
     El mantenimiento se vuelve complejo cuando se actualiza registros de longitud variable o se eliminan registros de longitud fija o variable. Cuando se elimina un registro se desea reutilizar el espacio. Hay dos tipos de archivos, en línea y fuera de línea; los primeros son los que están en constante actualización, los segundos se someten a pocos cambios.

2) Compactación del Almacenamiento
     Se refiere a la reutilización de los espacios que han sido desocupados al momento de eliminar un registro.
     La forma más sencilla es marcar de alguna forma el registro a eliminar y generar un duplicado de archivo omitiendo los registros marcados, una vez que se decida eliminarlos por completo.

3) Panorama de Eliminación de Registros de Longitud Fija
     Para proporcionar un mecanismo de eliminación de registros con la subsecuente reutilización del espacio, es necesario garantizar dos cosas:
  1.  Que los registros eliminados se marquen de alguna forma especial.
  2.  Que se pueda encontrar el espacio que los registros eliminados ocupan para reutilizarlo cuando se agreguen otros registros.
    Al momento de insertar registros para una forma más rápida se necesita:
  • Una forma de saber de inmediato si hay lugares vacíos en el archivo.
  • Una forma de saltar directamente a uno de esos lugares en caso de existir.
4) Eliminación de Registros de Longitud Fija
     Es una función que primero mueve el apuntador a la posición NRR (Número Relativo de Registro). Luego marca con la bandera de eliminación (*) y en la lista de disponibles graba el NRR para indicar que está disponible y así poderlo reutilizar, sino hubiera disponible se escribe el registro al final de la lista.
     También se necesita una función que revisa si el registro no está eliminado.

5) Eliminación de Registros de Longitud Variable
     Es una operación que emplea la reutilización del espacio de los registros eliminados para colocar un registro de igual o menor tamaño.
     Para llevar a cabo la reutilización realiza una búsqueda sobre los NRR para identificar los tamaños y si el registro a agregar es mayor al espacio dejado por la eliminación se agrega al final de la lista.

6) Fragmentación del Almacenamiento
     Es el espacio desperdiciado dentro de un registro. Hay dos tipos de registros: Longitud fija y variable. Los de longitud fija al establecerse automáticamente, crea la fragmentación, y los de longitud variable crea la fragmentación sólo si se borra un registro.
     La fragmentación se combate con la unión de los huecos fragmentados para crear un espacio mayor y reutilizable.

Tipos de fragmentación:
          - Externa: Es cuando el espacio que no se utiliza está fuera de los registros individuales.
          - Interna: Es cuando el espacio desperdiciado se encuentra dentro de un registro.

Unión de Espacios:
          Si dos o más registros son eliminados, los adyacentes "físicos" pueden unirse para cubrir el espacio que quedó entre ellos.
 
7) Estrategias de Colocación
     Es una forma de ir almacenando la información en el disco duro, esto en los archivos de longitud variable.

Definición de Colocación: Mecanismo para elegir el espacio adecuado para los nuevos registros.
Primer ajuste:
     Se utiliza la mínima cantidad posible de trabajo y  no se preocupa por la exactitud del ajuste. Se acepta la primera entrada disponible. Ven en secuencia o por tamaño.

Mejor ajuste:
     El ajuste entre la entrada disponible y las necesidades del registro nuevo. Orden ascendente.

Peor ajuste:
     Inicia su búsqueda al principio de la lista de disponibles, siempre devuelve la entrada disponible más grande. Orden descendente.