Unidad 8 metodos_de_busqueda

714 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
714
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
17
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Unidad 8 metodos_de_busqueda

  1. 1. ESTRUCTURAS DE DATOS UNIDAD 8. MÉTODOS DE BÚSQUEDALa búsqueda se refiere a la operación de encontrar la posición de un elemento, entre un conjunto deellos. Existen diferentes algoritmos para realizar una búsqueda.La operación de búsqueda de un elemento consisten en: 1. Determinar si el número pertenece al conjunto y en ese caso indicar su posición en el. 2. Determinar si el número no pertenece al conjunto.Los métodos de búsqueda más comunes son: • Búsqueda Secuencial o Lineal • Búsqueda Binaria • Búsqueda por Transformación de claves (HASH)Búsqueda Secuencial o LinealEl método más sencillo de búsqueda en un conjunto de datos almacenados en secuencia, como unarreglo, es recorrer este arreglo posición por posición. Esta búsqueda compara cada elemento delvector con el valor deseado hasta que este se encuentra o hasta que se termine de recorrer el arreglo.Búsqueda BinariaEn una búsqueda secuencial se comienza con el primer elemento del vector y se busca en el hasta quese encuentra el elemento deseado o bien hasta que se alcanza el final del vector. Este puede ser unmétodo adecuado para pocos datos pero se requiere una técnica más eficaz para grandes conjuntos dedatos.La búsqueda binaria utiliza el método de “Divide y Vencerás”. Con este método se examina primero elelemento central de la lista, si este es el elemento buscado, entonces la búsqueda ha terminado en casocontrario se determina si el elemento buscado está en la primera o en la segunda mitad de la lista y acontinuación se repite el proceso utilizando ahora el elemento central de esa sublista.Debido a la naturaleza del proceso los elementos del arreglo deben estar previamente ordenados. liz=0; lde=nmax-1; c=(liz+lde)/2; while(liz!=lde && A[c]!=bus) { if(bus>A[c]) liz=c+1; else lde=c-1; c=(liz+lde)/2; } if (A[c]==bus) System.out.println("Encontrado en pos: "+c); else System.out.println("El numero no existe en este arreglo"); 1
  2. 2. ESTRUCTURAS DE DATOSTransformación de claves (Hashing)El método de transformación de claves consiste en convertir una clave dada (numérico oalfanumérico) en un índice o dirección dentro de un arreglo o un archivo. La correspondencia entre lasclaves y la dirección en el medio de almacenamiento se establece por una función de conversiónllamada función HASH.Si se tuviera una lista de 100 empleados y cada uno de ellos se identificara con una clave del 1 al 100,evidentemente puede existir una correspondencia directa entre la clave y la dirección definida en unvector que contenga 100 elementos. Si la identificación del empleado fuera el número de seguridadsocial que contiene hasta 9 dígitos, se necesitarían aproximadamente 999,999,999 posiciones,cantidad difícil de tener disponible en memoria principal sobre todo si la cantidad de elementos realesde información son solo 100 empleados.Para hacer uso del número de seguridad social como un índice en la tabla se necesita un medio paraconvertir el campo clave en una dirección o índice pequeño.La función de transformación de claves, convierte la clave k en una dirección d. d=H(k) Por Ejemplo IMSS= 198724859. d = H(198724859) d= 75; la dirección real es 75 Métodos de transformación de clavesExisten diversos métodos de transformación, que tienen en común la necesidad de convertir claves endirecciones o índices reales. La función de conversión equivale a una caja negra que podríamos llamarcalculador de direcciones o función de transformación de claves, cuando se desee localizar oalmacenar un elemento de clave x, el calculador de direcciones indicará qué posición del arreglo lecorresponde. Algunos métodos de transformación son los siguientes. a) Truncamiento. Ignora parte de la clave y utiliza la parte restante directamente como índice.Si la clave es un entero de ocho dígitos entonces el primero, el segundo y el quinto dígito desde laderecha, pueden formar una dirección real. Aunque es un método rápido puede fallar para distribuirlas claves de manera uniforme. Clave: 8952 4372 Dirección: d = 272 b) Plegamiento. Consiste en la partición de la clave en diferentes segmentos y la combinación deestos segmentos de un modo conveniente (a menudo utilizando la suma o la multiplicación) paraobtener el índice. Generalmente en esta operación se deprecian los números más significativos, obtenidos por elarrastre o acarreo. 2
  3. 3. ESTRUCTURAS DE DATOS 6 2 5 3 8 1 9 4 625 + 381 + 94 = 1100 Si solo se tienen 100 posiciones d=1100 //Se elimina al más significativo d=100 c) Aritmética modular. Esta consiste en convertir la clave a un entero, dividirlo por el tamañodel rango del índice y tomar el residuo como resultado.Ejemplo 1: Si se tienen de 0 a 100 posiciones, entonces:H(k)= K mod (m+1)H(k)=k mod (101)Si H(k) = 234661234 mod 101 d=51Ejemplo 2: Si k= JONAS se convierte a numérico.K= 10+15+14+1+19K=63H(k) = k mod (101)H(k)= 63 mod 101d= 63 d) Mitad del cuadrado. Consiste en calcular el cuadrado de la clave original y posteriormente se elimina un mismo número de dígitos a ambos extremos del valor obtenido. a) K= 4205 k2= 176 82 025 d=82 b) K= 7148 k2=510 93 904 d=93 3
  4. 4. ESTRUCTURAS DE DATOS ColisionesLa función de conversión H(k) no siempre proporciona valores distintos, puede suceder que para dosclaves diferentes se obtenga la misma dirección. Esta situación se denomina Colisión y se debenencontrar métodos para su correcta resolución.Por ejemplo: a) H(123445678) =123445678 mod 101=44 b)H(123445880) = 123445880 mod 101=44Una primera forma para solucionar este conflicto es la utilización de algún método para la generaciónde una posición alternativa, es decir calcular una segunda dirección, y si esta aún no es una direccióncorrecta se produce una tercera dirección. 1° H(k): Aritmética modular H( 12345678) = 44 Como esta dirección ya está ocupada, se43 recurre a una segunda44 12345779 alternativa.45 2° H(k) : Plegamiento… H(12345678) = 123+456+779= 1257 d=5757Resolución por EncadenamientoUna solución más efectiva al conflicto de colisiones es permitir una lista enlazada de elementosformada a partir de cada posición del arreglo.En este método de resolución de colisiones conocido como encadenamiento, cada posición del arregloapunta a la referencia del elemento inicial de la lista. 4
  5. 5. ESTRUCTURAS DE DATOS4344 12 345678 12345779454647 5

×