Análisis de algoritmos

Documentos relacionados
Complejidad computacional (Análisis de Algoritmos)

Autómatas Finitos Deterministicos (DFA)

Autómatas Finitos Deterministicos (DFA)

MODELOS DE COMPUTACION I Preguntas Tipo Test. 1. El lema de bombeo puede usarse para demostrar que un lenguaje determinado es regular.

Clase 03: Alfabetos, símbolos y cadenas

06 Análisis léxico II

1. Cadenas EJERCICIO 1

Capítulo 9. Introducción a los lenguajes formales. Continuar

Convertir un AFND a un AFD

Tema 3: Gramáticas regulares. Teoría de autómatas y lenguajes formales I

16 Análisis sintáctico I

Algoritmos de Strings. Héctor Navarro

Tema 09: Convertidor Analógico Digital

300CIG007 Computabilidad y Lenguajes Formales: Autómatas Finitos

CREACIÓN Y OPERABILIDAD DE UNA BASE DE DATOS DE ADN DISTRIBUIDA MEDIANTE EL USO DE UN SISTEMA GRID CREACIÓN DE ÁRBOLES DE SUFIJOS

Tema 13: Apuntadores en C

Temas. Objetivo. Que el estudiante logre: 1) Identificar conceptos constructivos de la Teoría de la Computabilidad. 2) Definir autómatas de pila.

Introducción al Procesamiento de Lenguaje Natural

ETL Data Cleansing Matching

Tabla de Símbolos. Programación II Margarita Álvarez

Conceptos básicos sobre gramáticas

Lenguajes, Gramáticas y Autómatas Conceptos

Tabla de Símbolos. Programación II Margarita Álvarez

Máquinas de Turing IIC3242. IIC3242 Máquinas de Turing 1 / 45

Autómatas Deterministas. Ivan Olmos Pineda

Máquinas de estados finitas 1

Modelos Computacionales

Máquinas de Turing IIC3242. IIC3242 Máquinas de Turing 1 / 42

Tema 05: Características de un instrumento de medición

Unidad 4. Autómatas de Pila

Análisis de algoritmos

Clase 08: Autómatas finitos

Laboratorio 02: Ejercicios de programación en C

Reconocímíentes y Agradecimientos 5 Indice 6 Prólogo 11

ORDENAMIENTO Y BÚSQUEDA EN ARREGLOS

Tema 14: Arreglos estáticos en C

Clase 17: Autómatas de pila

Es un conjunto de palabras y símbolos que permiten al usuario generar comandos e instrucciones para que la computadora los ejecute.

Unidad II: Análisis semántico

Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto Segundo Cuatrimestre de 2002

Introducción a las RdP. Optimización basada en redes de Petri. Redes de Petri. Son objeto de estudio: RdP. Ejemplos:

Maquina de Turing. 5. Fundamentos de algoritmos. Turing TURING TURING 10/08/2010. MI Elizabeth Fonseca Chávez

PROGRAMA: COMPUTACION I

Programación Estructurada

Lenguajes (gramáticas y autómatas)

EJERCICIOS del TEMA 3: Lenguajes independientes del contexto

PROGRAMACIÓN II AÑO 2009 TALLER 3: TEORÍA DE LENGUAJES Y AUTÓMATAS

Una cadena sobre Σ es cualquier secuencia de elementos de longitud finita sobre Σ.

Tema 05: Tablas hash. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom

Complejidad de los Algoritmos

Regular expressions Denial of Service - ReDoS. Michael Hidalgo OWASP Costa Rica michael.hidalgo@owasp.org

7.1 Consideraciones. Considere la búsqueda de un libro en una biblioteca. Considere la búsqueda de un nombre en el directorio telefónico.

PROGRAMA INSTRUCCIONAL AUTOMATAS Y LENGUAJES FORMALES

salida se obtiene de el puerto de salida de cada flip-flop o directamente [45]... 17

Se puede dibujar la siguiente figura, empezando y terminando en el mismo punto, sin levantar e lápiz del papel?

Clase 09: AFN, AFD y Construcción de Thompson

Estructuras de Control

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Tema 12: El sistema operativo y los procesos

Sistemas Numéricos Cambios de Base Errores

2.2 Rectas en el plano

13.3. MT para reconocer lenguajes

EI MT1008 Programación II

Examen. Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. Segundo Semestre, 2003.

ESTRUCTURAS ALGORITMICAS

Introducción. Las gramáticas definen las reglas que definen a los lenguajes Las reglas pueden tener una diversa variedad de esquemas

Teoría Matemática de la Computación Primer Problemario Prof. Miguel A. Pizaña 22 de Febrero de 2007

Computabilidad y Lenguajes Formales: Autómatas de Pila

5 Autómatas de pila 5.1 Descripción informal. 5.2 Definiciones

Computabilidad y Lenguajes Formales: Autómatas Finitos

Lenguajes y Compiladores Análisis Sintáctico Parte I. Teoría Lenguajes 1

Tema: Autómata de Pila

Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2

Fundamentos de Programación Visual Basic

SSL Guia de Ejercicios

como les va con las practicas?

Notación Asintótica 2

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

Introducción a la Geometría Computacional. Análisis de Algoritmos

Área: INFORMÁTICA. Saber- Saber: Identificar DFD como herramienta para escribir los algoritmos de forma lógica.

Procesadores de lenguaje Tema 6 La tabla de símbolos

Tema 04: Medición y error

Análisis y Complejidad de Algoritmos. Arboles Binarios. Arturo Díaz Pérez

Tema 10: Transmisión de datos

Tema 2 Introducción a la Programación en C.

Autor: Diego Niquefa Solución: Diego Niquefa

LEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas.

Expresiones regulares y distancia de edición.

Lenguajes y Gramáticas

Desarrollo de Programas. Prof. Lisbeth C. Pérez Rivas

Transcripción:

Tema 11: Algoritmos de empate de cadenas M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom 1

Contenido Introducción Empate de cadenas Fuerza bruta Complejidad de Fuerza bruta Rabin-Karp Complejidad de Rabin-Karp Knuth-Morris-Pratt Complejidad de Knuth-Morris-Pratt Autómata finito Complejidad de un autómata finito 2

Introducción Una cadena es una secuencia de caracteres sobre un alfabeto finito. ATCTAGAGA es uncadena sobre Σ = A, C, G, T El problema de emparejamiento de cadenas es encontrar todas las ocurrencias de una cadena p, llamada patrón, en una cadena más grande T del mismo alfabeto. Dadas las cadenas x, y y z, se dice que x es: a) Un prefijo de xy, b) Un sufijo de yx, c) Una subcadena de yxz. 3

A menudo sucede que los datos a procesar no se descomponen lógicamente en registros independientes que representen pequeñas partes identificables. Este tipo de datos se caracteriza fácilmente por el hecho de que se pueden escribir en forma de cadenas: series lineales (por lo regular muy largas) de caracteres. Las cadenas son evidentemente el centro de los sistemas de tratamiento de texto, que proporcionan una gran variedad de posibilidades para la manipulación de textos. 4

Tales sistemas procesan cadenas alfanuméricas, que pueden definirse en primera aproximación como series de letras, números y caracteres especiales. Estos objetos pueden ser bastante grandes, por lo que es importante disponer de algoritmos eficaces para su manipulación. Otro tipo de cadena es la cadena binaria, que es una simple serie de valores 0 y 1. Esta es, en cierto sentido, un tipo especial de cadena alfanumérica, pero es útil hacer la distinción porque existen diferentes algoritmos específicos para este tipo de cadenas y porque las cadenas binarias se utilizan en muchas aplicaciones. 5

Empate de cadenas Implica la implementación de algoritmos de búsqueda de subcadenas y por lo tanto su objetivo es buscar la existencia de una subcadena dentro de una cadena. La mayoría de los algoritmos para este problema se pueden modificar fácilmente para encontrar todas las ocurrencias del patrón en el texto, puesto que recorren el texto en secuencia y se pueden reinicializar en la posición situada inmediatamente después del comienzo de una concordancia, para encontrar la concordancia siguiente. 6

Fuerza bruta El método en el que se piensa de inmediato para el reconocimiento de patrones consiste simplemente en verificar, para cada posición posible del texto en la que el patrón pueda concordar, si efectivamente lo hace. 100111010010100010100111000111 Reconocer la cadena: 10100111 100111010010100010100111000111 10100111 10100111 10100111 10100111 10100111 10100111 100111010010100010100111000111 7

El algoritmo de Fuerza Bruta compara el patrón con el texto un carácter cada vez, hasta encontrar que no coinciden los caracteres. 8

Complejidad de Fuerza bruta Dado un patrón de M caracteres de longitud, y un texto de N caracteres de longitud. Mejor caso: encuentra el patrón en las primeras M posiciones del texto. Complejidad: O(N) Peor caso: longitud M. Complejidad: O(MN) compara el patrón con cada subcadena de texto de BruteForceSearch (T; P) for (s=0; s <= n-m; s++) if (P[1..m] == T[s+1..s+m]) cout << Matching << s; 9

Rabin-Karp Calcula un valor hash para el patrón, y para cada subsecuencia de M-caracteres de texto. Si los valores hash son diferentes, se calcula una valor para la siguiente secuencia. Si los valores hash son iguales se usa una comparación de Fuerza Bruta. Valor Hash de AAAAA es 37 Valor Hash de AAAAH es 100 10

Complejidad de Rabin-Karp Dado un patrón de M caracteres de longitud, y un texto de N caracteres de longitud. Complejidad Pre-procesamiento: O(M) Complejidad Búsqueda: O(MN) RabinKarpSearch(T, P) for( i=1; i<m; i++ ) dm = (dm * D) % Q; // Hash al patrón for( i=1; i<=m; i++ ) h1 = ((h1 * D) + pat[i] ) % Q; h2 = ((h2 * D) + text[i] ) % Q; for( i = 1; i <= n-m+1; i++ ) // Busqueda if( h1 == h2 ) // Potencial coincidencia for(j=1; j<=m && text[i-1+j] == pat[j]; j++ ); if( j > m ) // Coincidencia confirmada cout << Matching <<i; h2 = (h2 + (Q * D) - text[i]*dm ) % Q; h2 = ((h2 * D) + text[i+m] ) % Q; 11

Algoritmo Knuth-Morris-Pratt El algoritmo de búsqueda Knuth-Morris-Pratt (KMP) se diferencia del método de fuerza bruta porque mantiene una pista de información obtenida en comparaciones previas. Se calcula una función de fallo (f) que brinda información sobre el patrón a la hora de hacer las comparaciones. Permite saber el corrimiento sobre el patrón hasta la próxima comparación con algún carácter en el texto. 12

La idea básica de este algoritmo es que cuando se detecta una discordancia (no concordancia), el <falso> principio se compone de los caracteres que se conocen por adelantado (puesto que están en el patrón). Cuando se detecta la no concordancia, se sabe, en virtud del hecho de que concuerdan j caracteres, que no se necesita <retroceder> el puntero i del texto, puesto que ninguno de los j-1 caracteres del texto pueden concordar con el primer carácter del patrón. Saltar todos los caracteres del patrón cuando se detecta una discordancia, sería un error en el caso en el que el patrón se repita en el propio punto de la concordancia. 13

Complejidad: O(n + m) 14

Complejidad de Knuth-Morris-Pratt Dado un patrón de M caracteres de longitud, y un texto de N caracteres de longitud. Complejidad del calculo de la tabla de fallos: O(M) Complejidad Búsqueda: O(M+N) KMPSearch(T, P) KMPnext = prekmpfunction(p); while (r < n) while (h >= 0 && (P[h]!= T[r])) h = KMPnext[h]; h++; r++; if (h >= m) cout<< Matching << r - h; h = KMPnext [h]; 15

Algoritmo con autómata finito Un autómata finito (AF) o máquina de estado finito es un modelo computacional que realiza cómputos en forma automática sobre una entrada para producir una salida. Este modelo está conformado por un alfabeto, un conjunto de estados y un conjunto de transiciones entre dichos estados. Su funcionamiento se basa en una función de transición, que recibe a partir de un estado inicial una cadena de caracteres pertenecientes al alfabeto (la entrada), y que va leyendo dicha cadena a medida que el autómata se desplaza de un estado a otro, para finalmente detenerse en un estado final o de aceptación, que representa la salida. 16

Complejidad de la búsqueda con autómata finito Utiliza un AF Determinístico Cantidad de Estados = m+1 Cantidad de Comparaciones = n Complejidad Pre-procesamiento: O(m³ Σ )) Complejidad Búsqueda: O(n) AutomataFinitoSearch(T; P;d) estado = automata->getinicial(); for(j = 0; j <= n; j++ ) estado = d(estado, T [j]); if (automata->esfinal(estado)) cout << Matching << j + 1 - m; 17