Está en la página 1de 3

AlgoritmodebsquedadecadenasAhoCorasick

DeWikipedia,laenciclopedialibre
En Ciencias de la Computacin, el Algoritmo de bsqueda de cadenas AhoCorasick es un algoritmo de
bsquedadecadenasinventadoporAlfredV.AhoyMargaretJ.Corasick.Esunalgoritmoquebuscaelementos
(patrones)deunconjuntofinitodecadenas(diccionario)dentrodeuntexto.Unadelasventajasquepresentaes
que procesa el texto de entrada solamente una vez, es decir, realiza la bsqueda de todos los patrones de forma
simultnea. Si se considera el tamao del alfabeto al cual pertenecen los patrones como constante, entonces la
complejidadtemporaldelalgoritmoeslinealencuantoalasumadelaslongitudesdelospatronesmslalongitud
deltexto.Siademssequierenconocertodaslasocurrenciasdeformaexplcita,alordendelalgoritmohayque
sumarlelacantidaddeocurrencias.Esnecesariodestacarquesisebuscantodaslasocurrencias,entoncespuede
haberunnmerocuadrticodeellassicadasubcadenaesunaocurrencia.Porejemplosieldiccionarioes a, aa,
aaa,aaaaylacadenadeentradaesaaaa).
Informalmente, el algoritmo construye un autmata finito determinista similar a un trie con enlaces adicionales
entre los nodos internos. Estos enlaces extras permiten llevar a cabo transiciones bastante rpidas entre
correspondencias fallidas de patrones (ejemplo, una bsqueda para cat en un trie que no contiene a cat, pero
contienecart,ydeestamanerafallaraenelnodoprefijadopor ca),aotrasramificacionesdeltriequecomparten
prefijoscomunes(ejemplo,enelcasoanterior,unaramificacinpara attributepudieraselamejortransicina
efectuar). Esto le permite al autmata realizar transiciones entre ocurrencias de patrones sin necesidad de
backtracking.
Cuando el diccionario de patrones se conoce de antemano (por ejemplo, en una base de datos de virus), la
construccindelautmatasepuedellevaracaboyseguardaelautmatacompiladoparausofuturo.Enestecaso,
lacomplejidadtemporaleslinealencuantoalalongituddelaentradamselnmerodeentradasencontradas.
El grfico que se muestra a continuacin es la estructura AhoCorasick construida a partir del diccionario
especificado,concadafilaenlatablarepresentandounnodoeneltrie,ylacolumnaCaminoindicandola(nica)
secuenciadecaracteresdesdelarazdeltriealnodoencuestin.
Laestructuradedatostieneunnodoparacadaprefijodecadacadenaeneldiccionario.Deestamanera,si(bca)
esteneldiccionario,entoncesestarnpresentesnodospara(bca),(bc),(b)y().Hayunarcodirigido"hijo"negro
desdecadanodoaunnodocuyoCaminoseobtieneaadiendouncaracter.Porlotanto,hayunarconegrode(bc)
a (bca). Hay un arco dirigido "sufijo" de cada nodo al nodo correspondiente a su sufijo propio ms largo en el
grafo.Porejemplo,paraelnodo(caa),susufijospropiosson(aa),(a)y().Elmslargodestosqueexisteenel
grafoes(a),porloquehayunarcoazulde(caa)a(a).Hayunarcoverde"sufijoendiccionario"desdecadanodo
alsiguientenodoeneldiccionarioquepuedeseralcanzadosiguiendoarcosazules.Porejemplo,hayunarcoverde
de(bca)a(a)porque(a)eselprimernodocorrespondienteaunodelospatroneseneldiccionario(nodoblanco)
quesealcanzasiguiendolosarcosazulesa(ca)yluegoa(a).

Diccionario{a,ab,bc,bca,c,caa}
Camino EnDiccionario Enlacesufijo EnlacesufijoenDicc
()

(a)

()

(ab)

(b)

(b)

()

(bc)

(c)

(c)

(bca)

(ca)

(a)

(c)

()

(ca)

(a)

(a)

(caa)

(a)

(a)

Alahoradeencotrarlasoccurrenciasenuntexto,encadapasoelnodoactualseextiendeencontrandosuhijocon
elcaractercorrespondiente,ysinoexiste,sebuscasebuscasu"hijosufijo"utilizadoenenlacesufijoysecontina
de esta manera hasta encontrar un nodo que tenga una transicin con el caracter actual o hasta que se llegue al
nodoraz.
Cuandoelalgoritmoalcanzaunnodo,devuelvetodaslasentradaseneldiccionarioqueterminanenlaposicindel
caracteractualeneltextodeentrada.Estosehaceimprimiendocadanodoalcanzadosiguiendolos"enlacessufijo
endiccionario",comenzandoporesenodo,ycontinuandohastaalcanzarunnodoquenotenga"enlacesufijoen
diccionario".
Laejecucinconlacadenadeentradaabccabproducelossiguientespasos:

Anlisisdelacadenaabccab
Salida:Posicin
Transicin
final

Cadenaque
queda

Nodo

Salida

()

abccab

comenzarenlaraz

(a)

bccab

a:1

()ahijo(a)

Nodeactual

(ab)

ccab

ab:2

(a)ahijo(ab)

Nodoactual

(bc)

cab

bc:3,c:3

(ab)asufijo(b)ahijo(bc)

Nodo actual, Enlace sufijo en


dicc

(c)

ab

c:4

(bc)asufijo(c)asufijo()ahijo
Nodoactual
(c)

(ca)

a:5

(c)ahijo(ca)

Nodosufijoendicc

ab:6

(ca)asufijo(a)ahijo(ab)

Nodoactual

(ab)

Referencias

Aho, Alfred V. Margaret J. Corasick (June de 1975). Efficient string matching: An aid to bibliographic
search.CommunicationsoftheACM18(6):333340. doi:10.1145/360825.360855(http://dx.doi.org/10.1145%2F3
60825.360855).(Elaccesoaltextocompletopuedeestarrestringido.)

Enlacesexternos
Set Matching and AhoCorasick Algorithm (http://www.cs.uku.fi/~kilpelai/BSA05/lectures/slides04.pdf),
ConferenciaendiapositivasporPekkaKilpelinen
Entrada AhoCorasick entry (http://www.nist.gov/dads/HTML/ahoCorasick.html) en el Diccionario de
estructurasdedatosyalgoritmosdeNIST
AhoCorasickstringmatchinginC#(http://www.codeproject.com/KB/recipes/ahocorasick.aspx),untutorial
enCodeProjectescritoporTomPetek
AhoCorasick C implementation (https://sourceforge.net/projects/multifast/), bueno para patrones de
longitudpequea.
ExplicacindelAhoCorasickusandoPython(http://papercruncher.com/2012/02/26/stringsearchingusing
ahocorasick/)
ImplementacindelAhoCorasickenJava(https://hkn.eecs.berkeley.edu/~dyoo/java/index.html)
Animated AhoCorasick (http://blog.ivank.net/ahocorasickalgorithminas3.html), Una implementacin
animadadelAhoCorasickconpropsitosacadmicos
AhoCorasick C++ implementation (https://github.com/bin3/balgo), Esta librera en C++ tambin
implementaotrosalgoritmosrelacionados
Obtenido
de
https://es.wikipedia.org/w/index.php?title=Algoritmo_de_bsqueda_de_cadenas_Aho
Corasick&oldid=88345891
Categoras: Algoritmosdebsqueda Algoritmosepnimosenmatemticas
Estapginafuemodificadaporltimavezel10ene2016alas09:06.
EltextoestdisponiblebajolaLicenciaCreativeCommonsAtribucinCompartirIgual3.0podranser
aplicablesclusulasadicionales.Alusarestesitio,ustedaceptanuestrostrminosdeusoynuestrapoltica
deprivacidad.
WikipediaesunamarcaregistradadelaFundacinWikimedia,Inc.,unaorganizacinsinnimodelucro.

También podría gustarte