Algoritmos de Strings Héctor Navarro Substrings • Dado un string T (posiblemente muy grande) y un patrón P (de tamaño menor), encontrar la primera (o todas) las apariciones de P en T • Solución trivial de O(NM) • N es el tamaño de T • M es el tamaño de P Substrings for (i=0; T[i] != '\0'; i++) { for (j=0; T[i+j] != '\0' && P[j] != '\0' && T[i+j]==P[j]; j++) ; if (P[j] == '\0') // found a match } Substrings • Peor caso: T=“aaaa…a” P=“aaa…ab” • Normalmente no se comporta tan mal ya que se descartan rápidamente en las primeras iteraciones Substrings P = “nano” i 0 1 2 3 4 5 6 7 8 9 10 11 T b a n a n a n o b a n o i=0 X i=1 X i=2 n a n X i=3 X i=4 n a n o i=5 X i=6 n X i=7 X i=8 X i=9 n X i=10 X Autómata • Es posible construir un autómata en base al patrón para hacer búsquedas n a n o j=4 j=0 j=1 j=2 j=3 En cada estado existen dos posibilidades: La letra actual coincide con la letra reconocida en ese estado: avanzar al siguiente estado y letra Autómata • Es posible construir un autómata en base al patrón para hacer búsquedas n a n o j=4 j=0 j=1 j=2 j=3 En cada estado existen dos posibilidades: La letra actual no coincide con la letra reconocida en ese estado: avanzar al siguiente estado, no avanzar la letra Autómata • Es posible construir un autómata en base al patrón para hacer búsquedas n a n o j=4 j=0 j=1 j=2 j=3 En el estado 0 siempre se avanza de letra Autómata • Es posible construir un autómata en base al patrón para hacer búsquedas n a n o j=4 j=0 j=1 j=2 j=3 B A N A N A N O B A N O Autómata • Es posible construir un autómata en base al patrón para hacer búsquedas n a n a j=4 j=0 j=1 j=2 j=3 N A N A N A
Description: