Estoy tratando de entender el algoritmo de concordancia de cadena aho-corasick. Supongamos que nuestros patrones son abcd
y bc
. Terminamos un árbol como esteAho-Corasick y subseries adecuadas
[]
/\
[a]..[b]
/: |
[b].: [c]
| :
[c].....
|
[d]
La línea punteada muestra la función de falla.
Ahora suponemos que alimentamos en la cadena abcd
. Esto seguirá al árbol y detectará la coincidencia "abcd", sin embargo, hasta donde puedo decir, no se informará la coincidencia bc
. ¿Estoy malentendiendo el algoritmo?
A menos que esté malinterpretando, este no es el algoritmo de Aho-Corasick. Lo que estás describiendo es esencialmente un NFA. – dfb
@spinning_plate ¿Cómo es NFA si solo hay un nodo actual en cada paso? – adamax
"Cada vez que llegue a un nuevo nodo, examine la ruta completa comenzando desde este nodo y consiste en enlaces de falla y encuentre coincidencias en esta ruta" - Está atravesando las rutas de falla mientras mantiene la misma posición para continuar más adelante. Esto produce el mismo resultado si ha evaluado el trie como un NFA. ¿Puede proporcionar una referencia a una implementación de Aho-Corasick que evalúa los enlaces de falla cuando no hay falla? – dfb