Este documento resume la eficiencia de varios algoritmos de ordenamiento y búsqueda. Compara la eficiencia de los algoritmos de ordenamiento selección, inserción y burbuja, y explica que el algoritmo de burbuja tiene una complejidad de O(n2) en su versión más simple. También describe los algoritmos de ordenamiento quicksort y heapsort, indicando que quicksort depende de la posición del pivote elegido, mientras que heapsort tiene una complejidad de O(n log n). Finalmente, compara la eficiencia de los algoritmos de búsqu
0 calificaciones0% encontró este documento útil (0 votos)
547 vistas19 páginas
Este documento resume la eficiencia de varios algoritmos de ordenamiento y búsqueda. Compara la eficiencia de los algoritmos de ordenamiento selección, inserción y burbuja, y explica que el algoritmo de burbuja tiene una complejidad de O(n2) en su versión más simple. También describe los algoritmos de ordenamiento quicksort y heapsort, indicando que quicksort depende de la posición del pivote elegido, mientras que heapsort tiene una complejidad de O(n log n). Finalmente, compara la eficiencia de los algoritmos de búsqu
Descripción original:
-Descripción de varios algoritmos de busqueda y su eficiencia
Este documento resume la eficiencia de varios algoritmos de ordenamiento y búsqueda. Compara la eficiencia de los algoritmos de ordenamiento selección, inserción y burbuja, y explica que el algoritmo de burbuja tiene una complejidad de O(n2) en su versión más simple. También describe los algoritmos de ordenamiento quicksort y heapsort, indicando que quicksort depende de la posición del pivote elegido, mientras que heapsort tiene una complejidad de O(n log n). Finalmente, compara la eficiencia de los algoritmos de búsqu
Este documento resume la eficiencia de varios algoritmos de ordenamiento y búsqueda. Compara la eficiencia de los algoritmos de ordenamiento selección, inserción y burbuja, y explica que el algoritmo de burbuja tiene una complejidad de O(n2) en su versión más simple. También describe los algoritmos de ordenamiento quicksort y heapsort, indicando que quicksort depende de la posición del pivote elegido, mientras que heapsort tiene una complejidad de O(n log n). Finalmente, compara la eficiencia de los algoritmos de búsqu
Descargue como DOCX, PDF, TXT o lea en línea desde Scribd
Descargar como docx, pdf o txt
Está en la página 1de 19
UNIVERSIDAD TECNOLGICA DE PANAM
FACULTAD DE INGENIERA DE SISTEMAS COMPUTACIONALES
DESARROLLO DE SOFTWARE
ESTRUCTURA DE DATOS II
Eficiencia de algoritmos de bsqueda y ordenamiento
Profesora: Doris Cueto
Integrantes Franklin Maestre 8-887-1788 Jos Gutirrez 8-872-2166 Israel Quintero 8-890-844
Grupo: 1LS121
Fecha: 16-06-2014
ndice Introduccin ........................................................................................................................................ 3 1. Consideraciones de eficiencia de los algoritmos de ordenamiento y bsquedas. Notacin de la Gran O (Big O). .................................................................................................................................... 4 2. Comparacin de la eficiencia de los algoritmos de ordenamientos: Seleccin, Insercin y Burbuja. ............................................................................................................................................... 5 3. Algoritmos de ordenamiento y su eficiencia Quicksort .................................................................. 6 4. Algoritmos de ordenamiento y su eficiencia Heapsort ................................................................... 6 5. Comparacin de la eficiencia de los algoritmos de bsqueda Secuencial y Binaria ....................... 7 6. Algoritmo de bsqueda y su eficiencia de cadena Knuth-Morris-Pratt .......................................... 9 7. Algoritmo de Boyer-Moore, bsqueda de patrones ..................................................................... 10 8. Tcnicas de clculo de direcciones y comparaciones Hashing ..................................................... 13 9. MTODOS PARA RESOLVER EL PROBLEMA DE LAS COLISIONES ................................................... 16 Conclusin ......................................................................................................................................... 19
Introduccin Una de las tareas que realizan ms frecuentemente las computadoras en el procesamiento de datos es la ordenacin y bsqueda. El estudio de diferentes mtodos de ordenacin es una tarea intrnsecamente interesante desde un punto de vista terico y, naturalmente, prctico. La ordenacin es una operacin consistente en disponer un conjunto de datos en algn determinado orden con respecto a uno de los campos de elementos del conjunto. La Bsqueda es una operacin que consiste en recuperar un dato deseado. Para estas operaciones existen numeroso algoritmos cada uno creado para una tarea especfica en este trabajo analizaremos los algoritmos de ordenamiento de Seleccin, Burbuja, Insercin, Quicksort y Heapsort y algoritmos de bsqueda Secuencial, Binaria, cadena Knuth-Morris-Pratt y cadena Boyer-Moore 1. Consideraciones de eficiencia de los algoritmos de ordenamiento y bsquedas. Notacin de la Gran O (Big O). A) Algoritmos de ordenamiento: es una operacin consistente en disponer un conjunto estructura de datos en algn determinado orden con respecto a uno de los campos de elementos del conjunto.
Una coleccin de datos (estructura) puede ser almacenada en un archivo, un array (vector o tabla), un array de registros, una lista enlazada o un rbol. Cuando los datos estn almacenados en un array, una lista enlazada o un rbol, se denomina ordenacin interna.
La eficiencia es el factor que mide la calidad y rendimiento de un algoritmo. En el caso de la operacin de ordenacin, dos criterios se suelen seguir a la hora de decidir qu algoritmo de entre los que resuelven la ordenacin es el ms eficiente:
1) tiempo menor de ejecucin en computadora. 2) menor nmero de instrucciones.
Sin embargo, no siempre es fcil efectuar estas medidas: puede no disponerse de instrucciones para medida de tiempo aunque no sea ste el caso del lenguaje C, y las instrucciones pueden variar, dependiendo del lenguaje y del propio estilo del programador. Por esta razn, el mejor criterio para medir la eficiencia de un algoritmo es aislar una operacin especfica clave en la ordenacin y contar el nmero de veces que se realiza. As, en el caso de los algoritmos de ordenacin, se utilizar como medida de su eficiencia el nmero de comparaciones entre elementos efectuados. El algoritmo de ordenacin A ser ms eficiente que el B, si requiere menor nmero de comparaciones.
Los mtodos de ordenacin se suelen dividir en dos grandes grupos: Directos: burbuja, seleccin, insercin. Indirectos: (avanzados) Shell, ordenacin rpida, ordenacin por mezcla, Radixsort.
B) Algoritmo de bsqueda: El proceso de encontrar un elemento especfico de un array se denomina bsqueda. En esta seccin se examinarn dos tcnicas de bsqueda: bsqueda lineal o secuencial, la tcnica ms sencilla, y bsqueda binaria o dicotmica, la tcnica ms eficiente.
Al igual que sucede con las operaciones de ordenacin cuando se realizan operaciones de bsqueda es preciso considerar la eficiencia (complejidad) de los algoritmos empleados en la bsqueda. El grado de eficiencia en una bsqueda ser vital cuando se trata de localizar una informacin en una lista o tabla en memoria, o bien en un archivo de datos.
2. Comparacin de la eficiencia de los algoritmos de ordenamientos: Seleccin, Insercin y Burbuja.
A) Ordenacin por seleccin: El algoritmo se apoya en sucesivas pasadas que intercambian el elemento ms pequeo sucesivamente con el primer elemento de la lista, A[0] en la primera pasada. En sntesis, se busca el elemento ms pequeo de la lista y se intercambia con A[0], primer elemento de la lista.
Los pasos del algoritmo son: 1. Seleccionar el elemento ms pequeo de la lista A; intercambiarlo con el primer elemento A[0]. Ahora la entrada ms pequea est en la primera posicin del vector.
2. Considerar las posiciones de la lista A[1], A[2], A[3]..., seleccionar el elemento ms pequeo e intercambiarlo con A[1]. Ahora las dos primeras entradas de A estn en orden.
3. Continuar este proceso encontrado o seleccionando el elemento ms pequeo de los restantes elementos de la lista, intercambindolos adecuadamente.
El anlisis del algoritmo de seleccin es sencillo y claro, ya que requiere un nmero fijo de comparaciones que slo dependen del tamao de la lista o vector (array) y no de la distribucin inicial de los datos.
B) Ordenacin por Insercin: el mtodo de ordenacin por insercin es similar al proceso tpico de ordenar tarjetas de nombres (cartas de una baraja) por orden alfabtico, que consiste en insertar un nombre en su posicin correcta dentro de una lista o archivo que ya est ordenado.
El algoritmo correspondiente a la ordenacin por insercin contempla los siguientes pasos:
1. El primer elemento A[0] se considera ordenado; es decir, la lista inicial consta de un elemento.
2. Se inserta A[1] en la posicin correcta, delante o detrs de A[0], dependiendo de que sea menor o mayor.
3. Por cada bucle o iteracin i(desde i=1 hasta n-1) se explora la sub-lista A[i- 1]..A[0] buscando la posicin correcta de insercin; a la vez se mueve hacia abajo(a la derecha en la sub-lista)una posicin todos los elementos mayores que el elemento que el elemento a insertar A[i], para dejar baca esa posicin.
4. Insertar el elemento a la posicin correcta.
El anlisis del algoritmo de insercin se determin que la complejidad del algoritmo es complejidad cuadrtica.
C) Ordenacin por burbuja: es un sencillo algoritmo de ordenamiento. Funciona revisando cada elemento de la lista que va a ser ordenada con el siguiente, intercambindolos de posicin si estn en el orden equivocado.
Cul es la eficiencia del algoritmo de ordenacin de la burbuja? Depender de la versin utilizada. En la versin ms simple se hacen n 1 pasadas y n 1 comparaciones en cada pasada. Por consiguiente, el nmero de comparaciones es (n 1) * (n 1) = n2 2n + 1, es decir, la complejidad o(n2). 3. Algoritmos de ordenamiento y su eficiencia Quicksort
El algoritmo quicksort ordena un vector V eligiendo entre sus elementos un valor clave P que acta como pivote, organiza tres secciones, izquierda-P-derecha, todos los elementos a la izquierda debern ser menores a P, y los de la derecha mayores, los ordena sin tener que hacer ningn tipo de mezcla para combinarlos, cmo elegimos el pivote?. 1. Mtodo 1: Lo ideal sera que el pivote fuera la mediana del vector para que las partes izquierda y derecha tuvieran el mismo tamao. 2. Mtodo 2: recorremos el vector con un ndice i desde 0 a n-1, y otro ndice j inversamente y cuando se crucen, es decir, tenga el mismo valor, ese se seleccionara como pivote. Como se puede suponer, la eficiencia del algoritmo depende de la posicin en la que termine el pivote elegido. 4. Algoritmos de ordenamiento y su eficiencia Heapsort El ordenamiento por montculos (heapsort en ingls) es un algoritmo de ordenamiento no recursivo, no estable, con complejidad computacional Este algoritmo consiste en almacenar todos los elementos del vector a ordenar en un montculo (heap), y luego extraer el nodo que queda como nodo raz del montculo (cima) en sucesivas iteraciones obteniendo el conjunto ordenado. Basa su funcionamiento en una propiedad de los montculos, por la cual, la cima contiene siempre el menor elemento (o el mayor, segn se haya definido el montculo) de todos los almacenados en l. El algoritmo, despus de cada extraccin, recoloca en el nodo raz o cima, la ltima hoja por la derecha del ltimo nivel. Lo cual destruye la propiedad heap del rbol. Pero, a continuacin realiza un proceso de "descenso" del nmero insertado de forma que se elige a cada movimiento el mayor de sus dos hijos, con el que se intercambia. Este intercambio, realizado sucesivamente "hunde" el nodo en el rbol restaurando la propiedad montculo del arbol y dejndo paso a la siguiente extraccin del nodo raz. Algoritmo Lgico. 1. Se construye el montculo inicial a partir del arreglo original. 2. Se intercambia la raz con el ltimo elemento del montculo. 3. El ltimo elemento queda ordenado. 4. El ltimo elemento se saca del montculo, no del arreglo. 5. Se restaura el montculo haciendo que el primer elemento baje a laposicin que le corresponde, si sus hijos son menores. 6. La raz vuelve a ser el mayor del montculo. 7. Se repite el paso 2 hasta que quede un solo elemento en el montculo.
Con esto concluimos que la eficacia del mtodo de ordenamiento Heapsort depende de la data que se maneja, entre ms diferente y desordenada mejor.
5. Comparacin de la eficiencia de los algoritmos de bsqueda Secuencial y Binaria Los procesos de bsqueda involucran recorrer un arreglo completo con el fin de encontrar algo. Lo ms comn es buscar el menor o mayor elemento (cuando se puede establecer un orden), o buscar el ndice de un elemento determinado. Bsqueda Secuencial: Consiste en ir comparando el elemento que se busca con cada elemento del arreglo hasta cundo se encuentra.
Ventajas Desventajas La principal ventaja es que este mtodo funciona ms efectivamente con datos desordenados
No es estable ya que se comporta de manera ineficaz con datos del mismo valor
Su desempeo es en promedio tan bueno como el Quicksort y se comporta mejor que este en los peores casos
Mtodo ms complejo
No necesita memoria adicional Ejemplos de algoritmos: Bsqueda del menor menor = a[0]; for (i=1;i<n;i++) if ( a[i]<menor ) menor=a[i]; Bsqueda del mayor mayor= a[n-1]; for (i=0;i<n-1;i++) if ( a[i]>mayor ) mayor=a[i];
Bsqueda Binaria: En el caso anterior de bsqueda se asume que los elementos estn en cualquier orden. En el peor de los casos deben hacerse n operaciones de comparacin. Una bsqueda ms eficiente puede hacerse sobre un arreglo ordenado. Una de stas es la Bsqueda Binaria. La Bsqueda Binaria, compara si el valor buscado est en la mitad superior o inferior. En la que est, subdivido nuevamente, y as sucesivamente hasta encontrar el valor.
Ejemplo de algoritmo: b= 17; i= 0; j= tamao-1; do { k= (i+j)/2; if (b<=v[k] ) i=k+1; if (b>=v[k] ) j= k-1; } while (i<=j); Bsqueda de elemento encontrado=-1; for (i=0;i<n;i++) if ( a[i]==elemento_buscado ) encontrado=i;
Comparacin: La bsqueda binaria es superiormente eficiente que la bsqueda secuencial, aunque en arreglos pequeos ambos mtodos son relativamente equivalentes, esto se debe a que recorre el arreglo haciendo comparaciones con el valor que se espera encontrar acortando su tiempo de ejecucin, tambin hay que tomar en consideracin que para poder realizar la bsqueda de forma binaria se debe ordenar el arreglo. 6. Algoritmo de bsqueda y su eficiencia de cadena Knuth- Morris-Pratt El algoritmo KMP, trata de localizar la posicin de comienzo de una cadena, dentro de otra. Antes que nada con la cadena a localizar se precalcula una tabla de saltos (conocida como tabla de fallos) que despus al examinar entre si las cadenas se utiliza para hacer saltos cuando se localiza un fallo. Supongamos una tabla 'F' ya precalculada, y supongamos que la cadena a buscar est contenida en el array 'P()', y la cadena donde buscamos est contenida en un array 'T()'. Entonces ambas cadenas comienzan a compararse usando un puntero de avance para la cadena a buscar, si ocurre un fallo en vez de volver a la posicin siguiente a la primera coincidencia, se salta hacia donde sobre la tabla, indica el puntero actual de avance de la tabla. El array 'T' utiliza un puntero de avance absoluto que considera donde se compara el primer carcter de ambas cadenas, y utiliza como un puntero relativo (sumado al absoluto) el que utiliza para su recorrido el array 'P'. Se dan 2 situaciones: Mientras existan coincidencias el puntero de avance de 'P', se va incrementando y si alcanza el final se devuelve la posicin actual del puntero del array 'T' Si se da un fallo, el puntero de avance de 'T' se actualiza hasta, con la suma actual del puntero de 'P' + el valor de la tabla 'F' apuntado por el mismo que 'P'. A continuacin se actualiza el puntero de 'P', bajo una de 2 cicunstancias; Si el valor de 'F' es mayor que -1 el puntero de 'P', toma el valor que indica la tabla de salto 'F', en caso contrario vuelve a recomenzar su valor en 0.
EFICIENCIA: Los casos ptimos se denotan porque son todos ceros, o lo que es lo mismo, no se repiten caracteres desde el principio. El peor caso se da cuando la cadena se compone de 1 nico carcter.
7. Algoritmo de Boyer-Moore, bsqueda de patrones
El algoritmo de Boyer-Moore, considerado el algoritmo ms eficiente en la bsqueda de patrones en cadena de caracteres, se basa en desplazar la ventana de comparacin lo mximo posible. El algoritmo se desplaza dentro de la cadena de bsqueda de izquierda a derecha, y dentro del patrn de derecha a izquierda. La mayor eficiencia se consigue minimizando el nmero de comparaciones entre caracteres, desplazando lo mximo posible la venta de comparacin, a costa de una computacin previa. Notacin
y: cadena dnde se busca. x: patrn de bsqueda. | y | = n, longitud de y. | x | = m, longitud de x. j: posicin en y desde dnde se prueba la coincidencia. i: posicin en x de comparacin, dnde se produce una no coincidencia , y[j+i] <> x[i], y[j+i] = b, x[i] = a. u: coincidencia en la comparacin, sufijo de x, u = y[j+i+..j+m] = x[i+1..m-1]. v: prefijo de x. s: salto del patrn para la siguiente comparacin. Al producirse una ocurrencia del patrn, o un error en la comparacin de un carcter, se calcula el desplazamiento mximo del patrn a lo largo de la cadena de bsqueda. Partimos de una situacin en que no hay coincidencia, existe diferencia entre y[j+i] y x[i], pero las posiciones de x siguientes a i s coinciden con sus asociadas en y, u = y[j+i+..j+m] = x[i+1..m-1]; hacer notar que u es sufijo de x. El desplazamiento de x a lo largo de y se limita a causa del carcter en y que produjo la no coincidencia, y[i+j] (1), y los caracteres de x posteriores a i (2), sufijo de x que tena coincidencia parcial con y.
(1) Teniendo en cuenta el carcter que produjo la no coincidencia en y, y[i+j] = b, el desplazamiento mximo, s, ser la distancia entre la aparicin ms a la derecha de b en x[0..m-2] y la longitud de x, m. La nueva j sera j=j+s, lo que se consigue es alinear las dos coincidencias de b en x e y, desde dnde es posible que se produzca una coincidencia del patrn. Se considera el intervalo 0..m-2, porque si se da el caso de que b es igual al ltimo carcter de x, el desplazamiento sera 0, y podra provocar un bucle infinito debido a que el patrn no vara su posicin. (1)
(2) Teniendo en cuenta los caracteres posteriores a i en x (u, sufijo de x), que coinciden de forma parcial con y, hay que alinear u lo ms a la derecha posible de x, sin que est precedido por x[i] = a (2.a); al no estar u ya precedido por x[i] = a <> x[i-s] = c, en la nueva posicin de x respecto de y, sabemos que existe la coincidencia u precedida por c, es posible que se produzca una ocurrencia en y. Si no se encuentra la situacin anterior, se tratar de alinear el mayor sufijo posible de x con un prefijo v tambin de x (2.b); como u coincide parcialmente en y, al buscar el prefijo v de x que tambin es sufijo de x, v tambin est en y. Si no se producen ninguno de los dos casos anteriores, el patrn se podr desplazar toda su longitud. (2.a)
(2.b)
El desplazamiento de x a lo largo de y ser el mximo desplazamiento entre los dos anteriores, (1) y (2).
Cdigo - StringMatchingBM.java: Implementacin en Java del algoritmo de Boyer-Moore. - StringMatchingBF.java: Implementacin en Java del algoritmo de fuerza bruta. - StringMatchingTest.java: Clase en Java empleada para realizar las pruebas de rendimiento. Resultado de las pruebas 100 tests --> BM: 70 millis (18462 comparisons) 100 tests --> BF: 50 millis (73898 comparisons)
8. Tcnicas de clculo de direcciones y comparaciones Hashing Definicin: Hasta ahora las tcnicas de localizacin de registros vistas, emplean un proceso de bsqueda que implica cierto tiempo y esfuerzo. El siguiente mtodo nos permite encontrar directamente el registro buscado. La idea bsica de este mtodo consiste en aplicar una funcin que traduce un conjunto de posibles valores llave en un rango de direcciones relativas. Un problema potencial encontrado en este proceso, es que tal funcin no puede ser uno a uno; las direcciones calculadas pueden no ser todas nicas, cuando R(k 1 )= R(k 2 ) Pero: K 1 diferente de K 2 decimos que hay una colisin. A dos llaves diferentes que les corresponda la misma direccin relativa se les llama sinnimos. A las tcnicas de clculo de direcciones tambin se les conoce como: Tcnicas de almacenamiento disperso Tcnicas aleatorias Mtodos de transformacin de llave - a- direccin Tcnicas de direccionamiento directo Mtodos de tabla Hash Mtodos de Hashing
Pero el trmino ms usado es el de hashing. Al clculo que se realiza para obtener una direccin a partir de una llave se le conoce como funcin hash.
Ventaja 1. Se pueden usar los valores naturales de la llave, puesto que se traducen internamente a direcciones fciles de localizar 2. Se logra independencia lgica y fsica, debido a que los valores de las llaves son independientes del espacio de direcciones 3. No se requiere almacenamiento adicional para los ndices. Desventajas 1. No pueden usarse registros de longitud variable 2. El archivo no est clasificado 3. No permite llaves repetidas 4. Solo permite acceso por una sola llave Costos Tiempo de procesamiento requerido para la aplicacin de la funcin hash Tiempo de procesamiento y los accesos E/S requeridos para solucionar las colisiones.
La eficiencia de una funcin hash depende de: 1. La distribucin de los valores de llave que realmente se usan 2. El nmero de valores de llave que realmente estn en uso con respecto al tamao del espacio de direcciones 3. El nmero de registros que pueden almacenarse en una direccin dad sin causar una colisin 4. La tcnica usada para resolver el problema de las colisiones
Las funciones hash ms comunes son: Residuo de la divisin Medio del cuadrado Pliegue
HASHING POR RESIDUO DE LA DIVISIN La idea de este mtodo es la de dividir el valor de la llave entre un numero apropiado, y despus utilizar el residuo de la divisin como direccin relativa para el registro (direccin = llave mdulo divisor). Mientras que el valor calculado real de una direccin relativa, dados tanto un valor de llave como el divisor, es directo; la eleccin del divisor apropiado puede no ser tan simple. Existen varios factores que deben considerarse para seleccionar el divisor: 1. El rango de valores que resultan de la operacin llave % divisor, va desde cero hasta el divisor 1. Luego, el divisor determina el tamao del espacio de direcciones relativas. Si se sabe que el archivo va a contener por lo menos n registros, entonces tendremos que hacer que divisor > n, suponiendo que solamente un registro puede ser almacenado en una direccin relativa dada. 2. El divisor deber seleccionarse de tal forma que la probabilidad de colisin sea minimizada. Cmo escoger este nmero? Mediante investigaciones se ha demostrado que los divisores que son nmeros pares tienden a comportase pobremente, especialmente con los conjuntos de valores de llave que son predominantemente impares. Algunas investigaciones sugieren que el divisor deber ser un nmero primo. Sin embargo, otras sugieren que los divisores no primos trabajan tambin como los divisores primos, siempre y cuando los divisores no primos no contengan ningn factor primo menor de 20. Lo ms comn es elegir el nmero primo ms prximo al total de direcciones.
Independientemente de que tan bueno sea el divisor, cuando el espacio de direcciones de un archivo est completamente lleno, la probabilidad de colisin crece dramticamente. La saturacin de archivo de mide mediante su factor de carga, el cual se define como la relacin del nmero de registros en el archivo contra el nmero de registros que el archivo podra contener si estuviese completamente lleno.
Todas las funciones hash comienzan a trabajar probablemente cuando el archivo esta casi lleno. Por lo general el mximo factor de carga que puede tolerarse en un archivo para un rendimiento razonable es de entre el 70 % y 80 %. HASHING POR MEDIO DEL CUADRADO En esta tcnica, la llave es elevada al cuadrado, despus algunos dgitos especficos se extraen de la mitad del resultado para constituir la direccin relativa. Si se desea una direccin de n dgitos, entonces los dgitos se truncan en ambos extremos de la llave elevada al cuadrado, tomando n dgitos intermedios. Las mismas posiciones de n dgitos deben extraerse para cada llave. Utilizando esta funcin hashing el tamao del archivo resultante es de 10 n donde n es el nmero de dgitos extrados de los valores de la llave elevada al cuadrado.
HASHING POR PLIEGUE En esta tcnica el valor de la llave es particionada en varias partes, cada una de las cuales (Excepto la ltima) tiene el mismo nmero de dgitos que tiene la direccin relativa objetivo. Estas particiones son despus plegadas una sobre otra y sumadas. El resultado, es la direccin relativa. Igual que para el mtodo del medio del cuadrado, el tamao del espacio de direcciones relativas es una potencia de 10.
COMPARACIN ENTRE LAS FUNCIONES HASH Aunque alguna otra tcnica pueda desempearse mejor en situaciones particulares, la tcnica del residuo de la divisin proporciona el mejor desempeo. Ninguna funcin hash se desempea siempre mejor que las otras. El mtodo del medio del cuadrado puede aplicarse en archivos con factores de cargas bastantes bajas para dar generalmente un buen desempeo. El mtodo de pliegues puede ser la tcnica ms fcil de calcular pero produce resultados bastante errticos, a menos que la longitud de la llave se aproximadamente igual a la longitud de la direccin. Si la distribucin de los valores de llaves no es conocida, entonces el mtodo del residuo de la divisin es preferible. Note que el hashing puede ser aplicado a llaves no numricas. Las posiciones de ordenamiento de secuencia de los caracteres en un valor de llave pueden ser utilizadas como sus equivalentes numricos. Alternativamente, el algoritmo hash acta sobre las representaciones binarias de los caracteres. Todas las funciones hash presentadas tienen destinado un espacio de tamao fijo. Aumentar el tamao del archivo relativo creado al usar una de estas funciones, implica cambiar la funcin hash, para que se refiera a un espacio mayor y volver a cargar el nuevo archivo. 9. MTODOS PARA RESOLVER EL PROBLEMA DE LAS COLISIONES Considere las llaves K 1 y K 2 que son sinnimas para la funcin hash R. Si K 1 es almacenada primero en el archivo y su direccin es R(K 1 ), entonces se dice que K 1 esta almacenado en su direccin de origen.
Existen dos mtodos bsicos para determinar dnde debe ser alojado K 2 : Direccionamiento abierto.- Se encuentra entre direccin de origen para K 2 dentro del archivo. Separacin de desborde (rea de desborde).- Se encuentra una direccin para K 2 fuera del rea principal del archivo, en un rea especial de desborde, que es utilizada exclusivamente para almacenar registro que no pueden ser asignados en su direccin de origen
Los mtodos ms conocidos para resolver colisiones son:
Sondeo lineal Que es una tcnica de direccionamiento abierto. Este es un proceso de bsqueda secuencial desde la direccin de origen para encontrar la siguiente localidad vaca. Esta tcnica es tambin conocida como mtodo de desbordamiento consecutivo. Para almacenar un registro por hashing con sondeo lineal, la direccin no debe caer fuera del lmite del archivo, En lugar de terminar cuando el lmite del espacio de direccin se alcanza, se regresa al inicio del espacio y sondeamos desde ah. Por lo que debe ser posible detectar si la direccin base ha sido encontrada de nuevo, lo cual indica que el archivo est lleno y no hay espacio para la llave. Para la bsqueda de un registro por hashing con sondeo lineal, los valores de llave de los registros encontrados en la direccin de origen, y en las direcciones alcanzadas con el sondeo lineal, deber compararse con el valor de la llave buscada, para determinar si el registro objetivo ha sido localizado o no.
El sondeo lineal puede usarse para cualquier tcnica de hashing. Si se emplea sondeo lineal para almacenar registros, tambin deber emplearse para recuperarlos.
Doble hashing En esta tcnica se aplica una segunda funcin hash para combinar la llave original con el resultado del primer hash. El resultado del segundo hash puede situarse dentro del mismo archivo o en un archivo de sobreflujo independiente; de cualquier modo, ser necesario algn mtodo de solucin si ocurren colisiones durante el segundo hash. La ventaja del mtodo de separacin de desborde es que reduce la situacin de una doble colisin, la cual puede ocurrir con el mtodo de direccionamiento abierto, en el cual un registro que no est almacenado en su direccin de origen desplazara a otro registro, el que despus buscar su direccin de origen. Esto puede evitarse con direccionamiento abierto, simplemente moviendo el registro extrao a otra localidad y almacenando al nuevo registro en la direccin de origen ahora vaca. Puede ser aplicado como cualquier direccionamiento abierto o tcnica de separacin de desborde. Para ambas mtodos para la solucin de colisiones existen tcnicas para mejorar su desempeo como: 1.- Encadenamiento de sinnimos Una buena manera de mejorar la eficiencia de un archivo que utiliza el clculo de direcciones, sin directorio auxiliar para guiar la recuperacin de registros, es el encadenamiento de sinnimos. Mantener una lista ligada de registros, con la misma direccin de origen, no reduce el nmero de colisiones, pero reduce los tiempos de acceso para recuperar los registros que no se encuentran en su localidad de origen. El encadenamiento de sinnimos puede emplearse con cualquier tcnica de solucin de colisiones. Cuando un registro debe ser recuperado del archivo, solo los sinnimos de la llave objetivo son accesados. 2.- Direccionamiento por cubetas Otro enfoque para resolver el problema de las colisiones es asignar bloques de espacio (cubetas), que pueden acomodar ocurrencias mltiples de registros, en lugar de asignar celdas individuales a registros. Cuando una cubeta es desbordada, alguna nueva localizacin deber ser encontrada para el registro. Los mtodos para el problema de sobrecupo son bsicamente el mismo que los mtodos para resolver colisiones. COMPARACIN ENTRE SONDEO LINEAL Y DOBLE HASHING De ambos mtodos resultan distribuciones diferentes de sinnimos en un archivo relativo. Para aquellos casos en que el factor de carga es bajo (< 0.5), el sondeo lineal tiende a agrupar los sinnimos, mientras que el doble hashing tiende a dispersar los sinnimos ms ampliamente a travs del espacio de direcciones. El doble hashing tiende a comportarse casi tambin como el sondeo lineal con factores de carga pequeos (< 0.5), pero acta un poco mejor para factores de carga mayores. Con un factor de carga > 80 %, el sondeo lineal por lo general resulta tener un comportamiento terrible, mientras que el doble hashing es bastante tolerable para bsquedas exitosas pero no as en bsquedas no exitosas.
Conclusin -Algunas veces la eficiencia de un programa es algo transparente para los usuarios y a veces para el desarrollador joven, pues la diferencia en tiempo de ejecucin entre un programa eficiente y uno no eficiente y la cantidad de recursos que utilizan suelen ser irrelevantes por el tipo de aplicaciones que se programan. Pero es ciertamente es un tema de mucha importancia en especial en niveles ms altos de programacin, cuando la lgica y el cdigo se domine solo queda optimizar. Es muy interesante investigar diferentes algoritmos con particularidades diferentes aunque cuenten con el mismo fin como por ejemplo la bsqueda secuencial y Binaria, las 2 hacen los mismo pero tienen sus beneficios e inconvenientes, pues la bsqueda binaria requiere que se ordenen los elementos a analizar lo que requiere programacin extra, la bsqueda secuencial es ms sencilla y no requiere que se ordenen los elementos pero en el peor de los casos comparar todos los elementos presentes. Entonces cae en el programador decidir que algoritmo le beneficia a su aplicacin.
Cuáles Son Los Factores Más Comunes Que Alterarían El Proceso Productivo de Una Empresa Que Produce y Comercializa Chocolates y Galletas Empacadas en Bolsa de Celofán