PAGINA
Quest Magazine
Edición: Métodos de Búsqueda
CONTENIDO Métodos de Búsqueda
3
¿Qué es una Búsqueda?
4
Búsqueda Lineal Búsquedas Secuenciales y Binarias
5 6
Búsqueda por transformación de claves 9 Árbol Binario de Búsqueda
17
EDITORES: Claudia Esser / Angelica García Barquisimeto, Noviembre’2010
PAGINA 3
Métodos De Búsqueda. La recuperación de información es una de las aplicaciones más importantes de las computadoras. Por ello esta edición está enfocada en los métodos de búsqueda en vectores.
Pero, ¿Qué es una BÚSQUEDA? La búsqueda es una operación que tiene por objeto la localización de un elemento dentro de una estructura de datos. Hoy en día los programadores se enfrentan al manejo de grandes cantidades de datos, siendo los mismos almacenados en arreglos . Más adelante podrá requerirse la revisión de cualquiera de los datos contenidos, por consiguiente será necesario utilizar el método de búsqueda más apropiado dependiendo de las necesidades del programador. Por ejemplo: para realizar una búsqueda en un arreglo de una dimensión pueden utilizarse uno de estos dos métodos de acceso: búsqueda lineal y búsqueda binaria.
PAGINA 5
Búsqueda Lineal consiste en recorrer el arreglo secuencialmente hasta dar con la clave buscada y en ese punto devolver el índice.
Este método funciona bien con arreglos pequeños o para arreglos no ordenados. EJEMPLO: Algoritmo:
Recorrer
el
vector
de
inicio a fin, comparando el dato buscado
con
cada
elemento
del
arreglo.
Implementación: La función que realiza una búsqueda lineal de un valor entero en un vector de enteros. La función recibe como parámetros el vector, la cantidad de elementos que hay en el vector (N) y el valor entero que se busca. Si se encuentra el valor entonces se devuelve la posición de este, sino se devuelve la cantidad de elementos del vector
Este
método se carac-
teriza por dividir la lista varias veces hasta que se consiga el elemento buscado, comenzando por el elemento central en la lista y si no es el que se busca a su vez divide las partes superior e inferior de esa lista repitiendo siempre el mismo proceso hasta que finalice la búsqueda.
Útil para vectores ordenados Factible para vectores con grandes cantidades de elementos.
PAGINA 7
Este método Consiste en recorrer el arreglo elemento a elemento e ir comparando con el valor buscado (clave). Este tipo de búsqueda compara cada elemento del vector con el valor a encontrar hasta que este se consiga o se termine de leer el vector completo. Cuando finalice se debe visualizar un mensaje similar a “Fin de Búsqueda” o “Elemento encontrado” y otro que diga “posición=” en caso contrario, se muestra un mensaje similar a “Elemento no existe en la Lista”. Este método hace un uso excesivo de tiempo en la localización del elemento a encontrar si el vector contiene grandes cantidades de elementos, ya que recorre todo el vector; por lo tanto No es factible para vectores con grandes números de elementos.
PAGINA 9
Búsqueda por transformación de claves
En este método cada dato es identificado por una clave.
La función Hash aplicada, da un índice del array, permitiendo acceder directamente a sus elementos
Convierte la clave dada (numérica o alfanumérica) en una dirección (índice) dentro del array. La correspondencia entre las claves y la dirección en el medio de almacenamiento o en el array se establece por una función de conversión (función hash). Las funciones HASH (H) más aplicadas son:
Función Módulo (por división).
Función Cuadrado. Función Plegamiento.
Función Truncamiento.
Funciones Hash más Aplicadas Función Módulo (por división) Se selecciona el residuo de la división de la clave entre el número de componentes del arreglo.
La formula de la función HASH es: H(K) = (K mod N) + 1
NOTA: Es preferible que N sea el numero primo inmediato inferior al número total de elementos
PAGINA 11
Funciones Hash más Aplicadas Función Cuadrado Se eleva al cuadrado la clave y se seleccionan los dígitos centrales como dirección. El rango del índice indica el número de dígitos a seleccioLa suma de una unidad a los dígitos centrales es para obtener un valor entre 1 y N.
Ejemplo: Sea N=100 el tamaño del arreglo y sus direcciones entre 1 y 100 Sea K1= 7259 Dos claves a los que deben asignarse posiciones en el arreglo. Sea K2=9359 K1 al cuadrado = 52693081 K2 al cuadrado= 87590881 Por lo tanto: H(K1)=digitos_centrales (52 693 081) +1= 94 H(K2)=digitos_centrales ( 87 590 881) +1= 91
Funciones Hash más Aplicadas Función Plegamiento Se divide la clave en partes de igual número de dígitos (la ultima puede tener menos dígitos) y operar con ellas, tomando como dirección los dígitos menos significativos. La operación entre las partes puede hacerse por medio de sumas o multiplicaciones.
Por ejemplo, si dividimos el número de 7 cifras en 2, 2 y 3 cifras y se suman, dará otro número de tres cifras (y si no, se toman las tres últimas cifras): 5700931 »> 57 + 00 + 931 = 988 3498610 »> 34 + 98 + 610 = 742 0056241 »> 00 + 56 + 241 = 297 9134720 »> 91 + 34 + 720 = 845 5174929 »> 51 + 74 + 929 = 1054
La función HASH queda definida por la formula:
PAGINA 13
Funciones Hash más Aplicadas Truncamiento Consiste en dividir el número en diferentes partes, y operar con ellas (normalmente con suma o multiplicación). También se produce colisión.
Por ejemplo, si un número de 7 cifras se debe ordenar en un arreglo de elementos, se pueden tomar el segundo, el cuarto y el sexto para formar un nuevo número:
La función HASH queda definida por la Fórmula:
5700931 »> 703 3498610 »> 481 0056241 »> 064 9134720 »> 142 5174829 »> 142
H(K) = ElegirDigitos (d1,d2...dn) + 1
¿Cómo deben Tratarse?
Hay varias formas de solventar las colisiones. La forma más efectivo es crear un arreglo de punteros, donde cada uno señale el principio de una lista enlazada y cada elemento que llega a un determinado índice se pone en el último lugar de la lista de ese índice.
PAGINA 15
Ejemplo
Programa que mediante bĂşsqueda hash encuentre los datos requeridos y trata las colisiones.
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 WindowsApplication1 { public partial class Form1 : Form { private int[] datos = new int[5] {1679, 4567, 8471, 0435, 5033 }; private int[] hash = new int[7]; private int[] enlace = new int[7]; public Form1() { InitializeComponent(); for (int b = 0; b <= 6; b++) { enlace[b] = -9999; } //Reacomodo por hash int r, aux=0; for (int i = 0; i <= 4; i++) { r= datos[i] % 7; if (datos[i] == 0) { hash[r] = datos[i]; } else { for(int s=0;s<=6;s++) { if(hash[s]==0) { aux=s;
Continuaci贸n Ejemplo } } hash[aux]=datos[i]; enlace[r] = aux; } } } private void buscar_Click(object sender, EventArgs e) { int temp,r; temp = int.Parse(textBox1.Text.ToString()); r = temp % 7; if (temp == hash[r]) { MessageBox.Show("Se encuentra en \nel renglon:" + r.ToString(), "Resultado"); } else { while(enlace[r] != -9999) { if (temp == hash[enlace[r]]) { MessageBox.Show("Se encuentra en \nel renglon:" enlace[r].ToString(), "Resultado"); r = enlace[r]; } } } } } }
PAGINA 17
Árbol Binario de Búsqueda Cumple que el subárbol izquierdo de cualquier nodo (si no está vacío) contiene valores menores que el que contiene dicho nodo, y el subárbol derecho (si no está vacío) contiene valores mayores. Hay una relación de orden establecida entre los elementos de los nodos. Dicha relación puede estar o no definida dependiendo de cada lenguaje de programación . Deduciendo así que puede haber distintos árboles binarios de búsqueda para un mismo conjunto de elementos.
Métodos de Búsqueda Búsqueda Secuencial / Lineal
El proceso de búsqueda secuencial es una de las operaciones más comunes en la manipulación de arreglos. Puede definirse como el proceso de determinar el elemento, o su posición, que cumple una condición, comparando con cada uno de los elementos en forma secuencial. Es el método de búsqueda recomendado cuando se tiene un arreglo en el cual no se conoce la relación entre sus elementos, es decir estos están desordenados QUE SE TIENE: Para llevar a cabo esta tarea se requiere de la siguiente información de entrada: • El arreglo • La dimensión del arreglo • La condición: el valor a buscar
QUE SE PIDE: Determinar La posición POS donde se encuentra VALOR en el arreglo A. Note que tiene dos posibles resultados: • Encontrar VALOR en A • No encontrar VALOR en A
COMO LOGRARLO: Para llevar a cabo esta tarea se requiere de tres pasos: • Asumir que VALOR no se encuentra en el arreglo • Recorrer el arreglo hasta encontrar o no encontrar VALOR en el arreglo • Determinar si encontró o no el VALOR: • Encuentra VALOR en el arreglo cuando termina la búsqueda y no ha terminado de recorrer todo el arreglo. En este caso POS almacena la posición donde se encuentre VALOR en X. • No encuentra VALOR en el arreglo, En este caso termina de recorrer el arreglo. POS almacena la posición donde se encuentre VALOR en X. Quedando POS con el valor cero.
{ Proceso de Búsqueda Secuencial de VALOR en el arreglo A } { Inicializaciones } POS := 0; I := 1; { Recorrido del arreglo buscando VALOR } While ( ( I< = N ) and ( A[ I ] <> VALOR ) ) do I := I + 1; { Determinar si encontró o no } If I <= N then POS := I;
PAGINA 19
E
xisten distintos métodos de búsqueda dependiendo
de las necesidades del programador, hay métodos de acceso más rápidos q otros, en los cuales el tiempo de búsqueda es independiente de los elementos que contengan el arreglo y las dimensiones del mismo. Las aplicaciones pueden ser infinitas, ya que son utilizados en diferentes rutinas diarias. Decimos que la elección del método de ordenamiento está directamente relacionada con la estructura de los registros del archivo y del soporte utilizado. Es por ello que los métodos de búsqueda seleccionados para “x” arreglos serán correspondientes a la complejidad y a lo que sea requerido por parte del programador.
REFERENCIAS INFORMATIVAS
http://www.monografias.com/trabajos55/metodo-de-la-burbuja/metodode-la-burbuja2.shtml
http://www.mailxmail.com/curso-aprende-programar/metodosordenamiento-busqueda
http://members.fortunecity.com/estructura8/tareas/tarea5.htm
http://www.programacionfacil.com/estructura_datos_csharp:busqueda_hash
Referencias Visuales
http://www.risesmart.com/risesmart/blog/career-100-lets-you-search-the-content-of250-career-blogs-with-one-query/
http://www.rompecadenas.com.ar/wp-content/uploads/bldftiwqstwjc6k5kix91.jpg
http://www.mergeleftmarketing.com/vsImages/Information/Images%20for% 20Consultation/Search.jpg
http://1.bp.blogspot.com/_lj8FQrkyUIw/SY_5PjvZKgI/AAAAAAAAA6M/QuBli0AFFUs/ s400/B%C3%BAsqueda+2.jpg
http://unmundobinario.files.wordpress.com/2008/11/binario.jpeg
http://2.bp.blogspot.com/_b-sA-nDHdRI/S9mlCitIJ5I/AAAAAAAAAIk/l-ZSeiWuEuE/ s1600/hombre-anaranjado-con-la-lupa-thumb2995849.jpg
http://www.istockphoto.com/file_thumbview_approve/7779182/2/ istockphoto_7779182-search-icon.jpg
http://4.bp.blogspot.com/_Ue56eN_5bZk/SfiQE0o-tbI/AAAAAAAAABw/g0fwgia87kE/ s320/Arbol+Binario+de+busqueda.bmp
http://www.rvfformacion.com/file.php/1/CURSO_LEY_DE_PROTECCION_DE_DATOS.jpg
http://es.wikipedia.org/wiki/Archivo:Tabla_hash1.png
http://www.tallerjual.com/images/candados.jpg