Análisis de rendimiento de dos algoritmos de búsqueda secuencial de texto con sus respectivas variantes Mauricio Ulate Quirós 983660
Planteamiento del problema Algoritmos de búsqueda secuencial de texto que se aplican a documentos que no tienen una estructura definida. Útil cuando se quiere ubicar las ocurrencias de alguna palabra o alguna frase dentro de un contexto grande (ex. Un libro).
Problema a tratar ¿El análisis y combinación de elementos de dos algoritmos de búsqueda con características y rendimiento muy diferente pueden dar como resultado un algoritmo que refleje los elementos de rendimiento positivo de cada uno o inclusive superarlos?
Algoritmos más comunes Fuerza bruta. Familia de algoritmos Boyer – Moore. Familia de algoritmos de corrimiento.
Objetivo general Comparar el rendimiento de dos algoritmos de búsqueda secuencial con un tercer algoritmo correspondiente a una variante de los primeros.
Objetivos específicos Identificar los diferentes algoritmos. Seleccionar los dos algoritmos que presenten el mejor rendimiento. Implementar los algoritmos seleccionados.
Objetivos específicos Diseñar un modelo de prueba para comparar los algoritmos. Relacionar los elementos de los algoritmos que causen el comportamiento óptimo de los mismos. Diseñar e implementar un algoritmo con base a los elementos abstraídos del punto anterior.
Objetivos específicos Comparar el rendimiento de los tres algoritmos en cuestión. Interpretar los resultados obtenidos.
Metodología (resumen) Investigación bibliográfica Identificar algoritmos. Selección de algoritmos Implementación de algoritmos. Análisis de elementos clave de cada algoritmo. Generar una variante.
Metodología Diseño de pruebas Sacar 1000 conjuntos de 1000 caracteres del texto. Se generan subgrupos de 1000 elementos de entre 2 y 20 caracteres de longitud. Generar promedios de cada algoritmo con respecto al tamaño de la subhilera. Comparar el rendimiento. Interpretar los resultados
Metodología Gráfico de comportamiento
Algoritmos a comparar Boyer – Moore – Horspool Shift – OR Variante con base en los dos algoritmos anteriores.
Familia de algoritmos Boyer – Moore No analiza todos los caracteres del texto. Preprocesa la subhilera a buscar para calcular saltos en el análisis.
Boyer – Moore – Horspool Problema: Buscar la hilera GCAGAGAG en el texto GCATCGCAGAGAGTATACAGTACG
Boyer – Moore – Horspool Preanálisis de la consulta GCAGAGAG Se calcula la distancia mínima entre el último caracter y la ocurrencia de cada caracter del alfabeto de la hilera principal. Tabla de corrimiento del caracter erróneo bmBc
Boyer – Moore – Horspool Ver BoyerMooreHorspool.swf
Boyer – Moore – Horspool Desventajas Lee varias veces algunos caracteres de la hilera principal
Shift – OR Permite análisis paralelo. Permite encontrar de una sola pasada dos ocurrencias de la subhilera ABRACADABRA en la hilera ABRACADABRACADABRA Funciona como una máquina de estados.
Shift – OR Problema: Buscar la hilera GCAGAGAG en el texto GCATCGCAGAGAGTATACAGTACG
Shift – OR Preanálisis Para cada caracter de la subhilera se saca su patrón de aparición en la misma. Cada aparición se denota con 0 y el resto en 1. Caracteres que no se encuentren en este alfabeto tendrán asignados un patrón de sólo 1's.
Shift – OR Preanálisis Subhilera GCAGAGAG, se invierte y se indica las apariciones de cada caracter. Para la búsqueda, se toma el estado actual, se le hace corrimiento a la izquierda de 1 bit y se le aplica la operación OR con el patrón correspondiente al caracter actual.
Shift – OR Ver Shift OR.swf
Shift – OR Desventajas Cuando aparece un elemento que corresponde al alfabeto de la hilera principal pero no es parte del alfabeto de la hilera buscada, el patrón de estados se devuelve a 1's, anulando cualquier avance. Hasta que no aparezca de nuevo el primer caracter de la hilera buscada el patrón de estados seguirá en 1's.
Variante propuesta Algoritmo que aproveche las cualidades de ambos algoritmos expuestos anteriormente. Capacidad de salto (Familia Boyer - Moore) Paralelismo y análisis sin repetición. (Familia de algoritmos de corrimiento).
Variante propuesta Ver Variante.swf
Variante propuesta Ventajas Desventajas Aparente disminución en cantidad de comparaciones. Aumentan los saltos y mejora su posición de inicio Desventajas Requiere hacer todo el pre – análisis de ambos algoritmos base.
Variante propuesta Comportamiento esperado Comportamiento esperado del algoritmo propuesto
Problemas encontrados Diferencia entre teoría e implementación. void HORSPOOL(char *x, long m, char *y, long n) { long j, bmBc[ASIZE], k, h; char c; //bool found = false; /* Preprocessing */ preBmBc(x, m, bmBc); /* Serching */ j = 0; while (j <= (n-m)) { c = y[j+m-1]; if ((x[m-1] == c) && (memcmp(x, y+j, m-1) == 0)) { if (FILEDEBUG) { debug << j << " "; } j += bmBc[c];
Resultados Con implementación original
Resultados Con implementación modificadas