sábado, 31 de marzo de 2012

8.1 BUSQUEDA SECUENCIAL


BUSQUEDA SECUENCIAL EXTERNA
Se utiliza cuando el vector no está ordenado o no puede ser ordenado previamente. Consiste en buscar el elemento comparándolo secuencialmente (de ahí su nombre) con cada elemento del arreglo hasta encontrarlo, o hasta que se llegue al final. La existencia se puede asegurar cuando el elemento es localizado, pero no podemos asegurar la no existencia hasta no haber analizado todos los elementos del arreglo.
La búsqueda de un elemento dentro de un array es una de las operaciones más importantes en el procesamiento de la información, y permite la recuperación de datos previamente almacenados. El tipo de búsqueda se puede clasificar como interna o externa, según el lugar en el que esté almacenada la información (en memoria o en dispositivos externos). Todos los algoritmos de búsqueda tienen dos finalidades:
- Determinar si el elemento buscado se encuentra en el conjunto en el que se busca.
- Si el elemento está en el conjunto, hallar la posición en la que se encuentra.
En este apartado nos centramos en la búsqueda interna. Como principales algoritmos de búsqueda en arrays tenemos la búsqueda secuencial, la binaria y la búsqueda utilizando tablas de hash.
Consiste en recorrer y examinar cada uno de los elementos del array hasta encontrar el o los elementos buscados, o hasta que se han mirado todos los elementos del array.
EJEMPLO
NOTA
En este ejemplo se debe ir primero a la opción mostrar, pues de esta manera el arreglo se cargara de los datos del archivo, de otra manera marcara que no se encuentra el dato buscado.
:estructura_datos_csharp:busquedasecuencial-principal.jpg
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 

namespace BusquedaSecuencialExterna 
{ 
    public partial class Principal : Form 
    { 
        public Principal() 
        { 
            InitializeComponent(); 
        } 

        private void cmdMostrar_Click(object sender, EventArgs e) 
        { 
            frmMostrar m = new frmMostrar(); 
            m.Show(); 
        } 

        private void cmdBuscar_Click(object sender, EventArgs e) 
        { 
            frmBuscar b = new frmBuscar(); 
            b.Show(); 
        } 

        private void cmdSalir_Click(object sender, EventArgs e) 
        { 
            Close(); 
        } 
    } 
} 

:estructura_datos_csharp:busqueda.jpg
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using System.IO; 

namespace BusquedaSecuencialExterna 
{ 
    public partial class frmMostrar : Form 
    { 
        public frmMostrar() 
        { 
            InitializeComponent(); 
        } 
        
        //Este método despliega los valores almacenados en el archivo previamente creado 
        //Los valores se despliegan al cargar la forma 
        private void frmMostrar_Load(object sender, EventArgs e) 
        { 
            //variable que almacenara lo que se extraerá del archivo. 
            string res; 
            //Creación del objeto de la clase StreamReader que se encargara de leer 
            //el archivo cuya ubicación será en un fólder previamente creado en la 
            //carpeta donde se encuentra la clase program.cs 
            //**NOTA** 
            //La ubicación se escribe ../../Archivo/Informacion.txt, incluyendo la 
            //extensión del archivo, ejemplo Info.dat, Info.txt, etc. 
            StreamReader s = new StreamReader("../../Archivo/Informacion.txt");
            //Ciclo que se encargara de ir almacenando los datos del archivo 
            //(en este caso números) en un arreglo
            for (int c = 0; c < Program.tamano; c++) 
            { 
                res = s.ReadLine(); 
                //Línea especifica que se encarga de guardar la información en un arreglo 
                //Como los datos extraídos del archivo son de texto y se desea manipular 
                //la información como numéricos solo agregamos la parte "int.Parse(res)" 
                //para indicar que lo que queremos almacenar será transformado a valor entero. 
                Program.arreglo[c] = int.Parse(res); 
            } 

            //Ciclo que se encarga de desplegar la información del arreglo en un listbox. 
            for (int i = 0; i < Program.tamano; i++) 
                listBox1.Items.Add(Program.arreglo[i]); 
        } 

        private void cmdCerrar_Click(object sender, EventArgs e) 
        { 
            Close(); 
        } 
    } 
} 

:estructura_datos_csharp:busqueda.jpg
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 

namespace BusquedaSecuencialExterna 
{ 
    public partial class frmBuscar : Form 
    { 
        public frmBuscar() 
        { 
            InitializeComponent(); 
        } 
        // método que contiene el código que realizara la búsqueda (secuencial) 
        int BusquedaSecuencial() 
        { 
            int i = 0; 
            // Se da entrada a la "clave" que es valor que se desea buscar. 
            Program.clave = int.Parse(txtBusqueda.Text); 
            while (i < Program.tamano) 
            { 
                if (Program.arreglo[i] == Program.clave) 
                    return i; 
                i = i + 1; 
            } 
            return -1; // No se encuentra en el arreglo 
        } 

        private void cmdBuscar_Click(object sender, EventArgs e) 
        { 
            try 
            { 
                // Creación de la variable que almacenara el resultado 
                int Res; 
                //llamada al método que realiza la búsqueda binaria y se le asigna a una 
                //variable. 
                Res = BusquedaSecuencial(); 
                //condición que determina si se encontró el elemento, de lo contrario, despliega 
                //un mensaje. 
                if (Res == -1) 
                    MessageBox.Show("No se encontró el elemento"); 
                //Despliegue del Resultado. 
                txtResultado.Text = Res.ToString(); 
                groupBox2.Visible = true; 
            }
            catch 
            { 
                MessageBox.Show("Ocurrió un error"); 
            } 
        } 

        private void cmdLimpiar_Click(object sender, EventArgs e) 
        { 
            txtBusqueda.Clear(); 
            txtResultado.Clear(); 
            txtBusqueda.Focus(); 
            groupBox2.Visible = false; 
        } 

        private void cmdCerrar_Click(object sender, EventArgs e) 
        { 
            Close(); 
        } 
    } 
} 

Al igual que en la ventana de Busqueda secuencial, después de presionar el botón de Buscar, aparecerá un groupbox el cual al principio se encuentra “invisible”, es decir se manipulo la propiedad Visible = false, y cuando se presiona el botón buscar se cambia la propiedad a Visible = true, para mostrar los resultados de la búsqueda.
NOTA: Esta ventana muestra el indice del elemento en el arreglo, es decir, que nos muestra en la posicion en la que se encuentra dentro del arreglo.

No hay comentarios:

Publicar un comentario