Download as pdf
Download as pdf
You are on page 1of 63
Fauna 9 Ejemplo pracco debisqueds, Capitulo METODOS DE BUSQUEDA | 9.1 INTRODUCCION Este capitulo se dedica al estudio de una de las operaciones més importantes en el pto- cesamiento de informaci6n: la biisqueda. Esta operacién se utiliza basicamente pari ecuperar datos que s¢ habjan almacenado con anticipacién, El resultado puede ser de ) entonces scribir “La informacion no est enol areglo"” Escribir “La informacin se encuentra en la posicidn’, 1 ‘5 (Fin del condicional del paso 4) ‘A continuacién se presenta una variante de este algoritmo, pero utilizando recurs Vid, en lugar de neraividady 394 Capitulo 9 @ Mero00s o¢ Bisqueoa gresar a Secuencia a “12 {Pin del condicional del paso 1.1} 1 {Fin dl condi Igoritmo de busqueda 92 Bismeoaunma 395 “Looe estaba S's 39 ose coms ellen co a lor ales npr elemneato conan valor mayor si mismo OF VM) sesame un cas de ase leet 9 xe tnegloS1X=Wenlonessencont al element ene eo ‘A continuacidn se presenta el algoritnto de busqueda en arreglos ordenados. pero en forma recursiva. Asin 9< SLSR 5 _ Seven rend sctsv 8%.) [Ese algoritmo busca en forma secuencial y recursiva al elemento X en un arreglo unidi- ‘mensional ordenado V, de N componentes. Vse encuentra ordenato de manera creciente: VIL) = Vi2}<...« VIN}. inicialmente tiene el valor de 1) : 1. Si=sMy > MD) Lamar a Seeurncial_ordenado_secursivo con V,N,Xe 1+ 1 Li Si > Mo < MD) Escrbi “La informacién no se encuentra en el arreglo” sino -Esesibir “La informacién se encuentra en la posicion”, 1 4.2 {Fin del condicional del paso 1.15 2. {Fin dl condicional del paso 1) Con. to, asta que Hleguemos al final de la lista ‘de arre- alos, se ntrar ordenada 0 desordenada, simplemente. f con 10s conocimientos que tiene sobre listas y basqueda, puede implementar fécilmente los otros algoritmos. Aloo 9% Seevesaasezdesotenda ‘Secuencia fista_desordeneda (P, X) {Exe algori busce en forma secvencial al elemento X en wa tia plement gad, que smacenainfomacién que ext desordenada Pex un spuntador al prim nodo del i. INFO y LIGA son fos campos cada modo} {Q.esina viable de tipo apuntader) Si la lista estuviera ordenada se modificarfa este algoritmo, incluyendo una com dicién simitar a la que se escribi6 en el algoritmo 9.3. Esto iltimo con el objetivo de disminuir el nimero de comparaciones. ‘A continuscién se presenta la variante recursiva de este algoritmo de basqueds secuencial en listas simplemente ligadas desordenadas, 596 Capitulo 9 @p Mero0080: wisoUr6 | Algoritmo 9.6 Secuencial_lista_desordenada_recursivo Andlisis de la busqueda secuencial BI nimero de comparaciones es uno de los factores més importantes que se utilizan para ‘determinar la complejidad de los métodos de bisqueds. Para analizar la complejidad de Ia busqueda secuencial, se deben establecer los casos mas favorable o desfavorable que se presenten. ‘Al buscar, por ejemplo, un elemento en un arreglo unidimensional desordenado de LN componentes, puede suceder que ese valor no se encuentre; pot lo tanto, se hard 1 9.2.2 TARAS Complejidad del tod de bisqueda Secuencia 92 Bisquipa smn 397 comparaciones a recorrer todo el arreglo, Por otra parte, si el elemento se encuentra en clarreglo, éste puede estar en la primera posiciOn, en la dtima 0 en alguna intermedia Si sel primero, se hard una comparacién; si se trata del dhtitno, se hardin N comparaciones;, yy sise encuentra en la posici6n i (1 VICEND Hacer 2Q = CEN+ I sino . Hacer DER = CEN-1 2.1.2 (Fin del condicional de paso 2.1.1) 2.2 (Fin dl condicional del paso 2.1) ay TS. 4, (in del cielo de paso 2) 4: Si(BAN = VERDADERO) centonces Eserbir“La informacion est en la posicin", CEN Eseribir “La informacién no se encuentra en el arregio” 'S. (Fin del condicionsl del paso 4) ‘Analicemos ahora un ejemplo para ilustrar el fancionamiento de este algoritino, Sea V un arteglo unidimensional de mimeros enteros, ordenado de manera reciente, ‘como se muestra en la figura 9.2. En la tabla 9.2 se presenta el seguimiento del algoritmo 9.7 cuando X es igual a 325 (x= 325), En la figura 9.4 se observa gréficamente, para este caso en particular, cémo se va reduciendo el intervalo de bisqueda. 101 | 215 |325 | 410] so2 | 07 |600 | 610) 612 670 123 45 67 8 9 10 Bisquedebinatia TABLAS Bisquedabinaia FIGURA Reduci dl itealo ebisqueda Past Faso 2.0 Paso 3 dela ‘able 92 1 Fao 1 105 «325=S027No 325>5022 No. 2 Falio 142 mase2is7No 3255218980 3 Fal 3 4 3 3252325251 4 Verdadero La tabla 9.3, por otra parte, muestra nuevamente el seguit para X= 615, valor que no se encuentra en el arreglo. La figura 9.5 representa gréficamente c6mo se va reduciendo el intervalo de bis ‘queda hasta anularse (DER <1ZQ). ‘A comtinuacién se presenta una variante del algoritmo de bisqued binaria que no utiliza bandera —BAN—. jento del algoritmo 9.7 1 Fao 1 10S GIS S027No 615>502?8h 2 Faso 6 10 B15=6102N0 615 > 61091 3 ako 9 10-9 GIS=6IZPNo 61S >012 254 4 Faso 10 1 1 G1S=6702No_G15>6702No 5 Falso w 8 12Q=CEN DER ° 400 Capitulo 9 @ Miroocs ac wusqutoa FIGURA SS Redcidn dl igerilo se bisqueda. a) Pa 1. 1) Paso 2.0 Paso 3. Paso. Faso 5 de Tacabla93, 5 | » LS tt TZQ=CEN DER 10. 9 ~ 1 12Q=DER=CEN! 9 : o LJ tt DER 12g Algoritmo 9.8 Binaria_sin_bandera mente {ste algoritmo busca al elemento Xen el arreglo unidimensional ordenado V de N ponentes) Wek outt {1ZQ, DER y CEN son rariables de tipo entero) om ‘ 4, Hacer IZQ = 1, DER =1Vy CEN + PARTE ENTERA ((IZQ + DERY2) 2 Mientras ((ZQ DER) y (X VICEN)) Repetir 2A SiX> VICEN) entonces é Hacer 1ZQ + CEN +1 sino ¥ ice DER + CEN —1 222 (Fin del condicional del paso 2.1) iacer CEN + PARTE ENTERA ((12Q + DERJ2) 3. (Fin del cielo de paso 2} . 4 Si 02Q>DER) 9.2 Bisousoa nema 401 Escribir “Lo informacién no se encuentra ene] arregio” Excribir “La informacién se encuentra en la posicign”, CEN 5. (Fin del condicional de paso 4) Finalmente, se presenta una versién recursiva de este algoritmo de biisqueda binaria. Algoritmo 99 Binaria_recursivo Binaria_recursivo (¥, 1ZQ, DER, X) {Este algoritmo busca al elemento X en el arreglo unidimensional ordenado V de N compo- nentes. 1ZQ ingresainicialmente al algoritmo con el valor de 1. DER, por otra part, ingress com el valor de N) {CEN es una variable de tipo entero} 1, Si(2Q= DER) Escrbir X, No se encuentra en el arreglo” Hacer CEN « PARTE ENTERA ((DER + 122) Lt Si@’=VICEN) Bsribir “El dato buscado se encuentra en Ia posicién”, CEN LLL Si0X>VICEN)) Regresar a Binaria_recursivo con V, CEN + 1, DER, X Regresar a Binaria_secursivo con ¥, IZ, CEN = 1, X 1.1.2 (Fin del condicional det paso 1.1.1) 1.2 (Fin del condiciona de paso 1.1) 12. (Fin del condicionst del paso 1) Analisis de la busqueda binaria Para analizar la complejidad del método de buisqueda binaria es necesario establecer Jos casos mas favorables y desfavorables que se pudieran presentar en el proceso de ‘iisqueda, El primero sucede cuando el elemento buscado es el central, en dicho caso ‘se hard una sola comparacién; el segundo sucede cuando el elemento no se encuentra en el arreglo; entonces se hariin aproximedamente log, (n) comparaciones, ya que con ‘cada comparacién el niimero de elementos en tos cuales se debe buscar se reduce en un factor de 2. De esta forma, se determinan los niimeros minimo, mediano y mximo 4e es que se deben realizar cuando se utiliza est tipo de bisqueda. 402 Capitulo 9 @ Mero00s n sisovron 9.2.3 TABLA 94 omplejdad del todo de queda binaia ’ _ (+08, (¥) Formula 92 Coin 21 Co 2 Cou, = Hops (NV) En la tabla 9.4 se presentan, para distintos valores de N, los mimeros minimo, me- iano y méximo de comparacionesrequeridas para buscar tn elemento en un arreglo, aplicando el método de bisqueda binaria, Si se comparan los valores de la tabla 9.1 con los de la tabla 9.4 resulta claro que ‘el método de busqueda binaria es mas eficiente que el método de biisqueda secuencial ‘Ademis, la diferencia se hace més sigificatva conforme més grande sea e tamafo de. aureglo. Sin embargo, no hay que olvidar que el método de bisqueda binariatrabaje solamente con arregos ordenados: por lo tanto, sel arepl estuviera desordenado antes de emplear este método, aquel deberfa ordenase Cabe destacar, sin embargo, que la ondenacién de un arreglo también implica com paraciones y movimientos de elementos, asi que si se va a realizar s6lo una bésqueda Sobre un areglo desordenado conviene utilizar el método secuencial. En cambio, si se realizan bisquedss en forma contin, convendria ordenarlo para poder splicar el mé- todo de bisqueds binaria Biisqueda por transformacién de claves Los dos métodos analizados anteriormente permiten encontrar un elemento en un arre ‘glo. En ambos casos el tiempo de biisqueda es proporcional a su nimero de componen- tes, Es decir, a mayor nimero de elementos se debe realizar mayor nimero de compara ciones, Se mencion6 ademas que si bien el método de bisqueda binaria es més eficiente que el secuencial, existe la restricein de que el arreglo se debe encontrar ordenado. Esta seceién se dedica a un nuevo método de bisqueda. Este método, conocido como transformacién de claves o hash, permite aumentarla velocidad de busqueda sin necesidad de tener fos elementos ordenados. Cuenta con la ventaja de que el tiempo de thisqueds es independiente del nimero de componentes del arregl. ‘Supongamos que se tiene una coleccién de datos, cada uno de ellos identificado por ‘una clave, Es claro que resulta atractivo tener acceso a ellos de manera directa es decir, sin recorrer algunos datos antes de localizar al buscado. El método por transformacién de claves permite realizar justamente esta actividad: es decir, localizar el dato en forma 10 1 25 4 109 1 ‘ 7 00 1 s ° 1000 1 ss 0 9.2.4 92 Bisovpaernma 403 directa, El método trabaja utilizando una funcién que convierte une clave dada en una direccién —indice— dentro del arreglo. direccién — H (clave) La funcisn hash (H) aplicada a la clave genera un indice del arreglo que permite acceder directamente al elemento. El caso mas trivial se presenta cuando las claves son ‘mimeros enteros consecutivos. Supongamos que se desea almacenar la informacién relacionada con 100 alumnos ccuyas matriculas son nimeros del | al 100, Eneste caso conviene definir un arreglo de 100 elementos con indices numéricos comprendidos entre los valores 1 y 100. Los dates de cada alurano ocupardn a posicin de arreglo que se corresponda con el nimero de lama trfcula; de esta manera se podré acceder directamente a I informacion de cada alumno. Consideremos ahora que se desea almacenar la informacién de 100 empleados. La clave de cada empleado coresponde al nimero de su seguro soci. Sila clave esté forma- dda por 11 digitos, resulta por completo ineficente definir un arreglo con 99 999 999 999 elementos para almacenar solamente los datos de los 100 empleados. Utilizar un arreglo tan grande asegura la posibilidad de acceder directamente a sus elementos; sin embargo, el costo en memoria resulta tantoridiculo como excesivo. Siempre es importante equili- brar el costo del espacio de memoria con el costo por tiempo de bisqueda, Cuando se tienen claves que mo se corresponden con indices —por ejemplo, por ser alfanuméricas—, 0 cuando las claves representen valores numéricos muy grandes ‘no se corresponden con los indices de los arreglos, se utilizaré una funcién hash que permita transformar Ia clave para obtener una direccién apropiada. Esta funciGn hash debe ser simple de calcular y asignar direcciones de la manera mas uniforme posible. Es decir, debe generar posiciones diferentes dadas dos claves también diferentes. Si esto Sltimo no ocurre (H(K,) = d, H(K,)= dy K, # K,) hay una eolisi6n, que se define como J asignacién de una misma direceién a dos o mas claves distinta. En este contexto, para trabajar con este mStodo de busqueda se debe seleccionar previamente: Una funcién hash que sea ficil de calcular y distribuya uniformemente las claves. Un método para resolver colisiones, Si éslas se presentan, se contaré con algiin étodo que genere posiciones alternativas, Estos dos casos se tratarin en forma separada. Como yase mencioné, seleccionar una buena funcién hash es muy importante, pero es dificil encontrar. Bésicamente porque no cexisten reglas que permitan determinar cudl ser a funcién més apropiada para un conjun- tode claves que asegure la mxima uniformidad en su distribucién. Realizar un andlisis de las principales caracteristicas de las claves siempre ayuda en la eleccién de una funci¢n {de est tipo. A continuscidn se explican algunas de las funciones hash més utilizadas. division Funci6n hash por moduli La funcidn hash por médulo o divisién consiste en tomar el residuo de la diviside de Ja clave entre el niimero de componentes del arreglo. Supongamos, por ejemplo, que se 404 Capitulo 9 @ Méro00s ve stsoueon 9.2.5 tiene un arreglo de N elementos, y K es a clave del dato buscar La funcién hash quis definida por la siguiente formula * H(K) = (K mod W) +1 Férmula 83 En la formula 9.3 se observa que al residuo de la divisin se le suma I, esto time ccon el objetivo de obtener un valor comprendido entre 1 y N. Para lograr mayor uniformidad en ia distribucién, es importante que NV sea un me mero primo o divisible entre muy pocos nimeros, Por lo tanto, si N no es wn mimes primo, se debe considerar e] valor primo més cercano, En el ejemplo 9.2 se presenta un caso de funcién hash por médulo. Supongamos que N = 100 es el tamafio del arreglo, y las direcciones que se deter asignar a los elementos (a! guardarlos 0 recuperarlos) son los ntimeros del 1 al 108 Consideremos ademds que K, = 7259 y K,=9 359 son las dos claves alas que se debe asignar posiciones en e! areglo. Si aplicamos la f6rmula 9.3 con V= 100, para calcalar las direcciones correspondientes a K, y K,, obtenemos: HK.) = (7 289 mod 100) + HK.) = (9.359 mod 100) + =60 60 Como A(K,) es igual a H(K,) y K, es distnto de K,, se esté ante una colisién quese debe resclver porque a los dos elementos le corresponderfa la misma direcci6n, Observemos, sin embargo, que si aplicéramos la férmula 9.3 con un niimero prime cereano a N, el resultado cambiarfa: H(K,) = (7 259 mod 97) + 1 = 82 H(K,) =(9 359 mod 97) + 1 = 48, Con N= 97 se ha eliminado la eotisién, Funcién hash cuadrado La funcién hash cuadrado consiste en clevar al cuadrado Ie clave y tomar los digitos ccentrales como direccién. E! niéimero de digitos que se debe considerar se encuentra determinado por el rango del indice. Sea K la clave del dato a buscar, la funcién hash cuadrado queda definida, entonces, por la siguiente frmula . ¥ H(K) = digitos_contrates (K?) +1 Formula 94 La suma de una unidad a los digitos centrales es «til para obtener un valor com= prendido entre I y N. En el ejempio 9.3 se presenta un caso de funcién hash cuadrado. 9.2.6 92 Bisrmnmues 405 Sea N = 100 el tamafo del arreglo, y sus drecciones los nimeros comprendidos eat 1y 100. Sean K, = 7 259 y K, = 9.359 dos claves alas que se deben asignar posiciones enelarreglo, Se apica la formula 9.4 para calcular las direcciones correspondientes a igitos_centrales (52.693 081) + 1= 94 iitos_centrales (87 590 $81) + 1=91 ‘Como el rango de indices en nuestro ejemplo varia de 1 a 100, se toman solamente los dos digitos centrales del cuadrado de las claves. Funcién hash por plegamiento La funcién hash por plegamiento consiste en dividir ls clave ev partes, tomando igual nero de digitos aunque la ciltima puede tener menos, y operar con ellas, asignando ‘como direccién los digitos menos significativos. La operacién entre las partes se puede realizar por medio de sumas 0 multiplicaciones. Sea K la clave del dato a buscar. K esti formada por los dfgitos 4, La funcién ash por plegamiento queda definida por la siguiente férmula: sa — i * HK) = dgmensig (d, od) +d...) tot (dyed) 1 ROrmmula 9.5 I dy on El operador que aparece en la férmula operand las partes de Ia clave es el de suma, pero, como ya se aclar6, puede ser el de la multiplicacién, En este contexto, la suma de tuna unidad a los digitos menos significativos —dfgmensig— es para obtener un valor ‘comprendido entre I y N. En el ejemplo 9.4 se presenta un caso de funcién hash por plegamiento, ‘Sea N = 100 el tamaiio del arreglo, y las direcciones que deben tomar sus elementos los rndmeros comprendidos entre 1 y 100. Sean K, = 7 259 y K, = 9 359 dos claves a las que se deben asignar posiciones en el arreglo. Se aplica la Formula 9.5 para calcular las di- reeciones correspondiente @ K, y Ky De la suma de las partes se toman solamente dos dfgitos porque los indices del arreglo varfan de 1 a 100. 406 Capitulo 9 @ Mér000s be wisaueea 9.2.7 Funcidn hash por truncamiento 9.2.8 La funci6n hash por truncamiento consiste en tomar algunos digitos de la clave » formar con ellos una direccién, Este método es de los més sencillos, pero es también de los que oftecen menos uniformidad en la distribucién de las claves. ‘Sea K la clave del dato a buscar. K est formada por los digitos dy, dyn d,, Le funcisn hash por truncamiento se representa con la siguiente férmmula: * HR) = eegindigtos (dd, d.) +1 Formula $6 La eleccién de los digitos es arbitraria, Se podeian tomar los de las posicionss impares 0 de las pares. Luego se podrian unir de izquierda a derecha o de derechs izguierda. La suma de una unidad a los digitos seleccionados es Gil para obtener we valor entre I y 100. Enel ejemplo 9.5 se muestra un caso de funcién hask por truncamiento. Sea N= 100¢l tamaiio del arreglo,y las direcciones de sus elementos los nimesos entre | y 100, Sean K, =7259 y K,=9 359 dos claves a las que se deben asignar posiciones en & arreglo, Se aplica la f6rmula 96 para calcular las direcciones correspondientes a K, y K- H{K,) = elegirdgitos (7 259) + H(K.) = clegirdigitos (9 359) + En este ejemplo se toman el primero y tercer nimeros de la clave y se unen de inquierda a derecha. Es importante destacar que en todos los casos anteriores se presentaron ejemplos de claves numéricas. Sin embargo, en Ia prictica las claves pueden ser alfabéticas o alfanuméricas, Ea general, cuando aparecen letras en las claves se suele asociar a cada tuna un entero con el propisito de convertirlas en numérica, A BC Dd Zz ol 020327 Si, por ejemplo, la clave fuera ADA, su equivalente numérica serfa QU0401, Si hu- biera combinacién de letras y nimeros, se procederia de la misma manera, Por ejemplo. dada una clave Z4F21, su equivalente numérica seria 2740621. Oura alternativa seria tomar el valor decimal asociado para cada caricter segsin el c6digo ASCIL. Una vez ob {enide la clave en su forma numérica, se puede utilizar normalmente cualesquiera de las funciones antes mencionadas. El ejemplo 9.11 ilustra un caso de clave alfabética Solucién de colisiones La cleccién de un método adecuado para resolver colisiones es tan importante como Ie cleccién de una buena funcién hash, Cuando ésta obtiene una misma direccién para dos, claves diferentes, se esté ante una colisi6n, Normalmente, cualquiera que sea el método 9.2.9 9.2 Busoursawremns 407 clegido resulta costoso tratar las colisiones. Es por ello que se debe hacer un esfuerzo importante para encontrar la funcién que oftezca la mayor uniformided en ta distribu cidn de las claves. La manera més natural de resolver el problema de las colisiones es reservar una casilla por clave; es decir, aquellas que se correspondan una a una con las posiciones del arreglo. Pero, como ya se mencion6, esta soluci6n puede tener un alto costo en memo- ra; por lo tanto, se deben analizar otras alternatives que permitan equilibrar el uso de ‘memoria con el tiempo de bisqueda, En adelante se estudiardn algunos de los métodos més utilizados para resolver coli- siones, que se pueden clasificar > Reasignacién » Arreglos anidados ) Encadenamiento Reasignacion EExisten varios métodos que trabajan bajo el principio de comparacién y reasignacién de elementos. A coutinuaci6n se analizarsn tres de ellos: > Prueba lineal . Prueba cuadrética » Doble direccién hash Prueba lineal Fl método de prueba lineai consiste en que una vez que se detecta la colisi6n, se recorre cl arreglo secuencialmente a partir del punto de colisién, buscando al elemento. El pro- ‘ceso de biisqueda coneluye cuando el elemento es hallado, o cuando se encuentra una pposicién vacfa. El arreglo se trata como una estructura circular: el siguiente elemento después del tiltimo es el primero, A continuacién se expone el algoritmo de solucién de colisiones por medio de la prueba linea. Algorityno 9.10. Prueba lineal Prueba_lineal (V,N,) (Este algoritmo busca al dato con clave K en el areglo unidimensional V de WN elementos. Resuelve el problema de las colisiones por medio del método de prucbs lineal) (D y DX son variables de tipo entero) 1, Hacer D = H(K) {Gener dieceion} - — 2. SiN = VACIO)y (MDI=K) Tecess cntonces 408 Capitulo 9 @ Meroo0s.0 aisqucon TABLA 95 Solucén de clsiones por [a prueba lineal. K=35, Escribir” Hacer DX =D +1 21 Mientras ((DX = 9) y (VIDX] # VACTO) y (VIDX] # K) y (DX » D)) Repesir Hacer DX = DX'41 2 Si(DX= N+ 1) entonces Hacer DX = 1 2.412 (Fin del condicional del paso 2.1.1), 122 (Fin det ciclo del paso 2.1) 23 Si((VIDX|=VACIO) 0 (DX =D) Esribir “La informaciGn no se encuentra en el areeglo” informacién est en la posicién”, D eribir “La informacign est en la posicién”, DX 24 (Fin del condicional det paso 2.3) ‘3. (Fin det condicional del paso 2} La euartacondici6n del ciclo del punto 2.1, (DX # X), es para evitareaeren un ciclo inginito si el areglo estuviera lle y el elemento a buscar no se encontrara en 6 La principal desventja de este métudo es que puede haber un fuerte agrupamiento alrededor de ciertas claves, mientras que ottas zonas del arreglo podsfan permanecer ‘acfas. Si as concentraciones de claves son muy frecuentes, la bsqueda ser prncipal- ‘mente secuencial, perdiendo asf las ventajas del método hash, El ejemplo 9.6 ilusra ob funcionamiento del algoritmo 9.10. ‘Sea V un arreglo unidimensional de 10 elementos. Las claves 25, 43, 56, 35, 54, 13, 80, ¥y 104 fueron asignadas segén la funcién hash: H(K) = (K mod 10) +1 En a figura 9.6 se aprecia el estado de areglo(9.6a) y la tabla con H(K) para cada clave (9.60), En a tabla 9.5 se presenta el seguimiento de las variables importantes del algoritmo 9.10 para el caso del ejemplo anterior El dato a buscar es igual a 35. Al aplicar la funcién hash a la clave 35, se obtene una direccin (D) igual a 6. Sin «embargo, en esa posicién no se encuentra el elemento buseado, por lo que se comienza a recortersecuencialmente el ateglo a pani de la posicién (DX) igual a7. Enestecas0 la bisqueda concluye cuando se encuentra al valor buscado en la posicién 8. 9.2 Busoueoawneana 409 FIGURA 9.6 ‘Solucién de colons por la prueba nea. Aegan Tobia con Hi. TABLA 9 Salucisn de colsiores por la prosba linea 1 0 2 x [Ho 5 a5 | 6 a fod ‘ 8 s6 | 7 s 34 asi] 6 6 25 si] s 7 36 apa soft 8 38 to | s 9 B wo [104 ® » En la tabla 9.6 se presenta ahora el seguimiento de las variables importantes del algoritmo 9.10, pero ahora para un caso més complejo del ejemplo anterior. El dato a busca es igual a 13. Prueba cuadratica El método de la prueba cuadrétiea es similar al anterior. La diferencia consiste en que ‘en el de la prueba cuadrstica las direcciones alternativas se generarén como D+ 1, D+ 4, +9, D+ Fen ver de D+ 1, D +2, .., D +i. Esta variacién permite una mejor Aistribuci6n de las claves que colisionan. A continuacién se presenta el algoritmo de solucién de coli prueba cuadritica, jones por medio de la 410 Capitulo 9 @p Merov0s oF aisoueon Algoritmo 9.11 Prueba_cuadritica ‘Prueba_cuadrética (V,.V, K) (Este slgoritmo busca al dato con clave K en el arreglo unidimensional V de NV elementos Resuelve el problema de ls colisiones por medio de Is prueba cuadritica] {D, DX. Ison variables de tipo entero} 1, Haver D < H(K) {Genera direcei6n} 2. Si(VIDX\* VaCIO) y (MID] = K) [Escribir “La informaci6n est en la posicion”, D Hacer / = 1 y DX = (D +(F* D) 2.1 Mientras (WDM » VACIO) y (VIDX1 # K)) Repetir Hacer! —14 Ly DX = (D+(*D) BLL Si(DX> N) entonces Hacer 1-0, DX = 1yD <1 2.1.2 {Fin del condicions del paso 2.1.1) 2.2 (Fin del ciclo del paso 2.1) +23 SienDX)= Vacto) entonces ‘Bscribir “La informacién no estéen el arreglo” [Escribir “La informacién esté en la posicin", DX 24 {Fin del condicioal del paso 2.3) 1, (Fin dei condicionsl del paso 2} A-continuaci6n se presenta un ejemplo que ilustra el funcionamiento del algoritme 9. ‘Sea V un arreglo unidimensiorall de diez. elementos. Las claves 25, 43, 56, 35, 54, 13, 80, 104 y 55 se asignaron segiin la funcién hash H(K) = (K mod 10) +1 En la figura 9.7 se presenta el estado del arreglo (9.7) y la tabla con H(K) para cada clave (9.76), La tabia 9.7 contiene el seguimicnto de las variables importantes del algoritmo 9.11 ppara el caso del ejemplo anterior, y el date a buscar es igual a35, — ere Soucén de clsanes por la prueba cunt. cst 2 10 92 Busouoanmma 411 FIGURA 97 v Salvin de cosines por 80 (] Sar taacin 2 3s a HN. 3 s4[_a bh | 5 Sa | 6 25, { 56 I 8 a 9/108 10 xs jd! ® » AL aplicar la funcién hash a la clave 35, se obtiene una direccién (D) igual a 6; sin embargo, en esa direcciGn no se encuentra el elemento buscado. Se calcula poste- riormente DX, como la suma D + (J * 1), obteniéndose de esta forma la direccién 7. El algoritmo de basqueda concluye cuando se encuentra el valor deseado en Ia décima posicién del arreglo. En la tabla 9.8 se presenta el seguimiento de las variables importantes del algoritmo 9.11 para un caso més complejo que el anterior, El dato a buscar es $5, Doble direccion hash EI método de doble direccién hash consiste en que una vez que se detecta la colisi6n, se genera otra direccién aplicando la misma funcién hash a la direccién previamente obtenida. El proceso se detiere cuando el elemento es hallado, 0 cuando se encuentra ‘una posicién vacfa. SoTEMA Rint ASS Pons AI2 Capitulo 8 @ wero00s ve sous DH(K, DH(D)) DH) La funcién hash que se aplica no necesariamente tiene que ser la misma que orig nnalmente se aplicé a la clave; podria ser cualquier otra. Sin embargo, no existe ningae estudio que precise cual es la mejor funcién que se debe utilizar en el célcule de tes direcciones sucesivas. Analicemos ahora el algoritmo de solucién de colisiones por medio del método de la doble direccién hash. Algoritmo9.12 Doble_direccién Dobile_direccién (V,., &) (Este algoritmo busca al dato con la clas K en el arreglo unidimensional V de W elementos Resuelve el problema de las eolisiones por medio de le doble dieccién hash) (Dy DX son variables de tipo estero) 1. Hacer D = HU), 2% Si(VIDX] # VACIO) y (VID) = K)) Eseribir “La informacion se encuentra en la posicién’, D Hacer DX — H'(D) 24 Mientras (DX = N) y (VIDA + VACIO) y (VIDX] # K) y (DX # D) Repetir Hacer DX = H1(DX) 22 (Fin del cito del paso 2.1} 23 Si((VIDX] = VACIO) 0 (VID + )) Escribir “La informaci6n buscada noesté en el arreglo” Eseribir “La informacion est en la posicin”, DX. 24 [Fin del condicional el paso 23} |. (Fin del condicional dl paso 2) El siguiente ejemplo ilustra el funcionamiento de este algoritmo, Ejemplo 9.8.5 Vun arreglo unidimensional de diez elementos. Las claves 25,43, 56, 35,54, 13, 80 ¥ 104 fueron asignadas segin la funcin hash N(R) = (K mod 10) +1 a >’) Ademés se defini6 una funcién #' para calcular direeciones alternativas en caso de haber colisin. FIGURA 9.8 Selucion de colsiones I 30 rel método de dole ‘hueccign hash aAeglo, 2 —K [nm [HO Tabla con MIN, HI), g ato | - HID), Hn, . ideas 4 8 slo l. 5 4 as} 6 | 8 6 25 se]os | - 7 xe Bj | 6 wl | 5 38 wor} 5 9 wf 10 18 a » H(D) = ((D+1) mod 10) +1 En la figura 9.8 se presenta ¢h estado del arreglo (9.84) y la tabla (9.86) con HK) para cada clave, y H'(D) en caso de colin. En la tabla 9,9 se presenta el seguimiento del algoritmo 9,12 para el caso del ejem- plo anterior. El dato a buscar es igual a 13, Al aplicar la funcién hash (21) a la clave 13, se obtuvo una direccién (D) igual a4 Como en esa posicién no se encuentra el elemento buscado, se aplica reiteradamente HF, generando direcciones hasta localizar el valor deseado. En este ejemplo fue preciso aplicar tres veces la funcién H’, obteniéndose las direcciones 6, 8 y 10, en la que final- mente se encontr6 el dato buscado. 9.2.10 Arreglos anidados El método de arreglos anidados consiste en que cada elemento del anreglo tenga otro arteglo, en el cual se almacenen los elementos que colisionan. Si bien la solucién pa- rece ser sencilla, es claro que resulta ineficiente. Al trabajar con amreglos se depende del espacio que se haya asignado a éstos, lo cual conduce a un nuevo problema dificil = TT Sali de colores por skmétado de dole dee ‘60 hash. k= 13 3 414 Capitulo 9 @ Méroo0se wusqucoa 9.2.11 FIGURA 99 Socio de calsanes con areglsanidados. rego anidado. ‘Tabla con H. de solucionar: elegir un tamafio adecuado de arreglo que permita un equilibrio entre e costo de memoria y el nimero de valores —que colisionan— que pudiera almacenas. ‘Analicemos un ejemplo. ‘Sea Vun atreglo unidimensional de diez elementos. Los elementos con claves 25, £3, 36, 35, 54, 13, 80 y 104 se almacenaron en el arreglo unidimensional V utilizando Is H(K) = (K mod 10) +1 En Ia figura 9.9 se presenta el estado del arreglo anidado (9.9a) y la tabla con H(K) para cada clave (9.96). Encadenamiento Elmétodo de encadenamiento consiste en que cada elemento del arteglo tenga un apun- tador a una lista ligada, la cual se iré generando y almacenaré los valores que colisionan. Es el método mis eficiente debido al dinamismo propio de las listas. Cualquiera que sea el nGimero de colisiones que se presenten, se podrén resolver sin inconvenientes. Como desventajas del método de encadenamiento se menciona el hecho de que ‘ocupa espacio adicional al de la tabla y que exige et manejo de lists ligadas. Ademds, si Is lists crecen demasiado se perderd la facilidad de acceso directo del método hash. La figura 9.10 muestra la estructura de datos necesaria para resolver colisiones por ‘medio del método de encadenamiento. A continuacién se presenta el algoritmo de solucién de colisiones por encadena- miento, v 1 [eo 2 KS | at 5 | 6 ae 4 alfa | sets s [ss [ioe | 6 [as | 35 sa] 5 | 56 eyes so] 1 8 toa] 5 9 10 ® » 9.2 Duscucnairemne 415 FIGURA 9.10 Salucién de calsones por encadenanients, Algoritmo 9.13 Encadenamiento {Este algoritmo busca al dato con clave Ken el arreglo unidimensional V de N elementos. Resell colsiones por medio de encadenaniel es st ga, SIGe INFO sn los campos de cada nodo dela lista) {0/68 una variable de tipo entero, 0. una variable de tipo puntero} eh iy 0s his at AP Tt Hace = dees) ana ieener centonces Escribir"Laiformain et en I posicéa"sD Hacer Q = YIDISIG {Apuntadoe aa lista) inet ee 2 Mientras (2 VACIO) y (QAINFO# KD) _—e Hacer Q = Q*SIG (Padeteciaeipao 21) peacoat Maat one “La informa nos encuenta en is” oe Eseribir ‘La infomcién se encuentra en ist aati selpwn 23) +. Aiea t ee renel | El funcionamiento de este algoritmo queda més claro con el siguiente ejemplo. 416 Capitulo 9 Gy Méroo0s.¢ wsouron | Bempi09A0) ses verano inno deren Ls element co ces 2. 56, 35, 4, 13, 80 y 104 se almacenaron en el arreglo unidimensional V utlizando is siguiente funcién hash: H(K) = (K mod 10) +1 En a figura 9.11 se presenta el estado del arreglo con encadenamiento (9.112) y is tabla con H(K) para cada clave (9.110). ‘Una vez detectada la colisin en una cierta posici6n del arte, se debe recorrer ix lista asociada a ella hasta encontrar el elemento buscado o llegar asu final. En el ejemplo 9.11 se presenta otto caso de solucién de colisiones por encadens- rmiento donde las claves son alfabéticas, Sea P un arreglo unidimensional de diez elementos, en el cual s almacenan los datos de algunos pinos mexicanos. Se utiliza como clave el nombre de los pinos para asignar a ‘cada uno de ellos una direccién en el arreglo P. Para ello primero se obtendré un niimero ue resultaré de sustituir cada letra por un digito (del 01 al 27), y a este niimero se ke aplicaré la funcién hash (#) definida de la siguiente manera: La tabla 9.10 contiene los nombres de los pinos, el valor numérico asociado (clave y la direccién en P que le corresponde. ‘Como se puede apreciar en la tabla, ha habido colisiones. Para resolverlas, se aplica- rel método de encadenamiento. La estructura resultante se muestra en la figura 9.12. ‘Cabe destacar que cualquiera que sea el método seleceionado para resolver las co- lisiones, se debe tener en cuenta en qué estado queda la estructura al insertar y, sobre todo, al eliminar elementos. La eliminacién es la operacién que més afecta cuando se HouaA a [0 Selucin de essiones por |= cwcadenaiena 2 [cy 3 6 sf_9_ [4}Le 4 {> s6 | 7 s{se [ft TR otis 6] 3 TLS Ls se] 756 Bl . wl io | os 9 10 a » TABLA 9.10 AGURA 9.12 Selucin de olson por tecadenamient. 9.2 Buscveon ema 417 Cembroides 96 7 Eaulis n 3 Cutminicola 1 s Quadrifolia a7 « Pinseana BL 2 Fess 98 ° Ayacahuite 97 8 ‘Teocote a 8 Cooper as 6 Pringlei 2 3 ‘ienen colisiones, por lo que se le debe dedicar especial atenci6n para no perder eficien- ci en la bdsqueda Analisis del método por transformacidn de claves Para analizar la complejidad de este método es necesario realizar varios célculos pro- babilistcos, que no se estudiarén en esta obra. La dificultad del andlisis se debe prin- ‘cipalmente a que no s6lo interviene la funcién hash sino también el método utilizado para resolver Ias colisiones. Por lo tanto, se deberfa analizar cada una de las posibles combinaciones que se pudieran presentar, pinseans edulis c ‘uliminieata ‘cooper ‘cembroides * coatitola | -}—[ aaron eco TT Aexilis 10 Lt 18 Capitulo 9 @, Mérovos 08 sosoueoa 9.2.12 FIGURA 9.13 Represenacon de ties Sea hel factor de ocupacién de un arreglo, defnido como MIN, donde M eset m- mero de elementos en el areglo y Nes su tamafo. Seg Lipschutz, la probabilidad de vara cabo una busqueda con éxito (S)y otra sin éxito (2), quedan determinadas por Jas siguientes férmlas 4) Basqueda con éxito) Basqueda sin & +104) 2 Cabe aclarar que estas formulas son validas solamente en caso de funciones hast can el método lineal de solucién de colisiones. s()= Z(a)= Arboles de busqueda Enel capitulo 6 se presentaron los drboles como una estructura poderosa y eficiente pars almacenar y recuperar informacién. Debido al dinamismo que caracteriza a los drboles, de utilizarlos es mayor cuanto mas variable sea el ndmero de datos a tratar FIGURA 9 92 Bisqenanee 419 En esta seccién s6lo se hablard de Ja estructura trie, que es una variamte de ts 2 tructura tipo érbol. Un trie es una estructura similar a un érbol con N rafces, con la particularidad de ue cada nodo del érbol puede ser nuevamente un trie. En la figura 9.13 se presenta us diagrama correspondiente a un trie que contiene las proposiciones del castellano. Un trie puede representar una estructura sumamente itil para busqueda, Las rafces del 4rbol tienen como objetivo dirigirel camino de bdsqueda hacia la meta. La profundidad de ‘una estructura de este tipo depende de la discriminacién en la clave de biésqueda que reali ‘cel usuario, En la figura 9.13 se puede observar un tie cuya profundidad es variable para ‘cada raiz. De esta forma se localiza la informacién buscada directamente en el nodo termi- nal, sn tener que realizar biisqueda secuencial. En la figura 9.14 el lector puede observar un trie con profundidad tres; la diseriminacién en la clave de bsqueda es igual a 2. Con el propésito de instrumentar esta estructura en un lenguaje de alto nivel, pode- ‘mos representar un trie como un bosque. Posteriormente, aplicandoias reglas necesarias —analizadas en e! capitulo 6—, se debe convertir esta estructura en drbol binario. En la figura 9.15 se muestra el bosque que representa al tre de la figura 9.13. Finalmente, en la figura 9.16 se muestra al 4rbol binario que representa al bosque de la figura 9.15. Reprsentacin de un econ dsciminacn 2 420 Capitulo 9 @_ Mér0905 6 sisquEne FIGURA 9.15, Representacin del rie de e gua 8.13 como bosave Pada Stet “9.3 BUSQUEDA EXTERNA En la seccién anterior se estudiaron las téenicas de bésqueda que son aplicables cuando Ja informacién reside en la memoria principal de la computadora. En particular, se anali- 26 la operacién de bisqueda en estructuras estticas —arreglos— y dinémicas —listas y frboles— de informacién, Sin embargo, existen casos en los cuales no se puede manejar {oda la informacién en memoria principal, sino que es necesario trabajar con informa- ciGn almacenada en archivos. Este tipo de biisqueda se denomina brisqueda externa. Los archivos se usan normalmente cuando el volumen de datos es significativo. ‘0 cuando la aplicacién exige la permanencia de los datos, aun después de que ésta se termine de ejecutar. Como los archivos se encuentran almacenados en dispositivos pe- riféricos —cintas, discos, ete.—, las operaciones de escritura y lectura de datos tienen un alto costo en cuanto a tiempo, por los accesos a estos periféricos. Para disminuir el 93 Busoueon omen 421 TIGURA 9.16 Represertacin del bosque dela figura 9.15 come bo biaio. 422 Capitulo 9 @q Meroo0so¢ susqueoe 9.3.1 9.3.2 tiempo de acceso es muy importante optimizar las operaciones de biisqueda, inser yy eliminacién en archivos. Una forma de hacerlo es trabajar con archivos ordenados. ® ‘continuaci6n se describen algunos de los métodos més utilizados en bésqueda exter Busqueda en archivos secuenciales Los archivos secuenciales son aquellos cuyos componentes o registos ocupan pos ciones relatives consecutivas. Todo componente o registro de un archivo tiene gene ‘mente un campo que lo identifica, llamado eampo lave. Este se encuentra formato por un conjunto de caracteres 0 digitos. Ademds, ocupa la misma posicién elativa en txie Jos registros de un mismo archivo. Alganos ejemplos de campos clave son el nimers de cliente —archivo de clientes—, el nimero de contribuyente —arcivo de haciends— Ja matricula de un alumno —archivo de alumnos—, el nimero de empleado — arsine de empleados—, etc. Puede suceder que la clave de un registro estéformada por me de un campo. Por ejemplo, en un sistema de inventaros cada pieza se podra identi por un campo que haga referencia al departamento al cual prtenece, y ol campe fare Ia pieza en s. Enseguida se describen algunos métodos de busqueda en archivos secuenciales. Busqueda secuencial El método de bisqueda secuencial consiste en recorrer el archivo comparando la cise buscada con la clave del registro en curso. FI recorrido lineal del archivo termina cuande se encuentra el elemento, o cuando se alcanza el final del archivo, Se pueden preseone algunas variantes dentro de este método, dependiendo sobre todo de si el archivo ess dordenado o desordenado. A continuacién se detalla el algoritmo de bdsqueda lineal en un archivo secuensia desordenado, ‘Algoritmo 9.14 Archive_secuencial_desordenado ‘Archive_secuencial_desordenado (FA, K) (Ese algoritmo busca secuencialmente en un archive desordenado M4, un registo con clave n (BAN es una variable de tipo booleano, R es una variable de tipo registro, CLAVE es wn ‘arpa del registeo) 1, Abril archivo FA para lectura 12 Hacer BAN = ALSO |, Mientras ((n0 sea el fn de archivo de FA) y (BAN = FALSO)) Repetir Leer R de FA AM. Si(RCLAVE =X) entonces Bscribir “La informacion se encuentra en el archivo” 93 Bisquompmune 425, perso |g mae at fi ssupoliL ning vont lenemrse ecouprab » & e hi i serra ne palvapabd. "5, Si(BAN = FALSO) entonces a ae Oo Beer Lanfomac6a tose cnet one wcio™ & pea aT Este algoritmo es similar al 9.1. En general, tiene las mismas caracteristicas que & método secuencial en arreglos desordenados. El algoritmo de bisqueda en archivos ordenados se estudiar considerando, en par- ticular, archivos ordenados en forma creciente. Lordenado Algoritmo 3.15 Archivo_secuen sntiia e otee {Est algortmo busca secuencialmente en un archivo FA ordenado en forma crecient, un sogit0 con cle | fA immerse {BAN cs una variable de tipo booleano. es una yaiable de tipo repst. CLAVE es un pnmepnnl wens nearie: Beeb edie lelemledahecatt shina oe) w waren cht ex 8 AD) cosh |. Micnoas((n sa el fin de atchivo de FA) y (BAN = FALSO)) Repetir LeceRde FA eaves BI SHRCLAVE® Ky entonces Hacer BAN = VERDADERO “32 {Fin dl condcional dl paso 3.1) 4 WFindcicodel paso) ‘SiSURCLAVE= A)! 8120 sp tmeet cei a fentonces cpa tae bt) Esribir “La informacisn se encuesraen el archivo” sino in Escribir "La informacién no se encuentra ene archivo” 46, (Fin de condcional del paso 5) La diferencia entre este algoritmo y el anterior consiste en que la bdsqueda tambica se detiene cuando Ia clave de R es mayor que K. Esto tiltimo se debe a que si el archivo est ordenado, ya no se encontraré el registro con clave K entre los registos asia mo visitados, 424 Capitulo 9 @ Me:0005 8 eusaueoa 9.3.3 jisqueda secuencial mediante bloques La bisqueda secuencial mediante bloques consiste en tomar bloques de registros e= vez de registrosaislados. Un bloque es un conjunto de registos. Su tamaho es arbitranc | yy depende del nimero de elementos del archivo, Generalmente se define el tamatio de! bloque igual a VN, donde VN es el nimero de registros del archivo —ia demostracién de por qué-es v/N se presenta més adelante—. El archivo debe estar ordenado. La bisqueds se realiza al comparar la clave en cuestiGn con el siltimo registro de cada bloque. Si ls clave resulta menor, entonces se busca en forma secuencial a ravés de os registos sab teados en el Bloque. En caso contrario se continda con el siguiente bloque. En promedio. limero de comparaciones requeridas para encontrar un valor dado scréigual a VN ‘A continaacisa se presenta un algoritmo de busqueda secuencial usando blogues. Alporitise 9.16 Archivo. secuencial_bloques Archivo_secuencial_bloques (FA, N, K) (Este algoritmo busca secuencialmente en un archivo ordenado FA de W eleinentos, un registro con clave K) (7y 7B son variables de tipo entero, BAN es una variable de tipo boolean) |L Abril archivo FA para lectura 12. Hacer BAN = FALSO, / = 1 y 7B = Parte Entera (sqrt (N)) (Calcul el tamao del ‘logue come ta. rafz cuadrada de ¥) 3. Mientras ((fB * 1.) y (BAN = FALSO)) Repetir: a Leet B de FA en la posicién 7B * 1 A SI(RCLAVE2 K) ‘entonces acer BAN + VERDADERO d Hacer 1141 ‘42 (Fin del condicional del paso 3.1) 4 (Fin de ciclo del paso 3) 5. Si(BAN = VERDADERO) i SRCLAVE= k) scribe “La informacign se encuentra en el archivo” Realizarbisquedasecuencial en los registossalieados: el gist (TB * ({~ 1) + 1) al registro (7B * 1-1) Reposicionar et punto del archivo, yapicar el algortm 9.15 para ‘eutar la bisqueda elemento por elemento ‘52 (Fin del condicional del paso 5.1) sino (Si TB no es mltiplo de W, quedaron elerventos sin revisar) Realizarbisqueda seevencal en los repstrs comprendidos ene (7B U-)+DyN {6 (Fin det condicional dl paso 5} Ejemplo 9.12, 9.3.4 Tama 9.11 isqueds secuencl con Bogue 93 Rirqueoaereme 425 En este algoritmo se lee el ultimo registro de cada bloque, y de la comparacién del. ‘elemento buscado con él se decide emo continuar con la busqueda. El siguiente ejem- plo ilustra mejor el funcionamiento de este algoritmo. Sea FA un archivo ordenado de 20 registros. Los registros ocupan posiciones consecu- tivas con ditecciones relativas del 1 al 20. Las claves de los registros almacenados en FA son 204, 311, 408, 415, 439, 450, 502, 507, 600, 623, 679, 680, 691, 692, 695, 698, 730, 850, 870, 889. Dado que se conoce N, se calcula el tamafio del blogue de la siguiente manera: B= 20: 204, 311, 409, 415, 439, 450, 502, 507, 600, 623, 679, 680, 691, 692, 695, 698, 730, 850, 870, 889. La tabla 9.11 presenta el seguimiento del algoritmo 9.16 para K = 623. En la columina Registro leido aparece el wtimo registro del blogue, pasos 1,2 y 3. En el paso 3, cuando se cumple la condicién de que R.CLAVE = K, entonces se comien- za la busqueda secuencial a partir del elemento (TB * (I 1) + 1) —elemento 9—, en este caso el 600, hasta que se encuentra el valor deseado —éxito— o hasta el elemento (TB * 1-1) —elemento 11—. Observe que en el paso 5 se encuentra el registro buscado. Biisqueda secuencial con indices El método de bisqueda secuencial com indices trabaja con blogues y con archivos de {ndices. En el archivo de indices se almacenan las claves que hacen referencia a cada blogue y la direccién de los bloques en cl archivo. La biisqueda de un elemento comien- za recortiendo el archivo de indices, comparando las claves alli almacenadas con la clave del elemento en cuesti6n. Una vez que se determina el bloque en el cual se puede encontrar el registro buscado, se contimia la bisqueda ahora recortiendo secuencial- ‘mente dicho bloque. JP recente Canarsie 1 1 “set 2 2 swear : : oo espn? v ‘ ao eset 5 os 62326237 426 Capitulo 9 @y Méro008 0 nisouron FIGURE 9.17 Bisquedesecuendal con indices. La desventaja de este método es que requiere més espacio de memoria, ya que se ‘rabaja con dos archivos: el principal, en el cual se almacenan os registros, y el de in- dices. Una forma de acelerar el proceso de bisqueda consiste en mantener en memoria principal el archivo de indices En la figura 9.17 se presenta un esquema de un archivo con su correspondiente archivo de Indices. El archivo de {ndices se recorre secuencialmente hasta encontrar la clave que sea ‘mayor o igual ala clave buscada, Cuando esto iltimo suceda, se tomari la direecidn del bloque apuntado por dicha clave y se aplicard bisqueda secuencial (algoritmo 9.15) en ] {mover >| —faoove2[- ; 1 2 =} frou 3 ‘ 3 [-} facoguei]=] (avoguea|} facogues Directorio de eubetas Bloques 9.3.7 outoa neem 429 en una cubeta mientras otras permanecen vacias. A continuacién se presentan algunas de las funciones hash més comunes. Funciones hash ‘Una funcién hash se puede definir como una transformacién de clave a una direcci6n. Al aplicar una funcién hash a una clave se obtiene el miimero de cubeta en la cual se puede encontrar el registro con dicha clave La funcidn debe transformar las claves para que la direccién resultante sea un nil mero comprendido entre los posibles valores de las cubetas. Por ejemplo, si se tienen 10.000 cubetas numeradas de 0 a9 999, as direcciones producidas por la funcién deben ser valores comprendidos entre 0 y 9 999. Si las claves fueran alfabéticas o alfanumé- ricas, primero deberén convertirse en numéricas, tratando de no perder informacién, para luego ser transformadas en una direccién. Es importante que la funci6n distribuya hhomogéneamente las claves entre los niimeros de cubetas disponibles Las funciones médulo, cuadrado, plegamiento y truncamiento presentadas anterior- ‘mente para bisqueda interna son vélidas también para buisqueda extema, Otra funcién ue se puede utilizar para el célculo de direcciones es Ia de conversion de bases, aunque ‘no proporciona mayor homogeneidad en la distribucidn, De todas, Ia funcién médulo es, sin embargo, la que ofrece mayor uniformidad. Conversiones de bases La conversién de bases consiste en modificar de manera arbitraria Ia base de Ia clave obteniendo un nimero que corresponda a una cubeta. Si el mimero de digitos del valor resultante excede el orden de las direcciones, entonces se suprimirin los digitos més. significativos. Supongamos que se tienen 100 cubetas, cada una de ellas referenciada por un némero entero comprendido entre 1 y 100. Sea K = 7 259 la clave del registro que se busca, Se clige el 9 como base a la cual se convierte la clave. HG 259) = digmensig (7 * 9 +2*9 +5 *9)49*9%) HG 259) = digmensig(S 319) = 19 ‘Se toma entonces como direccién el 19 y los digitos més significativos, 5 y 3, se esprecian, Solucién de colisiones ‘Como se mencioné anteriormente cuando se traté biisqueda interna, uno de los aspectos que siempre se deben de considerar en el método por transformaciGn de claves es la so- Jucién de colisiones. Cuando dos o més elementos con distintas claves tienen una misma direccién, se origina una colisién. Para evitar las colisiones se debe elegir un tamafo adecuado de cubetas y de blo- ‘ques. Con respecto a las cubetas, si se definen muy pequefias el nimero de colisiones, 430 Capitulo 9 ‘FGURA 9.1 Solin de cosions, @_Méro00s pe euscUEDH. ‘aumenta, mientras que si se definen muy grandes se pierde eficiencia en cuanto a espacio, de almacenamiento. Ademiés, si se nevesitara copiar una cubeta en memoria principal y sta fuera muy grande, ocasionarfa problemas por falta de espacio. Otro inconvenient que se presenta en el caso de cubetas muy grandes es que Se tequiere mucho tiempo ppara recorrerla. ‘Con respecto al tamaiio de os bloques, es imporiante considerar la capacidad de stos para almacenar registros. Un blogue puede almacenar uno, dos © mas registros. [Normalmente los tamafios de las cubetas y los blogues dependes. de las capacidades del equipo con el que se esté trabajando, ‘Cabe destacar que utilizando una estructura como la de la figura 9.18 no se tendria problemas de colisiones, debido prineipalmente a que por mas que la cubeta esté ocu: pada, es posible seguir enlazando tantos bloques como fueran necesarios. Este esquema de soluci6n se corresponde con el presentado en biisqueds interna, bajo el nombre de encadenamiente. Sin embargo, no siempre es posible definir una estructura de este tipo Considere, por ejemplo, un archivo organizade en cubetas como el que se muestra en Ia figura 9.19. En este archivo cada cubeta tiene un blogue ¥, por lo tanto, una capacidad méxima determinada por el tamatlo del Bloque asocisdo con ella. Una vez que se satura la capa cidad de Ia cubeta, cualquier registro asignado a ella produciré una colisi6n. A continua: in se analizardin dos maneras diferentes de enfrentar esta situacién, Bloque Bloque [\\ ——— Bloque Directorio de cubetas FIGURA 9.20 93 Bisouinerwrena 431 Uso de areas independientes para colisiones 1 uso de dreas independientes para colisiones consiste en defniréteas separadas —secundarias— de las éreas primaria de almacenamiento, en las que se almacenarén todos los registros que hayan colisionado. El érea de colisiones puede estar organizada de diferentes maneras. Una alternativa consisteen tener el rea comntin a todas las cu- betas. En consecuencia, si se produce una colisién habré que buscar alo largo del tea secundaria hasta encontrar el elemento deseado, segin la figura 9.20, tra forma de organizar el drea de colisiones consste en dvidira en blogues,aso- ciando cada une de ellos a uno del érea primari, Esta alterativa optimiza el tiempo {de biisqueda en el rea de colisiones, pero tiene el inconveniente de que estos blogues podrian, a su ver, satuarse ocasionando nuevamente colisiones. El esquema correspon dicnte a esta estructura se muestra en a figura 9.21 Salucién de colsiones mediante un Sra comin de isons. TN Directorio de cubetas : Area decisis ‘Area prearia| dealmacenamiento 432. Capitulo 9 @, Méro005 or siseueon FiGURA 8.25 Directorio de cuberas ZI MN Area de colisiones Area primaria de almacenamiento Solin de colsiones mediante un ea de clones oganzads en boques Uso de areas de colisiones entre los bloques de almacenamiento primario EL uso de areas de colisiones entre los bloques de almacenamiento primario con- siste en definir éreas de colisiones entre los bloques de almacenamiento primario. Este método es similar al presentado en bisqueda interna bajo el nombre de reasignacién. Una vez detectada una colisién en un bloque se debe buscar en el rea de colisiones in- ‘mediata a dicho blogue. Siel elemento no se encuentra y el rea de colisiones esté lena, se continuaré la busqueda a través de las otras éreas de colisiones. El proceso termins cuando el elemento se encuentra o bien cuando existen espacios vacfos en un bloque tI elemento buscado no se encuentra en el archivo—. El esquema correspondiente este esquema se muestra en Ia figura 9.22. FIGURA 9.22 Salucbn de colsones tmeante biogues pars ‘olsones ent lo Bloque primarias 9.3.8 9.3.9 _ Ejemplo 9.14 — "pone © logue de cots Blogue Bloque de colisiones Directorio de cubetas ‘Area primaria de almacenamiento «on bloques para colisiones, Hashing dinamico: busqueda dinamica por transformacion de claves La principal caracteristica del hashing dindmico es su dinamismo para variar el ni mero de cubetas en funcidn de su densidad de ocupaciOn, Se comienza a trabajar con tun ndmero determinado de cubetas, y a medida que éstas se van Henando se asignan nuevas cubetas al archivo, Existen basicamente dos formas de trabajar con el hashing dindmico: Por medio de expansiones totales » Por medio de expansiones parciales Método de las expansiones totales EI método de expansiones totales es probablemente el mis utilizado. Consiste en du- plicar eI nero de cubetas en la medida en que éstas superan la densidad de ocupacién previamente establecida. Asf, por ejemplo, sie niimero inicial de cubetas es Ny se hace tuna expansién (otal, el valor resultante —nuevo niimero de cubetas— ser 2N. Si se hace una segunda expansién total, se endré 4N, y asf sucesivamente, EI dinamismo de este método también se da en sentido contrario; es decir, que a medida que la densidad de ocupaci6n de las cubetas disminuye, se reduce el nimero de 6stas. Asf, se gana lexibilidad en cuanto a que se pueden incrementar los espacios de al~ macenamiento, pero tambign se pueden reducir si la demanda de espacio asf lo indica. Supongamos que se tiene un archivo organizado en dos cubetas (N= 2), y se ha fijado ‘wna densidad de ocupacién de 80%. La densidad de ocupacién se calcula coro el co- ‘ciente entre el nimero de registros ocupasis y el de registros disponibles. Cada culbera tiene dos registro y la funcién hash que transforma claves en direcciones se define de Ta siguiente manera H (clave) = clave MOD Niimero de cuberas 434 Capitulo 9 @p Mezoo0s oF asqutom FIGURA 9.23 ash dinamo (N= 2 expansion oa FIGURA 9. Hash dino N= expansion oa Cubeias 01 Clave [H(Clave) 2 [15 |e Porcentyje de ocupacion |, wey para expansin: 75% 1s 1 Los valores 42, 24, 15 y 53 son Jas caves de fos registros que se desea almacenar. Inicialmente ef archivo esté vacio. En la figura 9.23 se presenta un esquema de cémo ‘queda las cubetas, después de insertar las tres primeras claves. ‘Cuando se quiere insertar la clave 53, se supera la densidad de ocupacién estableci- 4a, yaque se aleanzaria 100% de lenado, Por lo tanto, se deben expandiry reasigna los registros considerando ahora que el nimero de cubetas es igual a 2*N, figura 9.24, ‘Supongamos abiora que se desea incorporar los registros con claves 21, 12, 14, 18, 49, 128, 22, 23 y 67 en este orden, El resultado, después de insertar las dos primeras claves, se puede observar en la figura 9.25 ‘Cuando se insert el registro con clave 14, la densidad de ocupacién supera el 80% fijado, Se vuelven, entonces, a expandir y a reasignar los registro almacenados (figura 9.264), y luego se continda con Is insercign del resto de los elementos. La figura 9.266 presenta el estado de las cubetas luego de realizar todas las inserciones, excepto la dl- tima, Cuando se insert fa titima clave, 67, se supera nuevamente la densidad de ocupa- cién y hay que volver a expandir as eubetas. Por lo tanto, ahora N ser igual a 16 (figura 9.21), Es importante sefialar que en este método tambjn se pueden produc colisiones, las cuales podrfan tratarse septn alguno de los esquemas propuestos antevioraente, Por «™jemplo, si en el caso anterior (figura 9.26) luego de insertar los registros con claves 24 1 128 se tratara de agregar el registro con clave 192, se producirfa una colisién, ya que ia cubeta 0 esti tena ado un archivo organizado en dos cubetas (N registtos, se quiere almacenar las siguientes claves: ), donde cada una de ellas tiene tres 115, 96, 48, 79, 35, 26, 57, 81, 70, 64, 107, 45, 62, 98, 3, 28 y 38. ‘Se ha establecido una densidad de ocupacién mayor a 82% para expansién y menor 125% para reduccién. Es importante remarcar que el porcentaje de ocupacién, para el Cubews 0 24 orcentaje de ocupacion para expansin: S0% FiGuRA 925 Hash dns expansion total 2) Luegp de irsertar 21 1) luego densa 12. : FIGURA 9.26 Hash dnc )wego de insertar 12 Cubes 0 1 2 3 4 5 7 a pls] 4] is Poscentaje de ocupacién > para expansin: 43.75% @) Cubes 0 12 405 6°97 my) 49 | 2 pls |] Porcentaje de ocupacién = paraexpansion:6875% © [128 | | 18 a | 2 | » 93° Bosoueoa rene 435 Cubeas 0 1 23 2m | 33 | 2 |S Porcenvaje de ocupacisn hr para expansidn: 62.50% a) lave [H(Clave) a] oo wij2 Cubews 0 1 23 «| 2s 2 [2 Porcentae de ocupacién para expansion: 75% a ceaso de reduccidn, se calcula como el cociente entre el miimero de registros ocupados y ‘al niimero de cubetas. ‘A continuacin se presenta la funcién hash que se wiliza: H (Clave) = clave MOD Niimero de cubeias Las claves se almacenan en el orden en que se dan. La representacién final se puede ‘observa en la figura 9.28, En el siguiente ejemplo se aclara el concepto de reduccién del némero de cubetas en el método dinmico por transformacién de claves, con expansiones totaes. 2): expansion teal.) Luego de inset 21 436 Capitulo 9 —@ Méro00s ve sisaueos Cubes o 1 2 3 4 5 6 7 8 9 © RB MoS [es [9 [as | 33 | 2 | 2 | 2 2 ws 2b Poreentaje de ocupacign a acing para reducci6n: 81.25% Porcentaje de ocupacign ara expansion; 40.62% 128 FIGURA 9.27 Hash dinéico (N= 16) expan tot 2 1 0 6 1 3 Ejemplo 9.16 ‘Supongamos que se tiene el archivo en el estado que muestra la figura 9.27. Se desean eliminar ahora los repistros con claves 53, 18, 128, 23, 14, 49 y 22, Al eliminar el registro con clave 53, la densidad de ocupacién disminuye de tal ‘manera que permite reducir el niimero de cubetas (N/2). Luego de la reduccién y de la reasignacién de registros, las cubetas quedan como se muestra en la figura 9.29, Una vez eliminados los otros registros, la densidad de ocupacién permite reducir rnuevamente el nimero de cubetas. En la figura 9.30 se presenta su estado luego de la reduccién de NW y de la reasignaci6n de los tegisttos.. Ejemplo 9.17 Dado el archivo de la figura 9.28 y las especificaciones dadas en el ejemplo 9.15, elimi- ne fas siguientes claves FIGURA 928 Cabeas 0 1 2 3 4 5 6 7 tahdsmio N= 8 Porenaiedeceupacién [95 T's | 26 | us| 28 | 45 | 70 | 79 ‘expan a expansin: 70.83% pesos a6 | ar | 98 | 35 a Porcentaje de ocupacién para reduccisn: 212,50% |S | 33 107 38 9.3 Busqucoasciema 437 ‘Clave [H(Clave) 2] 2 4 15, Cubes 0 1 2 3 4 5 6 7 cl a4] | 2 [a] Rial Mis 0 Porceniaje de oeupacién [5 panenpanin 50%” L28| | 18 nis 18 49 8 2 2 FiGURA 9.28 a Hash dno (N= 8 reduc, 48, 35, 81, 70,45, 33, 38 y 115 ¥y Verifique que el esquema final, luego de realizar las eliminaciones, quede igual al de ia figura9.31. 9.3.10 Método de las expansiones parciales El método de las expansiones pareiales consiste en inerementar en 50 el nimero do ccubetas, haciendo de esta forma que dos expansiones parciales equivalgan a una total Asi, por ejemplo, si el nimero inicial de cubetas es N, y se hace una expansién parcial, i valor resultante sera 1.5N. Si se hacen otras expansiones parciales se tendré 2N, uego 3N, y asf sucesivamente, A continuacin se presenta vn ejemplo de hash dindmico con expansiones par- ciales, FIGURA 9.30 sh nmin (N= a Cobews 9 12 secur, ro zm [a | a2] 5 rcentaje de ocupacién para expansion: 150% 2 o 438 Capitulo 9 Mér0005 8 siscuso FIGURA 9.31 FIGURA 9.32 ash cinco (N= reduc, Cubes 0 1 23 Porcenje de ocupacién ara expansion; 75% 96 | 57 | 26 a a| 9 Porcentaje de ocupacién para reducci6n: 225% cl 98 | 107 Retome el ejemplo 9.14. Suponganros que hasta el momento se han almacenado los registros con claves 42, 24 y 15. Cuando se quiere insertar el registro con clave 53, el limero de registros supera el maximo permitido ya que la densidad de ocupacién supe +8 80%; portal raz6n se realiza una expansién parcial. La figura 9.32 muestra el estado de las cubetas luego de expandir y reasignar los regisros, Observe que en este caso el valor de N no fue muy adecuado para distribuir uni formemente los registros a través de las cubetas. Fn la cubeta 0 se tiene una colisién, ‘mientras que la cubeta 1 permanece vacta ‘Supongamos ahora que se desea incorporar los registros con claves 21, 12, 14, 18, 49, 128, 22 y 23. Al insertar el registro con clave 21 se supera la densidad de acupaci6n, por lo que se deben expandir nuevamente las cubetas y reasignar los registros. Se inserta a conti- rnuacién el registro con clave 12, como se ve en la figura 9.33. ‘Al insertar el registro con clave 14, otra vez se supers el porcentaje de ecupacién permitido. Se vuelven a expandir las cubetas y a reasignar los registros. El resultado final, luego de insertar todas las claves, se muestra en la figura 9.34. Dado un archivo organizado en dos cubetas (N= 2), donde cada cubeta tiene tres regis- tros, se quiere almacenar las siguientes claves: 115, 96, 49, 79, 35, 27, 57, 89, 70, 64, 107, 45, 67, 98, 33, 28, 38, 108, 42 y 15. Para este ejemplo se hs establecido una densidad de ocupacién mayor a 82% para cexpansiGn y menor a 125% para reduccién. A continuaci6n se presenta la funci6n hash que se wiitiza: Hi (clave) = clave MOD Néimero de cubetas Cubes 0 12 Porcentaje de ocupacion [42 3 Clave [H(Clavey para expansion: 66.66% — [> rn au | o 1s | 0 2 J 8 es] 8 FIGURA 9.33 Hash cinco (N= 9 ‘expasion pra Cubews 0 1 23 2 [53 [a2 [as 2 [2 Porcentaje de oewpacién para expansiGn: 15% Observe sila estructura que obtiene es jgual a la que se presents en la figura 9.35. A continuacién se presenta un ejemplo para ilustrar la reduecidn del nmero de cu- betas en el método dinmico por transformacién de claves, con expansiones parciales. ‘Supongames que se tiene un archivo en el estado que muestra la figura 9.346, Elimine Jos registr0s con claves: 53, 18 y 128 ¥ verifique si las cubetas y registros quedan igual ala grfica que se muestra en Ia figura 936, Dado el archivo de la figura 9.35 y las especificaciones dadas en el ejemplo 9.19, elimi ne Tas siguientes claves 67, 104, 15, 45,33, 79, 70 y 107. \erifique siel esquema final que obtiene es igual al dela figura 9.37 Finalmente, es importante sefialar que el tamaio de las Cubetas se debe establecer de acuerdo con el problema que esté intentando resolver. En los ejemplos presentados se han considerade sniialmente dos registros por cubeta. Sin embargo, este niimero es pare que el lector observe el funcionamiento de los métodos si reallzar expansiones y reducciones, Si el mimero de registos que uilizéramos fuera grande, entonces habria «que ingresar gran cantidad de nimeros para observar la expansién de cubetas Indudablemente en la préctica se debe considerar un nimero mucho més grande de registtos por cubeta. El nimero dependeré principalmente del tamafio de cada registro, 4c tal forma que «na cubeta se pueda cargar en ia memoria principal. En aplicaciones _grandes, el nimero de registros por cubeta podria variar de 250 a 500. Si el nsimero de regists por cubeta es pequefio y en forma continua se realizan inserciones y elimi- naciones, entonces podria ocurir que frecuentemente se deban realizar expansiones 0 seducziones, con la consabida pérdida de tiempo y alto costo, por la reasignacién de los registros. Es el usuario quien debe definir entonces el nimero de registros par cubexa para expansion: 150% I 2 formacién: — Se tienen los datos de seis personas: matemitico 32 fisico 0 matemético 25, 9 Mis] 2] 3 Edad Clave Clave) 2 1s [ewes 442 Capitulo 9 @ Méro00s0% ousqueoa FIGUKA Hash dno (N= 8) ceuecion. Cubes 0 12 Porcentaje de ocupacion 73 para reduccién: 150% sed ot | 57 | 98 9, Pascual —_ingeniero 38 Miguel ingenicro B Felipe abogada 35 Considerando que los aributos profesién y edad estén invertidos, « eonsinuacién se presentan algunas operaciones de bisqueda con sus correspondientes resultados, pars que el lector observe el funcionamiento del método. 42) Lista de personas por proesién matemiticos (Juan, José) fisicos {Daniet) ingenieros (Pascual, Miguel} abogados {Felipe} 'b) Lista de todas las personas con profesidn matemitico o fisico, y con més de 25 altos de edad. ((profesién = matemético) OR (profesién ico) AND (edad > 25)) La lista formada segtin el atributo profesidn es: (Juan, José, Daniel} Sobre esta lista se aplicard la segunda condicién planteada en la baisqueds, de lo aque resulta: {hvan, Daniel} {6)_Lista de todos los ingenieros menores de 50 anos y mayores de 40. (profesin = ingeniero) AND ((edad < 50) AND (edad > 40)) La lista formada segtin el atributo profesin es: {Pascual, Miguel) 9.3 Bisyurorseema 443 A partir de esta lista, se buscarin los registros que cumplan con las condiciones impuesias sobre el atributo edad. La lista vesultante sera {Miguel} Considerando que solamente el atributo profesién esta invertido, se presentan algu~ nas operaciones de basqueds con sus cortespondientes resultados. 4a) Lista de todas las personas con profesién matematico o fisico, y con més de 25 afios de edad ((profesién = matemstico) OR (profesién = fisico)) y busqueda secuencial en la lista de los registros marcados para localizar aquellos con edad > 25, {UJuan, José, Daniel} y sobre esta lista una biisqueda secuencial para encontrar a los individuos mayores de 25 afios. +») Lista de todos los ingenieros menores de 50 aflos y mayores de 40. (profesién = ingeniero) y bisqueda secuencial en la lista de los registros marcados para localizar aquellos con edad > 40 y edad < 50. (Pascual. Miguel) y busqueda secuencial sobre esa lista para encontrar a los indi- viduos menores de 50 y mayores de 40. f°) Lista de todos los abogados mayores de 40 aio. (profesién = abogado) y basqueda secuencial en la lista de los registros marcados para localizar a aquelios con edad > 40, {Felipe} y bésqueda secuencial sobre esta lista para encontrar a los indivituos ma- yyores de 40 aftos. En este caso la soluci6n es Ia lista vacta. No kay ningtin registro que tenga los atri- ‘butos pedis La Direccién General de Reclusorios ha decidido crear una base de datos con informa: cign sobre sus presos. E] esquema que se considera es el siguiente: La escolaridad esté codificada como: Analfabeto Primaria Secundaria ne EE! 444 Capitulo 9 @ Mir000s ve susaueos | 4. Preparatoria 5. Universidad 6. Posgrado Los eédigos de dlito (cod_delito estén coditicados come: Delito contra la salud Robo con arma de fuego Acoso sexual Otros. Considerando que los atributos escolaridad y cod_delito estén invertidos, se pre- sentan algunas operaciones de bsqueda con sus cortespondientes resultados: 12) Los reclusos analfabetos con menos de 20 afios de edad. (escolaridad = 1) y bisqueda secuencial en la lista de los registros marcados para localizar a aquellos con edad < 20, 1») Los reclusos con posgrao, cuya edad exté comprendida ene 20 y SO aos, y que cometieron el delito calificado como acoso sexual. ((escolaridad = 6) AND (cod_delito = 3)) y bsqueda secuencial en la lista de los registros marcados para localizar a aquellos cuya edad esti comprendida entre 20 y 50 aflos de edad. ©} Los 1eos estadounidenses. (basqueda secuencial en todo el archivo para localizar a los reos de nacionaligad estadounidense.) ©) Los reos que cometieron robo con arma de fuego, menores de 22 alos, 0 los que cometierondelito contra la salud, menores de 30 aos. (God delito = 2) y (bésqueda secuenctal en la lista de los registros marcados para localiza edad < 22)) OR ((cod_delito = 1) y (bésqueda secuencial en la lista de los registros marcados para localizar edad < 30) ‘Se ha mencionado que las listas generadas por atributos invertids estin ordenadas; por lo tanto, e] tiempo de procesamiento esti determinado por la lista de mayor tama. Una secuencia adecuada de operadores AND y OR puede ayudar a disminuir el tiempo de procesamiento, Analicemas el siguiente ejemplo. ‘Supongamos que se tienen las listas L1, £2 y £3 de 1 000, 5 y 100 elementos, respecti- ‘vamente. Si se necesitara unir las tres lista, ef orden en el cual se hiciera a unin sexfa, sdeterminante en cuanto al ntimero total de elementos con los cuales se trabaja, 9.3.12 9.3 Busquramma 445 ‘ |. (LLU £2) U £3 = (1000+ 5) UL3 1 005 + (1.005 + 100) =2 110 1. LLU LS) UL 1.000 + 100) U £2 1100 +(1 100 +5) = 2 205 A (2UIS)ULI=(5 + 10) ULL = 105 + (105 + 1 000) = 1 210 Es fécil observar que la mejor secuencia es la tercera y el resultado es 1 210; y que la peor secuencia es la segunda y el resultado es 2-205. Sean A, B,C y D listas de 100, 300, 250 y 80 elementos, respectivamente, Si se necesi- tara su unin, algunas de las distintas secuencias que se tendrfan son: L (AU B)UCQUD=((100+ 300) UOUD 400 + (400 + 250)) UD 050 + (650+ 80)) 780 2. (BUQUA)UD = (300 +250) UA)UB 50 + (550+ 100)) UB = (1 200 + (650 + 80)) 930 3. (AUD) UB) UC=((100 +80) UB)UC = (180 + (180 + 300) UC (660 + (480 + 250)) 390 (AUD) UCU B)=(100 +80) UC)UB 180 + (180 + 250)) UB (610 +730) = 1340 Con Jos ejemplos queda demostrado c6mo influye el tamafio de las listas en el ‘iimero total de elementos a procesar. Es posible concluir, entonces, que resulta mucho ‘més eficiente dejar las lstas de mayor tamaio para unirlas al final. Multilistas EI método de bisqueda mutilistas permite acceder a la informacién que se coment ‘ordenada utilizando campos clave. A un tegistr se puede llegar por difereases =a Cada camino se establece en funcién del campo clave sobre €l Cual se haga iain 446 Capitulo 9 @y_ Mer0005 0 so¥!oK La forma més eficiente de representar multlistas es uilizando listas. A continuacién se presenta un ejemplo de este métwio. Supongamos que se tiene un archivo en el cual cada registro almacena la siguiente in- formacién: =~ om La figura 9.38 representa las multilistas correspondientes a los datos dados. En este caso, la informacién de cada individuo puede ser accesada por medio de su profesion de su categor‘a, que son justamente los atributos que permiten realizar bisqueda dixecta, en el archivo. Como se puede observar en Ia siguiente figura, se tiene una lista por pro- fesién y otra por categoria En general, las multlistas son recomendables cuando la bisqueda se hace sobre un solo atributo. En caso de necesitarse una combinacién de atributos es preferible usar listas invertidas. 9.3 Busqueoa eens 447 Vf Jan maensico | 1 cr 1 rmatemico | 1 Daniel fico 2 Nit i 2 fisico 4 José raenaco | 2 + Pascal ingeniero | 3 ingenieo in LETs Migust ili) Ni NL were [Ah Felipe sbogado. 2 Mutts NILNIL 448 Capitulo 9 @) Méro00s ce suscuroa Vv EJERCICIOS Busqueda interna 1. Escriba un programa para bisqueda secuencial en un arreglo desordenado, que ‘obtenga todas Ins ocurrencias de un dato dado, 2. Dado un seteglo que contiene los nombres de N alumnos ordenadas alfabéticamen- te, escriba un programa que encuentre un nombre dado en el arreglo. Silo encuentra debe dar como resultado la posicién en la que lo encontré. En caso contrario, debe enviar un mensaje adecuado, 3. Dado un arreglo de N componentes que contienen la siguiente informacién: > Nombre del atumno Promedio )Niimero de materias aprobadas Escriba un programa que lea el nombre de un alumno y obtenga como resultado el promedio y el nimero de materias aprobadas por dicho alumno. Siel nombre dado ‘no extéen el arreglo, envie un mensaje adecuado. 1) Considere que el arregta esté desordenedo, b) Considere que el arreglo esta ordenado, 4, Escriba un programa para busqueda secuencial en arreglos ordenados de manera descendent 5. Escriba un programa para bésqueda secuencial en listas simplemente ligadas que se encuentran desordenadas, Si el elemento se encuentra en la lista, indique el nimero de nodo en el cual se encontr6, En caso contrario, emita un mensaje adecuado. 6. Fscriba un programa para baisqueda secuencial en listas simplemente ligadas, orde~ ‘nadas de manera descendente. 7. Escriba un prograsna de bisqueda binaria en arreglos ordenados. a) De manera ascendente. ) De manera desoendente. Resuelva el inciso b del problema 3 utilizando et algoritmo de tuisqueda binaria, 9. Defina una clase Arregio, segin lo visto en el capitulo 1. En la clase debe incluir por lo menos dos métodos —de los estudiados en este capruulo— para buscar un ele ‘mento almacenado en el arreglo. Exsonos 449 10. Dado que se requiere almacenar los registros con clave 23,42, 5, 66, 14,43, 59, 81, 37, 49, 28, 55, 94, 80 y 64 nun areglo de 20 elementos, defna una funci6n ash que distribuya los regisros en el arreglo. $i hubiera colisiones,resuélvalas aplicando el metodo de reasigna- cin lineal, 11. De un grupo de N alumnos se tienen los siguientes datos 2 Matricula: valor entero comprendido entre 1 000 y 4999 Nombre: cadena de caracteres » Direccién: cadena de caracteres El campo clave es matricula. Los N registros han sido almacenados en un arre- lo, aplicando la siguiente funcidn hash Hi (clave) = digitos_centrales(clave’) + 1 Las cotisiones han sido tratadas con el método de doble direcci6n hash. Escriba un subprograma que lea la matricula de un slumno y regrese como resultado su nombre y direccién, En caso de no encontratlo, emita un mensaje adecuado. 112. Se quiere almacenar en un arreglo los siguientes datos de N personas: Clave de contribuyente: alfanumérico, de longitud 6. Nombre: cadena de caracteres Direccién: cadena de caracteres D Saldo: reat Defina una funci6n hash que permita almacenar en un arteglo los datos men- cionados. Utilize el método de encadenamiento para resolver las colisiones. 13. Presente y explique una funcién hash que permita almacenar en un arreglo los elemen- tos de la tabla periddica de los elementos de quimica y sus propiedades, de manera uniforme. La clave esté dada por el nombre de los elementos. 14, Utilice la funcién definida en el ejercicio anterior para insertar y eliminar los ele rmentos que se presentan « continuacién: Insertar:sodio, oro, osmio, Ito, boro, cobre, plata, radio, Eliminar: oro, osmio, boro, cobre, plata 45. Dados los 12 signos del zodiaco (capricomnio, acuario, piscis, aries, tau, géminis ccncer, leo, virgo, libra, escorpién, sagitatio) 450 Capitulo 9 @) Mérooos ce sisouron «@)Eseriba un subprograma para almacenatlos en uns estructura de tres +b). Escriba un subpragrama de biisqueda para los signos, almacenados segin lo espe- Cificado en el inciso anterior Busqueda externa 46. Se han almacenado en un archivo sectencial Ios datos de los empleados de un st= permercado: Nombre Registro Federal de Contribuyentes Fecha de ingreso Sueldo Escriba un programa para buscar secuencialmente los datos de un empleado, dado su nombre como entrada, 4) Considere que el archivo esté desordenade, ). Considere que el archivo esta ordenado, 117. Escriba un programa de bisqueda binaria en archivos secuenciales ondenados. 18, Defina una funcién hash que permita almacenar y posteriormente recuperar los ‘elementos de la tabla periddica de los elementos de quimica en un archivo, Laclave esté dada por el nombre de los elementos. Resuelva as colisiones utilizando un érea independiente para almacenar los elementos colisionados. 19. Se desea crear un archivo con informacign sobre pinos mexicanos, Cada registro, contiene los siguientes dito: ‘Nombre del pino ‘Tipo de hojas Tipo de cono El campo clave es Nombre det pino, Defina una funcién hash para almacenar, ¥ posteriormente buscar, los siguientes pinos: Cembroides, Monophylla, Nelson, Flexilis, Lumholtzi, Leiophylla, Douglasiana, Teocote, Herrerai, Montezumae, Cooperi, Contorta, Pondarosa, Ariconica, Caribaea, Pavila, Radiata, Muricata Remorata. Resuelva las colisiones wtilizando un érea comin para almacenar los elementos colisionados. 20. Utlice la funcién definida en el ejercicio 13 para insertary eliminar los elementos ‘que se indican a continuacién: Fnsaces 451 Insertar: sodio, oro, osmio,ltio, boro, cobre, plata, radio. Etiminar: oro, osmio, boro, cobre, plata, El nimero de cubetas es dos (N'= 2) y eada cubeta tiene os registros. La densi- dad de ocupacién permitida es 80%; en caso de superar este porcentaje s¢aplicarn expansiones totals. 4) Dibuje un esquema de la organizacién despues de insertar los elementos osmio y plata; y luego de eliminar oro, boro y plata 1b) Diga que claves originaron que el nimero de cubetas se expandiera 0 redujera 21, Resuolwa el problema anteros, pero shora aplicando expansiones paciales, en caso de tener un porceneje de ocupaci6n mayor al permitid. 22. Sea N = 2 el mimero de cubetas. Cada cuteta tiene dos registros y se establece una densidad de acupacién permitida de 85%. Una vez superada esta densidad, se ali card expansiones parciales H (clave) = clave MOD N Claves a insertar: 36, 11, 48, 06, 75, 65, 38, 88, 23, 14, 12 14) Dibuje un esquema de la organizacién después de insertar los elementos 06, 38, 23, 12, 1b) Diga qué claves originaron que el niimero de cubetas se expandiera 23. Considere el archivo de} problema anterior. Elimine los registros Con claves 75,06, 65, 14, 12, 36, 23. 44) Dibuje un esquema de Ia organizacién después de eliminar jos elementos 75, 14, 2. +b) Diga qué claves originaron que el niimero de cubetas se redujera 24, Sea.N = 4 el ndimero de cubetas. Cada cubeta tiene dos registros,y se establece una ‘densidad de ocupacién permitida de 80%. Defina una funcién hash para Insertar ls claves 77, 34, 23, 26, 39, 60, 19, 43, 70, 51, 17, 28 Elisminas las claves 23, 39, 60, 43, 17 ) Aplique expansiones totale. 6) Aplique expansiones parciales. 25. Determine cual es el nimero de cubetas necesario para almacenat en un archivo nombre, apellido, edad, escolaridad y delito cometido por re0s det Reclusorio Nor te. El reclusorio tiene 2 700 presos. Nota: Utilice el método de las expansiones totales. Cada cubeta tiene 50 registros. Altener 80% de llenado se expande. 452 Capitulo 9 @ Méro00s oe susauc0s 26. Determine cudl es el niimero de euibetas necesario para almacenar en un archivo los registros de los 5 000 000 de clientes que maneja una empresa de tarjetas de crédito, Nota: Utilice el método de las expansiones parciales. Cada cubeta tiene 500 regis- tos. Al tener 85% de Ilenado se expand. 27. Se tiene un archivo con registros que almacenan informacién sobre clientes de dis- tintas sucursales bancarias. Los datos que se manejan por cada cliente son: Clave de fa sucursal » Nombre del titular ‘Niimero de cuerna » Saldo » Niimero de préstamo > Impore ‘Se tiene inversin sobre el campo clave sucursal 4) Obtenga los registros de los sucursal Lima. 1b) Obtenga los registros de los clientes que tengan un préstamo mayor a $5 000 en la sucursal Lima y un saldo en su cuenta mayor a $3 000 en la sucursal Rio. ©) Qbtenga los registros de los clientes de Ia sucursal fo que tengan en su cuenta un saldo mayor a $6 000, 0 los registros de Ios clientes de la sucursal Quito que tengan un préstamo menor a $1 000 y un saldo en su cuenta mayor a $2 000. «) Obtenga los registros de los clientes de Ia sucursal Cordoba que tengan un saldo ‘mayor a $5 000 o un préstamo menor a $1 000. ©) Sise quiere determinar tes que tengan un préstamo mayor a $5.000 en la ‘Lima”) OR (sucursa Rio”) OR (sucursal (sucursal (sucursal *Quito") OR “COrdoba") y las comrespondienteslistas son de 100, 50, 120 y 200 elementos, respectivamente, {jeudl serd la secuencia 6ptima para alcanzar un costo miaimo? 28. En un archivo'e ha almacenado la tabla periédica de los elementos quimicos, junto ‘con sus propiedades: Nombre Namero atémico (na) Peso atémico (Pay Punto de ebullicién (PE) Punto de fusién (PP) Densidad (DEN) Electconegativided (EO) Conductancia eléctrica (CE) Conductancia térmica (C7) » 29. ® » ° ecco 453 Se tiene inversiGn sobre los campos punto de ebullicién y punto de fusién. Obienga los registros de los elementos alalinotéreos. stos se deterainan por las siguientes caraceristicas: EO = 2; 1.54 < DEN < 5.01 y su PF esté comprenido entre los valores 922 y 1 560. Obtenga los registro de los elementos del grupo 6B, Estos se determinan por las siguientes caracteisticas: BO = -2, 4 06; su PE esté comprendido entre los valores 90.18 y 12.61 En un archivo se han almacenado los datos de N profesionales. Clave de contribuyente Nombre Profesién Nacionalidad Se ties wersin sobre los campos profesion y nacionalidad: Obtenga los registros de todos los ingenieros mexicanos. CObtenga los registros de todos los ingenieros mexicanos de ms de 60 afios de edad CObtenga los registros de todos los ingenieros mexicanos de mas de 60 afios de edad © los pintores uruguayos. Obtenga los registros de todos los abogados peruanos o los médicos chilenos de rena de 30 aos. Si se quiere determinar: {profesion = ingeniero) OR (profesién = pintor) OR (profesion = médico) y as lista son de 100, 200 y 300 claves, respectivamente, cul ser la Secuencia éptima para aleanzar un costo minimo?

You might also like