¿Cómo puedo extender el algoritmo KMP a 2 dimensiones?

  • Crea un trie que contenga filas de tu patrón.
    Esto también mostrará inmediatamente la situación en la que varias filas son idénticas. Solo guarde una copia de cada fila distinta. Por ejemplo, si este es el patrón:
      abacá
     bacad
     abacá
     efefe
    

    el trie contendrá tres registros diferentes: 1 = abacá, 2 = bacad y 3 = efefe. El patrón original ahora corresponde a la secuencia de filas (1,2,1,3).

  • Use el trie para construir el autómata finito para el algoritmo Aho-Corasick (la generalización de KMP a múltiples patrones).
  • Para cada fila de la matriz, ejecute Aho-Corasick. Para cada celda de la matriz, escriba el número del patrón de fila que termina allí, o 0 si no existe dicho patrón. (Tenga en cuenta que, dado que todos los patrones de nuestro trie son distintos y tienen la misma longitud, hay como máximo una coincidencia en cada celda).
  • Para cada columna de la matriz, ejecute KMP y busque la secuencia de números que corresponde a nuestro patrón. Por ejemplo, para el patrón de ejemplo anterior, una coincidencia corresponde a la secuencia de números (1,2,1,3) que aparecen consecutivamente en alguna columna de las notas que tomamos en el paso anterior.

La complejidad temporal de esta solución es óptima: se garantiza que sea lineal en el tamaño de la entrada.

More Interesting

¿Es posible codificar un algoritmo de manera que cuando se proporciona una imagen de entrada y la ropa que una persona usa en la imagen se recorta y compara con una imagen en una base de datos y sale con la coincidencia exacta / coincidencia más cercana?

¿Qué son los algoritmos de compresión de datos?

¿Dónde se puede encontrar una foto y detalles biográficos de Burton Howard Bloom, inventor del filtro Bloom?

¿Por qué algún algoritmo tiene la misma salida?

¿Puedo aplicar la optimización de algoritmos genéticos en un problema multivariable con 2 entradas frente a 2 salidas?

¿Es seguro decir que un algoritmo iterativo es mejor que el recursivo para el mismo problema dado que ambos son de la misma complejidad temporal?

¿Qué temas de algoritmos deberían cubrirse para convertirse en un buen programador?

¿Puedo diseñar una estructura de datos tipo pila que haga popMin () en tiempo O (1)?

¿Cuáles son los usos de diferentes algoritmos de clasificación como burbuja, selección, inserción, shell, fusión, montón, rápido, árbol, raíz, conteo y clasificación de cubetas en escenarios de la vida real?

¿Cuál es la mejor estructura y algoritmo de datos para encontrar un valor máximo dentro de un subconjunto de una población de datos que satisfaga alguna condición de rango?

¿Es posible proporcionar un análisis de complejidad para todos los algoritmos en términos de theta?

¿Cuál es el enfoque algorítmico para el problema spoj SPOJ.com - Problema ROBOTGRI?

Además del algoritmo de tallado de costura, ¿qué otros algoritmos se pueden usar para Image Resizer?

¿Cuáles son las ventajas de los algoritmos SVM?

¿Cuáles son los problemas resueltos por los algoritmos hash?