<?xml version="1.0" encoding="ISO-8859-1"?><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<front>
<journal-meta>
<journal-id>0188-9532</journal-id>
<journal-title><![CDATA[Revista mexicana de ingeniería biomédica]]></journal-title>
<abbrev-journal-title><![CDATA[Rev. mex. ing. bioméd]]></abbrev-journal-title>
<issn>0188-9532</issn>
<publisher>
<publisher-name><![CDATA[Sociedad Mexicana de Ingeniería Biomédica]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S0188-95322012000200005</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[Un algoritmo de Consenso para la Búsqueda Aproximada de Patrones en Cadenas de Proteínas]]></article-title>
<article-title xml:lang="en"><![CDATA[A Consensus algorithm for approximate pattern matching in protein sequences]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Alba]]></surname>
<given-names><![CDATA[A.]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Rubio-Rincón]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Rodríguez-Kessler]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Arce-Santana]]></surname>
<given-names><![CDATA[E.R.]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Méndez]]></surname>
<given-names><![CDATA[M.O.]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,Universidad Autónoma de San Luis Potosí Facultad de Ciencias ]]></institution>
<addr-line><![CDATA[San Luis Potosí ]]></addr-line>
<country>México</country>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>00</month>
<year>2012</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>00</month>
<year>2012</year>
</pub-date>
<volume>33</volume>
<numero>2</numero>
<fpage>87</fpage>
<lpage>99</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://www.scielo.org.mx/scielo.php?script=sci_arttext&amp;pid=S0188-95322012000200005&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.mx/scielo.php?script=sci_abstract&amp;pid=S0188-95322012000200005&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.mx/scielo.php?script=sci_pdf&amp;pid=S0188-95322012000200005&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[En bioinformática, una de las principales herramientas que permiten la localización de características comunes en cadenas de proteínas o ADN de distintas especies es la búsqueda aproximada de cadenas. Desde el punto de vista computacional, la dificultad de la búsqueda aproximada de cadenas radica en encontrar medidas adecuadas para comparar dos cadenas de manera eficiente, dado que en muchos casos se desea realizar búsquedas en tiempo real, dentro de bases de datos de gran tamaño. En este artículo se propone un método novedoso para la búsqueda aproximada de cadenas basado en una generalización del algoritmo propuesto por Baeza-Yates y Perleberg en 1996 para calcular la distancia de Hamming entre dos secuencias, y una etapa de post-procesamiento que permite reducir de manera significativa el número de falsos positivos reportados por el algoritmo. El método propuesto ha sido evaluado a través de casos sintéticos con secuencias aleatorias, y con casos reales de secuencias de proteínas de plantas. Los resultados muestran que el algoritmo propuesto es altamente eficiente en términos computacionales y en especificidad, en particular al ser comparado con un método publicado anteriormente, basado en la correlación de fase.]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[In bioinformatics, one of the main tools which allow scientists to find common characteristics in protein or DNA sequences of different species is the approximate matching of strings. From the computational point of view, the difficulty of approximate string matching lies in finding adequate measures to efficiently compare two strings, since, in many cases, one is interested in performing searches in real time, within large databases. In this paper we propose a novel method for approximate string matching based on a generalization of the algorithm proposed by Baeza-Yates and Perleberg in 1996 for computing the Hamming distance between two sequences. In addition, a post-processing stage which significantly reduces the number of false positives is presented. The proposed method has been evaluated in synthetic cases of random sequences, and with real cases of plant protein sequences. Results show that the proposed algorithm is highly efficient in computational terms and in specificity, especially when compared against a previously published method, which is based on the phase correlation function.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[búsqueda aproximada de cadenas]]></kwd>
<kwd lng="es"><![CDATA[secuencias de proteínas]]></kwd>
<kwd lng="es"><![CDATA[bioinformática]]></kwd>
<kwd lng="es"><![CDATA[algoritmos de consenso]]></kwd>
<kwd lng="en"><![CDATA[approximate string matching]]></kwd>
<kwd lng="en"><![CDATA[protein sequences]]></kwd>
<kwd lng="en"><![CDATA[bioinformatics]]></kwd>
<kwd lng="en"><![CDATA[consensus algorithms]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[  	    <p align="justify"><font face="verdana" size="4">Art&iacute;culo de investigaci&oacute;n original</font></p>  	    <p>&nbsp;</p>  	    <p align="center"><font face="verdana" size="4"><b>Un algoritmo de Consenso para la B&uacute;squeda Aproximada de Patrones en Cadenas de Prote&iacute;nas</b></font></p> 	    <p align="center">&nbsp;</p> 	    <p align="center"><b><font size="3" face="verdana">A Consensus Algorithm for approximate pattern matching in protein sequences</font></b></p>      <p>&nbsp;</p>  	    <p align="center"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2"><b>A. Alba</b></font><b>, <font face="verdana" size="2">M. Rubio&#45;Rinc&oacute;n</font>, <font face="verdana" size="2">M. Rodr&iacute;guez&#45;Kessler</font>, <font face="verdana" size="2">E.R. Arce&#45;Santana</font>, <font face="verdana" size="2">M.O. M&eacute;ndez</font></b></font></font></p>  	    <p>&nbsp;</p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><i><font face="verdana" size="2">Facultad de Ciencias, Universidad Aut&oacute;noma de San Luis Potos&iacute;.</font></i></font></font></p>  	    ]]></body>
<body><![CDATA[<p>&nbsp;</p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2"><b>Correspondencia:</b></font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Alfonso Alba<i>     <br> Facultad de Ciencias, UASLP.     <br> Av. Salvador Nava Mtz. S/N,     <br> Zona Universitaria.     <br> San Luis Potos&iacute;, SLP, C.P. 78290.     <br> Tel: (444) 826&#45;2486 ext.</i></font> <i><font face="verdana" size="2">2906.</font></i><font face="verdana" size="2"></font></font></font></p>  	    <p>&nbsp;</p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Fecha de recepci&oacute;n: 29/Octubre/2012.    ]]></body>
<body><![CDATA[<br> 	Fecha de aceptaci&oacute;n: 10/Diciembre/2012.</font></font></font></p>  	    <p>&nbsp;</p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2"><b>Resumen</b></font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">En bioinform&aacute;tica, una de las principales herramientas que permiten la localizaci&oacute;n de caracter&iacute;sticas comunes en cadenas de prote&iacute;nas o ADN de distintas especies es la b&uacute;squeda aproximada de cadenas. Desde el punto de vista computacional, la dificultad de la b&uacute;squeda aproximada de cadenas radica en encontrar medidas adecuadas para comparar dos cadenas de manera eficiente, dado que en muchos casos se desea realizar b&uacute;squedas en tiempo real, dentro de bases de datos de gran tama&ntilde;o. En este art&iacute;culo se propone un m&eacute;todo novedoso para la b&uacute;squeda aproximada de cadenas basado en una generalizaci&oacute;n del algoritmo propuesto por Baeza&#45;Yates y Perleberg en 1996 para calcular la distancia de Hamming entre dos secuencias, y una etapa de post<font face="verdana" size="2"><font face="verdana" size="2">&#45;</font></font>procesamiento que permite reducir de manera significativa el n&uacute;mero de falsos positivos reportados por el algoritmo. El m&eacute;todo propuesto ha sido evaluado a trav&eacute;s de casos sint&eacute;ticos con secuencias aleatorias, y con casos reales de secuencias de prote&iacute;nas de plantas. Los resultados muestran que el algoritmo propuesto es altamente eficiente en t&eacute;rminos computacionales y en especificidad, en particular al ser comparado con un m&eacute;todo publicado anteriormente, basado en la correlaci&oacute;n de fase.</font></font></font></p>      <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2"><b>Palabras clave</b>: b&uacute;squeda aproximada de cadenas, secuencias de prote&iacute;nas, bioinform&aacute;tica, algoritmos de consenso.</font></font></font></p>  	    <p>&nbsp;</p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2"><b>Abstract</b></font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">In bioinformatics, one of the main tools which allow scientists to find common characteristics in protein or DNA sequences of different species is the approximate matching of strings. From the computational point of view, the difficulty of approximate string matching lies in finding adequate measures to efficiently compare two strings, since, in many cases, one is interested in performing searches in real time, within large databases. In this paper we propose a novel method for approximate string matching based on a generalization of the algorithm proposed by Baeza&#45;Yates and Perleberg in 1996 for computing the Hamming distance between two sequences. In addition, a post&#45;processing stage which significantly reduces the number of false positives is presented. The proposed method has been evaluated in synthetic cases of random sequences, and with real cases of plant protein sequences. Results show that the proposed algorithm is highly efficient in computational terms and in specificity, especially when compared against a previously published method, which is based on the phase correlation function.</font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2"><b>Keywords</b>: approximate string matching, protein sequences, bioinformatics, consensus algorithms</font>.</font></font></p>  	    <p>&nbsp;</p>  	    ]]></body>
<body><![CDATA[<p align="justify"><font face="verdana" size="2"><b>INTRODUCCI&Oacute;N</b></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">La b&uacute;squeda aproximada de cadenas es un problema computacional que tiene m&uacute;ltiples aplicaciones en bioinform&aacute;tica, reconocimiento de patrones, b&uacute;squedas en bases de datos, correctores autom&aacute;ticos de ortograf&iacute;a, y detectores de plagio, entre otras &#91;1,2&#93;. En muchos casos, estas aplicaciones requieren que las b&uacute;squedas se realicen de la manera m&aacute;s eficiente posible. Por ejemplo, la correcci<font face="verdana" size="2"><font face="verdana" size="2">&oacute;</font></font>n de ortograf&iacute;a en un procesador de textos moderno suele realizarse en tiempo real, mientras el usuario escribe. Por otra parte, bases de datos de secuencias gen<font face="verdana" size="2"><font face="verdana" size="2">&eacute;</font></font>ticas como GenBank del Centro Nacional de Informaci<font face="verdana" size="2"><font face="verdana" size="2">&oacute;</font></font>n Biotecnol<font face="verdana" size="2"><font face="verdana" size="2">&oacute;</font></font>gica (NCBI) de Estados Unidos, o buscadores de Internet como Google o Yahoo, reciben un gran n&uacute;mero de solicitudes de b&uacute;squeda por segundo y requieren algoritmos eficientes de b&uacute;squeda para minimizar el tiempo de espera del usuario. </font></font></font></p> 	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">El problema puede definirse como aquel</font> <font face="verdana" size="2">donde uno desea encontrar instancias de una cadena de s<font face="verdana" size="2"><font face="verdana" size="2">&iacute;</font></font>mbolos <i>a<sub>1</sub>a<sub>2</sub>...a<sub>m</sub>,</i> la cual llamaremos cadena patr<font face="verdana" size="2"><font face="verdana" size="2">&oacute;</font></font>n, dentro de una cadena de b&uacute;squeda o texto <i>b<sub>1</sub>b<sub>2</sub>...b<sub>n</sub>,</i> de manera que cada instancia encontrada puede diferir hasta cierto punto de la cadena patr<font face="verdana" size="2"><font face="verdana" size="2">&oacute;</font></font>n de una forma cuantificable a trav<font face="verdana" size="2"><font face="verdana" size="2">&eacute;</font></font>s de alguna medida de distancia entre cadenas. Las medidas m<font face="verdana" size="2"><font face="verdana" size="2">&aacute;</font></font>s com&uacute;nmente utilizadas son la distancia de Hamming&#91;3&#93; y la distancia de Levenshtein&#91;4&#93;. La distancia de Hamming indica el n&uacute;mero de s&iacute;mbolos no&#45;correspondientes entre dos cadenas de la misma longitud, y la distancia de Levenshtein (tambi<font face="verdana" size="2"><font face="verdana" size="2">&eacute;</font></font>n llamada distancia de edici<font face="verdana" size="2"><font face="verdana" size="2">&oacute;</font></font>n) la cual representa el n&uacute;mero m<font face="verdana" size="2"><font face="verdana" size="2">&iacute;</font></font>nimo de operaciones de edici<font face="verdana" size="2"><font face="verdana" size="2">&oacute;</font></font>n (inserciones, supresiones y reemplazos de s<font face="verdana" size="2"><font face="verdana" size="2">&iacute;</font></font>mbolos) que se requieren para transformar una de las cadenas en la otra. En este &uacute;ltimo caso, las dos cadenas a comparar no tienen necesariamente la misma longitud. Otras medidas pueden asignar distintos pesos a las operaciones de edici<font face="verdana" size="2"><font face="verdana" size="2">&oacute;</font></font>n, o establecer equivalencias</font> <font face="verdana" size="2">entre s&iacute;mbolos, pero este tipo de distancias suelen utilizarse en aplicaciones espec&iacute;ficas y dificultan la generalizaci<font face="verdana" size="2"><font face="verdana" size="2">&oacute;</font></font>n de los algoritmos de b&uacute;squeda.</font></font></font></p>      <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Matem<font face="verdana" size="2"><font face="verdana" size="2">&aacute;</font></font>ticamente, dado un alfabeto A, una cadena patr<font face="verdana" size="2"><font face="verdana" size="2">&oacute;</font></font>n <i>a<sub>1</sub>a<sub>2</sub>...a<sub>m</sub></i> &isin; <i>A</i>* (donde * representa la operaci<font face="verdana" size="2"><font face="verdana" size="2">&oacute;</font></font>n estrella de Kleene&#91;5&#93;), un texto de b&uacute;squeda <i>b<sub>1</sub>b<sub>2</sub>...b<sub>n</sub></i> &isin; A*, una distancia entre cadenas <i>d</i> : <i>A</i>* x <i>A</i>* &rarr; &#8477;, y una distancia <font face="verdana" size="2"><font face="verdana" size="2">m&aacute;</font></font>xima <i>k</i> G &#8477;, el problema consiste en encontrar todos los &iacute;ndices <i>j</i> &isin; {1, ...,<i>n</i>} (es decir, posiciones dentro del texto) tales que <i>d(a<sub>1</sub>...a<sub>m</sub>, bj</i>...<i>b<sub>j+m'</sub></i>) &lt; <i>k</i> para alg&uacute;n entero <i>m' &#8805;</i> 0.</font></font></font></p>      <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Para hacer la b&uacute;squeda m<font face="verdana" size="2"><font face="verdana" size="2">&aacute;</font></font>s eficiente, un algoritmo de b&uacute;squeda aproximada de cadenas puede pre&#45;procesar de alguna manera la cadena patr&oacute;n y/o el texto de b&uacute;squeda. En el primer caso, la cadena patr&oacute;n puede ser analizada, codificada, o representada de forma que se facilite la comparaci&oacute;n con distintos segmentos del texto. Por ejemplo, los algoritmos basados en correlaci&oacute;n pueden codificar el patr&oacute;n como una secuencia de n&uacute;meros para despu&eacute;s obtener la transformada de Fourier de la secuencia, y as&iacute; calcular la correlaci&oacute;n en el dominio de la frecuencia. Otros algoritmos dividen el patr&oacute;n en sub&#45;secuencias (llamados <i>n</i>&#45;gramas) y reducir el problema de b&uacute;squeda aproximada del patr&oacute;n a la b&uacute;squeda exacta de los <i>n</i>&#45;gramas. Por otra parte, el texto de b&uacute;squeda tambi&eacute;n puede</font> <font face="verdana" size="2">ser pre&#45;procesado para crear &iacute;ndices (t&iacute;picamente en forma de &aacute;rboles de sufijos) que despu<font face="verdana" size="2"><font face="verdana" size="2">&eacute;</font></font>s </font><font face="verdana" size="2">permiten seleccionar los segmentos del texto donde la b&uacute;squeda es relevante, logrando as&iacute; una disminuci&oacute;n substancial en el tiempo de b&uacute;squeda a cambio de una costosa etapa de preprocesamiento. De esta manera, los algoritmos de b&uacute;squeda aproximada de cadenas pueden clasificarse en dos grupos: algoritmos en&#45;l&iacute;nea, los cuales pueden pre&#45;procesar de alguna manera la cadena patr&oacute;n pero no el texto, y algoritmos fuera&#45;de&#45;l&iacute;nea, que son dise&ntilde;ados para buscar eficientemente sobre bases de datos indexadas. Estos &uacute;ltimos se aplican principalmente en bases de datos de gran tama&ntilde;o donde la informaci&oacute;n es relativamente est&aacute;tica (e.g., b&uacute;squedas en internet y en bases de datos de bioinform&aacute;tica). Sin embargo, el estudio de algoritmos en&#45;l&iacute;nea permanece muy vigente ya que de &eacute;stos algoritmos pueden tambi&eacute;n derivarse nuevos m&eacute;todos fuera&#45;de&#45;l&iacute;nea. Para tener un panorama m&aacute;s amplio sobre estos m&eacute;todos, se recomiendan al lector los siguientes trabajos de revis&oacute;n: Ukkonen, 1985; Jokinen et al., 1996; Navarro, 2001; Navarro et al., 2001; Boytsov, 2011 &#91;6&#45;10&#93;.</font></font></font></p>      <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Uno de los principales problemas de muchos algoritmos de b&uacute;squeda aproximada de cadenas es el gran n&uacute;mero de falsos positivos que reportan; estos consisten en instancias que por azar son lo suficientemente parecidas a la cadena patr&oacute;n, pero no son relevantes para la aplicaci&oacute;n de inter&eacute;s. En b&uacute;squedas dentro de bases de datos grandes, es com&uacute;n observar del orden de decenas de miles hasta centenas de millones de falsos positivos, dependiendo tambi&eacute;n de la longitud de la cadena patr&oacute;n&#91;11&#93;. El n&uacute;mero de falsos positivos tambi&eacute;n depende en gran medida de la distancia m&aacute;xima de edici&oacute;n <i>k</i> que debe haber entre la cadena patr&oacute;n y cualquier instancia encontrada en el texto. Si <i>k</i> es demasiado peque&ntilde;o, existe el riesgo de no encontrar algunas instancias relevantes (falsos negativos), mientras que si <i>k</i> es demasiado grande, un gran n&uacute;mero de falsos positivos ser&aacute;n reportados. Dependiendo de la aplicaci&oacute;n, puede ser preferible minimizar el n&uacute;mero de falsos negativos (error de tipo II), a&uacute;n a costa de un mayor n&uacute;mero de falsos positivos, pero entonces se requerir&aacute; una etapa de post&#45;procesamiento (autom&aacute;tica o asistida por el usuario) para depurar los resultados y descartar las instancias no relevantes. Muchas veces este post&#45;proceso consume m&aacute;s tiempo que el mismo proceso de b&uacute;squeda, lo cual puede ser una de las razones por la que los desarrolladores de bases de datos no siempre se molestan en usar m&eacute;todos de b&uacute;squeda modernos y eficientes.</font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">En este trabajo se presenta un nuevo m&eacute;todo en&#45;l&iacute;nea para la b&uacute;squeda aproximada de cadenas, el cual no se basa en una distancia de edici&oacute;n (como las distancias de Hamming o Levenshtein), sino en una medida de coincidencia <i>c<sub>j</sub></i> que se calcula para cada posici&oacute;n del texto <i>j</i> =1, ..., <i>n</i>. Aquellas posiciones donde el &iacute;ndice sobrepase un umbral dado corresponder&aacute;n a instancias de la cadena patr&oacute;n. El algoritmo que se presenta es eficiente, f&aacute;cil de implementar, y puede paralelizarse para reducir los tiempos de b&uacute;squeda.</font></font></font><font face="verdana" size="2"><font face="verdana" size="2">El presente manuscrito se organiza de la siguiente manera: en primer lugar, se repasa un m&eacute;todo previamente publicado por Baeza&#45;Yates y Perleberg&#91;12&#93; basado en la distancia de Hamming; es decir, donde la</font> <font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">&uacute;</font></font>nica operaci&oacute;n de edici&oacute;n permitida es el reemplazo de s&iacute;mbolos. Posteriormente, se presentan las modificaciones realizadas a este algoritmo para generalizarlo a casos donde se permiten las inserciones y supresiones de s&iacute;mbolos. A continuaci&oacute;n, se introduce una etapa de post&#45;procesamiento que reducir&aacute; el n&uacute;mero de falsos positivos de manera significativa y eficiente, completando as&iacute; el algoritmo propuesto. En seguida, se presentan una serie de resultados obtenidos para casos de prueba sint&eacute;ticos y para casos reales con cadenas de prote&iacute;nas. Mediante estas pruebas se eval&uacute;a, de manera cualitativa y cuantitativa, la capacidad discriminativa del m&eacute;todo, comparando contra un m&eacute;todo previamente publicado, el cual se basa en la funci&oacute;n de correlaci&oacute;n de fase&#91;13&#93;. Finalmente, se presentan las conclusiones.</font></font></p>     <p>&nbsp;</p>  	    <p align="justify"><font face="verdana" size="2"><b>M&Eacute;TODO PROPUESTO</b></font></p>  	    <p align="justify"><font face="verdana" size="2"><b>Algoritmo de Baeza&#45;Yates y Perleberg</b></font></p>     ]]></body>
<body><![CDATA[<p align="justify"><font face="verdana" size="2">El algoritmo en el cual se basa el m&eacute;todo propuesto&#91;12&#93; considera solamente el caso donde la <font face="verdana" size="2"><font face="verdana" size="2">&uacute;</font></font>nica operaci&oacute;n de edici&oacute;n permitida es la</font> <font face="verdana" size="2">sustituci&oacute;n de s&iacute;mbolos; es decir, cuando la distancia de Hamming <i>d<sub>H</sub></i> entre el patr&oacute;n y cualquier instancia encontrada es finita. Este algoritmo calcula, para cada posici&oacute;n <i>j</i> =1, ..., <i>n</i> en el texto, el n&uacute;mero de s&iacute;mbolos <i>c<sub>j</sub></i> que coinciden entre la cadena patr&oacute;n y la subcadena del texto (de la misma longitud) que inicia en <i>j</i>; es decir, se calcula <i>c<sub>j</sub></i> = <i>m &minus; d<sub>H</sub> (a<sub>1</sub>...a<sub>m</sub>,b<sub>j</sub>...b<sub>j+m&#45;1</sub>)</i>.</font></p>     <p align="justify"><font face="verdana" size="2">Consideremos primero el caso m&aacute;s simple, donde todos los s&iacute;mbolos del patr&oacute;n <i>a<sub>1</sub>...a<sub>m</sub></i> son distintos. El algoritmo realiza primero una etapa de pre&#45;procesamiento donde se genera una lista de las posiciones donde aparece cada s&iacute;mbolo dentro de la cadena patr&oacute;n, relativas al primer s&iacute;mbolo de la cadena; por ejemplo, la posici&oacute;n relativa correspondiente al primer s&iacute;mbolo es cero. Espec&iacute;ficamente, para cada s&iacute;mbolo <i>s</i> &isin; <i>A</i>, se define <i>&#945;(s)= j</i> &minus; 1 si <i>a<sub>j</sub></i> = <i>s</i>. Si el s&iacute;mbolo <i>s</i> no aparece en la cadena patr&oacute;n, entonces <i>&#945;(s)</i> queda indefinido, o se le asigna un valor que represente esta situaci&oacute;n. Luego, se inicializa un contador <i>c<sub>j</sub></i> con el valor cero para <i>j</i> =1, ..., <i>n</i>. A continuaci&oacute;n se recorre cada s&iacute;mbolo <i>b<sub>j</sub></i> del texto, para <i>j</i> =1, ..., <i>n</i>; si <i>&#945;(b<sub>j</sub>)</i> est&aacute; definido, entonces b<sub>j</sub> corresponde a uno de los s&iacute;mbolos del patr&oacute;n y existe la posibilidad de que una instancia de la cadena patr&oacute;n inicie en la posici&oacute;n <i>j</i> &minus; <i>&#945;(b<sub>j</sub>)</i> del texto. Para representar esta posibilidad, el algoritmo emitir&aacute; un voto, incrementando el contador correspondiente c<sub>{j&minus; &#945;(bj)}</sub>. Una vez terminado el proceso, la posiciones de inicio de las instancias relevantes son aquellas que obtuvieron suficientes votos, es decir, aquellas<i> j </i>para las cuales <i>c<sub>j</sub></i> &ge; <i>m</i> &minus; <i>k</i>.</font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Solo resta extender el algoritmo para el caso en el que uno o m&aacute;s s&iacute;mbolos puedan aparecer m&uacute;ltiples veces dentro de la cadena patr&oacute;n. En este caso, para cada s&iacute;mbolo <i>s</i> &isin; <i>A</i> se debe llevar un registro de las posiciones en la cadena patr&oacute;n donde aparece <i>s</i>. En otras palabras, ahora <i>&#945;(s)</i> es un conjunto definido como <i>&#945;(s)</i>= {<i>j : a<sub>j</sub> = s</i>}. Durante la etapa de recorrido del texto, si un s&iacute;mbolo <i>b<sub>j</sub></i> se encuentra en el patr&oacute;n, entonces debe emitirse un voto para cada posici&oacute;n del texto donde podr&iacute;a iniciar una instancia, dado <i>b<sub>j</sub></i>; esto se logra incrementando los contadores <i>c<sub>j&#45;q</sub></i> para todo <i>q</i> &isin; <i>&#945;(b<sub>j</sub>)</i>.</font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2"><b>Generalizaci&oacute;n a casos de inserci&oacute;n y supresi&oacute;n de s&iacute;mbolos</b></font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Consideremos ahora el caso de la b&uacute;squeda aproximada donde las instancias de inter&eacute;s pueden presentar hasta <i>k</i> inserciones o supresiones con respecto a la cadena patr&oacute;n. En este caso, al analizar el s&iacute;mbolo <i>b<font face="verdana" size="2"><font face="verdana" size="2"><sub><sub>j</sub></sub></font></font></i> durante el recorrido del texto, no solo podr&iacute;a iniciar una instancia en cada posici&oacute;n <i>j &minus; q, q</i> &isin; <i>&#945;(b<sub>j</sub>)</i>, sino en cualquier posici&oacute;n entre (<i>j &minus; q &minus; k</i>) y (<i>j &minus; q + k</i>), debido a que las inserciones y supresiones podr&iacute;an modificar la posici&oacute;n relativa de los s&iacute;mbolos en una instancia hasta en k unidades. Por lo tanto, nuestra primer propuesta consiste en modificar el algoritmo de Baeza&#45;Yates y Perleberg de manera que, durante el recorrido del texto, para cada <i>b<sub>j</sub></i> se incrementen los contadores <i>c<sub>{j&minus;q+r}</sub></i></font> <font face="verdana" size="2">para todo <i>q </i>&isin; <i>&#945;(b<sub>j</sub>)</i> y<i> r</i> = <i>&minus;k, ..., k.</i></font></font></font></p>      <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Una vez terminado el recorrido, el valor de cada <i>c<sub>j</sub></i> es el censo de todos los s&iacute;mbolos que podr&iacute;an pertenecer a alguna instancia aproximada de la cadena patr&oacute;n, con un m&aacute;ximo de <i>k</i> inserciones &oacute;</font> <font face="verdana" size="2">supresiones, que inicie en la posici&oacute;n <i>j</i> del texto. Nuevamente, las instancias de inter&eacute;s ser&aacute;n aquellas subcadenas del texto que inician en las posiciones <i>j</i> tales que <i>c<sub>j</sub></i> &ge; <i>U</i>, para un cierto umbral <i>U</i>. Desafortunadamente, <i>c<sub>j</sub></i> ya no est&aacute; relacionado directamente con la distancias de Hamming o Levenshtein, por lo cual no es del todo claro cu&aacute;l debe ser el umbral &oacute;ptimo para un valor dado de <i>k</i>.</font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2"><b>Reducci&oacute;n de falsos positivos</b></font></font></font></p>      <p align="justify"><font face="verdana" size="2">Al igual que muchos algoritmos de b&uacute;squeda aproximada de cadenas, el algoritmo propuesto reporta un gran n&uacute;mero de falsos positivos; sin embargo, la mayor parte de &eacute;stos corresponden a secuencias de posiciones adyacentes, alrededor de la ubicaci&oacute;n de un verdadero positivo. Por ejemplo, consideremos una instancia que inicia en la posici&oacute;n <i>j</i>, digamos <i>b<sub>j</sub>... b<sub>{j+r}</sub></i> , y supongamos que la distancia de Levenshtein entre esta instancia y el patr&oacute;n es <i>d </i>&lt; <i>k</i>. Entonces, la posici&oacute;n <i>j</i> &minus; 1 ser&aacute; tambi&eacute;n reportada como un positivo, ya que la subcadena <i>b<sub>{j&minus;1}</sub> ...b<sub>{j+r}</sub></i> solo requiere de una inserci&oacute;n m&aacute;s para ser id&eacute;ntica a <i>b</i><sub>j</sub>... <i> b<sub>{j+r}</sub></i>, por lo que la distancia entre esta segunda instancia y el patr&oacute;n ser&aacute; <i>d</i> +1 &le; <i>k</i>. De manera similar, es posible que un algoritmo reporte positivos en posiciones <i>j</i> &minus; 2, <i>j</i> &minus; 3, ..., as&iacute; como en<i> j</i> +1, <i>j</i> + 2, etc.</font></p>      <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Con el objetivo de eliminar el n&uacute;mero de positivos adyacentes, proponemos, a manera de post&#45;procesamiento,</font> <font face="verdana" size="2">conservar &uacute;nicamente aquellos positivos <i>j</i> tales que <i>c<sub>j</sub></i> &ge; <i>U</i> y <i>c<sub>{j&minus;1}</sub></i></font><font face="verdana" size="2">&lt;<i> U</i>; es decir, si se detectan m&uacute;ltiples positivos consecutivos, solamente se conservar&aacute; el primero de ellos. Una desventaja de hacer esto es que posiblemente los positivos que se conserven no corresponden exactamente al verdadero inicio de las instancias, pero sabemos que los verdaderos inicios estar&aacute;n cuando mucho <i>k</i> posiciones delante de los positivos obtenidos. En la mayor&iacute;a de las aplicaciones, ubicar las verdaderas instancias a partir de los positivos que resulten del post&#45;proceso es una tarea sencilla, incluso si se realiza de manera visual, y mucho menos tediosa que descartar los cientos o miles de falsos positivos que se obtienen sin la reducci&oacute;n propuesta.</font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2"><b>Mejorando la localizaci&oacute;n</b></font></font></font></p>      ]]></body>
<body><![CDATA[<p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">El post&#45;proceso propuesto en la secci&oacute;n anterior reduce en gran medida el n&uacute;mero de falsos positivos sin afectar seriamente la sensibilidad del algoritmo. Sin embargo, los positivos reportados pueden estar alejados hasta <i>k</i> posiciones con respecto a los verdaderos positivos correspondientes. Una manera simple de mejorar la localizaci&oacute;n de los positivos consiste en modificar la etapa de post&#45;procesamiento de manera que para cada secuencia de positivos consecutivos, se elija aqu&eacute;l que corresponde al m&aacute;ximo valor de censo, en lugar de simplemente elegir el primer positivo de la secuencia. Esta modificaci&oacute;n se propone a manera de regla pr&aacute;ctica, mas es necesario realizar un mayor n&uacute;mero de pruebas para determinar si es adecuado aplicarla de manera general.</font></font></font></p>  	    <p>&nbsp;</p>  	    <p align="justify"><font face="verdana" size="2"><b>RESULTADOS Y DISCUSI&Oacute;N</b></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Para evaluar el algoritmo propuesto, se ha desarrollado una implementaci&oacute;n eficiente de &eacute;ste en lenguaje C. Como punto de comparaci&oacute;n, se cuenta tambi&eacute;n con una implementaci&oacute;n eficiente en C de un algoritmo para la b&uacute;squeda aproximada de cadenas basada en el m&eacute;todo de correlaci&oacute;n de fase, el cual fue recientemente publicado&#91;13&#93; y se basa tambi&eacute;n en un criterio distinto a las distancias de Hamming</font></font></font> <font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">o Levenshtein para comparar dos cadenas. Para que la comparaci&oacute;n sea justa, ninguno de los algoritmos se ha paralelizado, y todas las pruebas se ejecutan (de manera secuencial, en un solo n&uacute;cleo del CPU) en la misma computadora, basada en un procesador Intel Core2Duo a 2.4 Ghz con 4 Gb en RAM. El algoritmo basado en correlaci&oacute;n de fase hace uso de la librer&iacute;a FFTW&#91;14&#93; para el c&aacute;lculo eficiente de la FFT.</font></font></font></p>     <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2"><b>Pruebas con cadenas aleatorias</b></font></font></font></p>      <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">La primer prueba consiste en una serie de 100 casos sint&eacute;ticos donde tanto la cadena patr&oacute;n como la cadena de b&uacute;squeda se han generado aleatoriamente, a partir de un alfabeto de 26 s&iacute;mbolos. La longitud de la cadena patr&oacute;n es <i>m</i> = 32, mientras que la cadena de</font> <font face="verdana" size="2">b&uacute;squeda contiene <i>n</i> =2<sup>20</sup> s&iacute;mbolos (1 Mbyte). La cadena de b&uacute;squeda contiene <i>N</i> = 256 instancias aproximadas (no traslapadas) de la cadena patr&oacute;n, cada una de las cuales se obtiene aplicando un m&aacute;ximo de <i>k</i> operaciones de edici&oacute;n (inserciones, supresiones y substituciones) al patr&oacute;n. Para cada caso de prueba se conocen las posiciones de inicio <i>I<sub>r</sub>,r</i> =1, ..., <i>N </i>de cada una de las verdaderas instancias presentes en la cadena de b&uacute;squeda.</font></font></font></p>  	    <p align="justify"><font face="verdana" size="2">Luego, se introduce cada caso de prueba como entrada del algoritmo de b&uacute;squeda, el cual devuelve como resultado una lista <i>&Icirc;<sub>s</sub>,s</i> = 1, ..., <i>P</i> de las <i>P</i> posiciones donde se estima que existe una instancia (resultados positivos). Recordemos que la posici&oacute;n reportada por el algoritmo, en caso de corresponder a un verdadero positivo, puede diferir hasta en <i>k</i> posiciones de la verdadera posici&oacute;n. Por lo tanto, para evaluar los resultados se establece una funci&oacute;n parcial &fnof; : {1, ..., <i>P</i>} &rarr; {1, ..., <i>N</i>} donde &fnof;(<i>s</i>)= <i>r</i> si |<i>&Icirc;<sub>s</sub></i> &minus; <i>I<sub>r</sub></i>|&le; <i>k</i> y &fnof;(<i>s</i>') &#8800; <i>r</i> para todo <i>s</i>' &lt; <i>s</i>; de otra manera, &fnof;(<i>s</i>) = 0. En otras palabras, si <i>&Icirc;<sub>s</sub></i> corresponde a un verdadero positivo, digamos <i>I<sub>r</sub></i>, entonces no ser&aacute; posible asociar ning&uacute;n otro positivo <i>&Icirc;<sub>t</sub></i>, <i>t</i> &ne; <i>s</i> con <i>I<sub>r</sub></i> a&uacute;n cuando ambos sean suficientemente cercanos. De esta forma, evitamos que durante la evaluaci&oacute;n se reporte un n&uacute;mero de verdaderos positivos mayor que <i>N</i>. A partir de lo anterior, podemos definir el n&uacute;mero de verdaderos positivos (TP), falsos positivos (FP), y falsos negativos (FN) como sigue:</font></p>      <p align="center"><font face="verdana" size="2"><font face="verdana" size="2"><img src="/img/revistas/rmib/v33n2/a5fo1.jpg"></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">donde <i>&#948;(x)</i> es 1 si <i>x</i> = 0, y 0 en cualquier otro caso (funci&oacute;n delta de Kronecker).</font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">En una primer instancia se comparan los resultados del algoritmo propuesto antes y despu&eacute;s de aplicar la etapa de post<font face="verdana" size="2"><font face="verdana" size="2">&#45;</font></font>procesamiento (PP) para reducir los falsos positivos. El post&#45;proceso considera la regla pr<font face="verdana" size="2"><font face="verdana" size="2">&aacute;</font></font>ctica descrita anteriormente para mejorar la localizaci<font face="verdana" size="2"><font face="verdana" size="2">&oacute;</font></font>n de los positivos; sin embargo, esto no afecta de ninguna manera el conteo de verdaderos y falsos positivos obtenidos.</font></font></font></p>      ]]></body>
<body><![CDATA[<p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Los resultados de las pruebas sint&eacute;ticas se muestran en la <a href="/img/revistas/rmib/v33n2/a5f1.jpg" target="_blank">Figura 1</a>, para valores de <i>k</i> = 3, 6, 10 y distintos valores para el umbral <i>U</i>. La columna izquierda muestra las graficas de TP en funci<font face="verdana" size="2"><font face="verdana" size="2">&oacute;</font></font>n del umbral obtenidas en cada caso. Es importante notar que solamente se distingue una grafica, debido a que los valores de TP son pr<font face="verdana" size="2"><font face="verdana" size="2">&aacute;</font></font>cticamente iguales con y sin etapa de post&#45;procesamiento; en otras palabras, el post<font face="verdana" size="2"><font face="verdana" size="2">&#45;</font></font>procesamiento no parece afectar la sensibilidad del algoritmo.</font></font></font></p>      <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Aqu&iacute; se muestra tambi&eacute;n el umbral &oacute;ptimo <i>U<sub>opt</sub></i>, el cual definimos como el mayor umbral para el cual el n&uacute;mero promedio de falsos negativos es menor a uno. En todas las gr&aacute;ficas se muestra con una l&iacute;nea gruesa el valor promedio (estimado sobre los 100 casos de prueba), y con l&iacute;neas delgadas el valor del promedio m<font face="verdana" size="2"><font face="verdana" size="2">&aacute;</font></font>s/menos una desviaci&oacute;n est&aacute;ndar.</font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">La segunda columna de la <a href="/img/revistas/rmib/v33n2/a5f1.jpg" target="_blank">Figura 1</a> muestra las gr&aacute;ficas de FP en funci&oacute;n del umbral. Aqu&iacute; se aprecia claramente la ventaja de utilizar el post<font face="verdana" size="2"><font face="verdana" size="2">&#45;</font></font>proceso para reducir de manera significativa el n&uacute;mero de falsos positivos.</font></font></font></p>      <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">En la tercera columna de la <a href="/img/revistas/rmib/v33n2/a5f1.jpg" target="_blank">Figura 1</a> se muestran las curvas ROC (tasa de TP contra tasa de FP, obtenidas al variar el umbral) para cada caso. Aqu&iacute; hemos decidido incluir los resultados obtenidos con el algoritmo basado en correlaci&oacute;n de fase, como punto de comparaci&oacute;n. Un algoritmo de detecci&oacute;n o clasificaci&oacute;n se considera mejor que otro si el &aacute;rea bajo su curva ROC es mayor. Por lo tanto, las gr&aacute;ficas sugieren que el algoritmo propuesto, con un umbral adecuado, puede tener una mayor sensibilidad y especificidad que el m&eacute;todo de correlaci&oacute;n de fase, en particular cuando se aplica la etapa de post<font face="verdana" size="2"><font face="verdana" size="2">&#45;</font></font>procesamiento. Cabe mencionar que, aunque el post&#45;procesamiento propuesto puede aplicarse tambi&eacute;n a los resultados obtenidos por el m&eacute;todo de correlaci&oacute;n de fase, en las pruebas realizadas no se apreciaron beneficios significativos debido a que los positivos reportados por este m&eacute;todo no suelen ser consecutivos.</font></font></font></p>      <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Finalmente, la <a href="/img/revistas/rmib/v33n2/a5t1.jpg" target="_blank">Tabla 1</a> muestra los resultados num&eacute;ricos (promedios y desviaciones est&aacute;ndar) de las pruebas realizadas obtenidos con el umbral &oacute;</font><font face="verdana" size="2">ptimo encontrado para <i>k</i> =3, 6, 10, incluyendo el tiempo de c&oacute;mputo promedio para cada caso de prueba. Claramente, el tiempo requerido por el post&#45;procesamiento es casi despreciable con respecto al tiempo total de c&oacute;mputo, pero el n&uacute;mero de FP es significativamente menor, en algunos casos hasta por un orden de magnitud. Por otra parte, si bien el costo computacional del m&eacute;todo propuesto se incrementa ligeramente (de manera sub&#45;lineal) con respecto a k, a&uacute;n as&iacute; es considerablemente m&aacute;s eficiente que el m&eacute;todo basado en correlaci&oacute;n de fase.</font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2"><b>Comparaci&oacute;n con el m&eacute;todo shift&#45;or</b></font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Uno de los m&eacute;todos m<font face="verdana" size="2"><font face="verdana" size="2">&aacute;</font></font>s populares para la b&uacute;squeda aproximada de cadenas es el m&eacute;todo shift&#45;or, originalmente propuesto por Baeza&#45;Yates y Gonnet&#91;15&#93;. El m&eacute;todo se basa en calcular y actualizar un conjunto de m&aacute;scaras binarias que indican cu&aacute;les prefijos de la cadena patr&oacute;n coinciden con una cierta subcadena del texto de b&uacute;squeda. La mayor parte de los c&aacute;lculos realizados por el algoritmo pueden representarse mediante operaciones binarias tales como corrimientos y disyunci&oacute;n (de ah&iacute; el nombre "shift&#45;or"), lo cual permite implementaciones extremadamente eficientes. Posiblemente la implementaci&oacute;n m<font face="verdana" size="2"><font face="verdana" size="2">&aacute;</font></font>s conocida reside en el programa agrep escrito por Wu y Manber&#91;16&#93;. Este programa busca, de manera aproximada, una cadena patr&oacute;n dentro de uno o m&aacute;s archivos que contienen registros, donde un registro es t&iacute;picamente una l&iacute;nea de texto. El programa reporta aquellos registros donde se encuentre por lo menos una instancia aproximada del patr&oacute;n, aunque no reporta la posici&oacute;n exacta de las instancias.</font></font></font></p>      <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Para comparar el m&eacute;todo propuesto con el m&eacute;todo shift&#45;or, hemos implementado un programa similar a agrep, pero basado en el m&eacute;todo propuesto de consenso. De manera similar a la prueba anterior, hemos generado series de 100 casos de prueba, cada uno de los cuales consiste en una cadena patr&oacute;n de longitud <i>m</i> = 30 generada de manera aleatoria a partir de un alfabeto de 26 s&iacute;mbolos, y un archivo de registros donde exactamente 1,024 de los registros contienen instancias aproximadas del patr&oacute;n. El n&uacute;mero total de registros en cada archivo var&iacute;a ligeramente pero es en promedio 16,384. En una primer instancia se generaron series (de 100 casos cada una) para valores de <i>k</i> =0, 1, ..., 8, donde <i>k</i> representa tanto el n&uacute;mero de operaciones de edici&oacute;n aplicadas a cada instancia de la cadena patr&oacute;n, como el par&aacute;metro de distancia m&aacute;xima utilizado en ambos algoritmos (algoritmo propuesto y agrep). Finalmente, para el algoritmo propuesto se ha establecido de manera emp&iacute;rica un umbral <i>U</i> = (<i>k</i> + 1)(<i>m + k</i>), considerando que existe un m&aacute;ximo de <i>m + k</i> s&iacute;mbolos en una instancia del patr&oacute;n, cada uno de los cuales incrementa un n&uacute;mero de contadores proporcional a <i>k</i>, y que cuando <i>k</i> = 0 (es decir, en una b&uacute;squeda exacta) se requiere tener <i>U = m</i>.</font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Para estas pruebas, el n&uacute;mero de verdaderos positivos (TP) es el n&uacute;mero de registros reportados por cada uno de los programas que corresponden a registros donde se ubicaron las instancias verdaderas, mientras que un falso positivo (FP) se cuenta como un registro reportado por los programas que no contiene una instancia verdadera, salvo por azar (aunque dada la longitud del patr&oacute;n y el tama&ntilde;o del alfabeto, la probabilidad de generar una instancia por azar es insignificante).</font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Los resultados se presentan en las gr&aacute;ficas superiores de la <a href="/img/revistas/rmib/v33n2/a5f2.jpg" target="_blank">Figura 2</a>. Nuevamente se utiliza una l&iacute;nea gruesa para indicar el promedio de TP (gr&aacute;fica superior izquierda) o promedio de FP (gr&aacute;fica superior derecha), y l&iacute;neas delgadas para representar una desviaci&oacute;n est&aacute;ndard con respecto a la media. Se puede observar que ambos algoritmos mantienen una sensibilidad promedio muy cercana al 100% (TP=1024), aunque el algoritmo propuesto es ligeramente menos sensible. Por otra parte, mientras agrep no reporta falsos positivos en ning&uacute;n caso, el algoritmo propuesto reporta un n&uacute;mero creciente de FPs conforme aumenta el error m&aacute;ximo permitido <i>k</i>. Creemos que esto se debe a que agrep se adapta bien a los datos, debido a que ambos est&aacute;n basados en la distancia de edici&oacute;n; sin embargo, el algoritmo propuesto utiliza una m&eacute;trica diferente para estimar la similaridad entre cadenas.</font></font></font></p>  	    ]]></body>
<body><![CDATA[<p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">En un segundo experimento, se repiti&oacute; la prueba anterior pero ahora fijando el n&uacute;mero m&aacute;ximo de ediciones aplicadas a las instancias en 8, y variando <font face="verdana" size="2"><font face="verdana" size="2">&uacute;</font></font>nicamente el par</font><font face="verdana" size="2">&aacute;metro <i>k</i> utilizando en ambos programas, de manera que con valores de <i>k</i> menores a 8, los algoritmos encontrar&aacute;n solamente una fracci&oacute;n de las verdaderas instancias. Los resultados de este experimento se muestran en las gr&aacute;ficas inferiores de la <a href="/img/revistas/rmib/v33n2/a5f2.jpg" target="_blank">Figura 2</a>. Claramente se puede observar que el algoritmo propuesto muestra una sensibilidad considerablemente mayor al m&eacute;todo shift&#45;or en el caso donde uno no conoce a priori el valor de k que debe utilizarse. Nuevamente esto refleja el hecho de que la m&eacute;tricas utilizadas por el algoritmo propuesto, y el papel de k dentro de esas m&eacute;tricas, son muy distintos a la distancia de Levenshtein, pero igualmente &uacute;</font><font face="verdana" size="2">tiles para la b&uacute;squeda aproximada de patrones.</font></font></font></p>      <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Aunque el programa basado en el m&eacute;todo propuesto no ha sido optimizado a fondo, pudimos observar tiempos de c&oacute;mputo muy competitivos, donde el tiempo promedio para cada caso de prueba con <i>k</i> = 8 fue de 80 ms con el algoritmo propuesto y 57 ms con agrep; sin embargo, estos tiempos corresponden a la ejecuci&oacute;n total de cada uno de los programas, incluyendo la carga de los archivos y la impresi&oacute;n de resultados.</font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2"><b>Aplicaci&oacute;n a la b&uacute;squeda de patrones en secuencias de prote&iacute;nas reales</b></font></font></font></p>      <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Para evaluar la eficiencia del algoritmo propuesto en casos reales, se realizaron b&uacute;squedas dentro de seis secuencias de prote&iacute;nas de las plantas <em>Opuntia streptacantha </em>(nopal), <em>Arabidopsis thaliana </em>y <em>A. lyrata</em> &#91;17,18,19&#93;. Las prote&iacute;nas dehidrinas (DHN) se caracterizan por la presencia de uno o m&aacute;s segmentos&#45;K que consisten en aproximadamente 15 residuos de amino&aacute;cidos &#91;EKKGIM(E/D)KIKEKLPG&#93;, los cuales forman una probable estructura de <i>&#945;</i>&#45;h&eacute;lice amfip&aacute;tica&#91;20,21&#93;. Las prote&iacute;nas DHN pueden tambi&eacute;n contener segmentos&#45;S &#91;LHRSGS4&#45;10(E/D)3&#93; formados por una serie de 4 a 10 residuos de serina, y segmentos&#45;Y &#91;(V/T)D(E/Q)YGNP&#93; que se localizan cerca del extremo amino terminal de estas prote&iacute;nas&#91;20,21&#93;. En general, las prote&iacute;nas DHN comparten baja identidad de secuencia, y la identificaci&oacute;n apropiada de los motivos conservados es una tarea importante para la clasificaci&oacute;n de estas prote&iacute;nas en los sub&#45;tipos: <i>Y<sub>n</sub>SK<sub>2</sub>, K<sub>n</sub>, SK<sub>n</sub>, K<sub>n</sub>S,y Y<sub>2</sub>K<sub>n</sub>.</i></font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">En cada una de las seis secuencias de prote&iacute;nas seleccionadas, se realiz&oacute; una b&uacute;squeda de los siguientes patrones de amino&aacute;cidos: EKKGIMDKIKEKLPG segmento(segmento&#45;K), LHRSGS (segmento&#45;S), y DEYGNP (segmento&#45;Y). Los par&aacute;metros utilizados en todas las secuencias fueron los  siguientes: <i>k </i>= &#91;0.3m&#93; para el segmento&#45;K y segmento&#45;S, donde m es la longitud de la cadena  patr&oacute;n a buscar, y <i>k</i> = 0 para el  Y.  El umbral utilizado en todos los casos fue  <i>U = m</i> + 2(<i>k</i> &minus; 1). Tambi&eacute;n se utiliz&oacute; la versi&oacute;n modificada del post&#45;procesamiento para mejorar la localizaci&oacute;n de los verdaderos positivos. El tiempo total de procesamiento (para un total de 18 b&uacute;squedas) fue menor a 2 ms (al algoritmo basado en la POC le toma 30 ms hacer la misma b&uacute;squeda). Los resultados se muestran en la <a href="/img/revistas/rmib/v33n2/a5f2.jpg" target="_blank">Figura 2</a>: cada uno de los patrones se representan con un color distinto, seg&uacute;n la leyenda, y las posiciones marcadas por el algoritmo como positivos se muestran mediante el subrayado del s&iacute;mbolo correspondiente. Todas, excepto una de las verdaderas instancias fueron localizadas con un error m&aacute;ximo de localizaci&oacute;n de k posiciones (donde <i>k</i> = 5 para el segmento&#45;K, <i>k</i> = 2 para el segmento&#45;S,y <i>k</i> = 0 para el segmento&#45;Y). El algoritmo report&oacute; tambi&eacute;n cinco falsos positivos durante la b&uacute;squeda del segmento&#45;K, posiblemente debido al alto nivel de tolerancia impuesto por fijar <i>k</i> = 5; a&uacute;n as&iacute;, la mayor parte de estos falsos positivos son descartables mediante simple inspecci&oacute;n visual. Por otra parte, la b&uacute;squeda del segmento&#45;S gener&oacute; tambi&eacute;n un falso positivo en la secuencia At4g39130. El error m<font face="verdana" size="2"><font face="verdana" size="2">&aacute;</font></font>s grave de toda la prueba fue un falso negativo (FN) en la misma secuencia At4g39130, correspondiente a un segmento&#45;Y que no fue reportado por el algoritmo (marcado en la <a href="/img/revistas/rmib/v33n2/a5f3.jpg" target="_blank">Figura 3</a> dentro de un recuadro); esta instancia es dif&iacute;cil de detectar ya que tiene 3 diferencias con respecto al patr&oacute;n, el cual tiene una longitud de 6 s&iacute;mbolos, dando como resultado un &iacute;ndice de similaridad relativamente bajo.</font></font></font></p>      <p>&nbsp;</p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2"><b>CONCLUSIONES</b></font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">En este trabajo se ha presentado un nuevo m&eacute;todo para la b&uacute;squeda aproximada de cadenas basado en dos ideas novedosas: la primera consiste en una generalizaci&oacute;n del algoritmo de Baeza&#45;Yates y Perleberg para calcular la distancia de Hamming, a los casos donde se desean considerar tambi&eacute;n las inserciones o supresiones de s&iacute;mbolos, lo cual resulta en una b&uacute;squeda extremadamente eficiente. La segunda contribuci&oacute;n consiste en una etapa de post&#45;procesamiento para reducir de manera significativa el n&uacute;mero de falsos positivos reportados por el algoritmo.</font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Las pruebas sint&eacute;ticas realizadas para evaluar el m&eacute;todo propuesto muestran un amplio margen de ventaja, en t&eacute;rminos de especificidad y tiempo de c&oacute;mputo, con respecto al m&eacute;todo basado en correlaci&oacute;n de fase. Comparando contra un algoritmo ubicuo como agrep de Wu y Manber, el m&eacute;todo propuesto muestra un buen desempe&ntilde;o en t&eacute;rminos de sensibilidad y tiempo de c&oacute;mputo cuando el error m&aacute;ximo permitido no es demasiado grande; sin embargo, cuando este par&aacute;metro se desconoce, el m&eacute;todo propuesto puede tener una mejor sensibilidad a las instancias de inter&eacute;s. Por otra parte, a diferencia de la mayor&iacute;a de las implementaciones basadas en el m&eacute;todo shift&#45;or, el algoritmo propuesto no impone limitaciones t&eacute;cnicas a la longitud de la cadena patr&oacute;n.</font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Una desventaja del algoritmo propuesto radica en que al aplicarlo a secuencias donde el alfabeto es reducido, el n&uacute;mero de falsos positivos aumenta considerablemente. Esto limita la aplicabilidad del algoritmo en su estado actual a secuencias de ADN donde el alfabeto consta solamente de 4 s&iacute;mbolos. En el futuro, se investigar&aacute; la manera de mejorar la especificidad para alfabetos peque&ntilde;os, por ejemplo, mediante una recodificaci&oacute;n de las cadenas en un alfabeto de mayor tama&ntilde;o.</font></font></font></p>  	    ]]></body>
<body><![CDATA[<p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Finalmente, las pruebas realizadas con secuencias de prote&iacute;nas reales sugieren que a&uacute;n es necesario mejorar la etapa de post&#45;procesamiento para eliminar falsos positivos que son demasiado cercanos entre s&iacute;.</font></font></font></p>  	    <p>&nbsp;</p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2"><b>AGRADECIMIENTOS</b></font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">Para el desarrollo de este trabajo se ha contado con el apoyo del Consejo Nacional de Ciencia y Tecnolog&iacute;a (CONACyT) mediante el proyecto de Ciencia B&aacute;sica #154623.</font></font></font></p>  	    <p>&nbsp;</p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2"><b>REFERENCIAS</b></font></font></font></p>  	    <!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">1.&nbsp;Smith TF, Waterman MS. "Identification of common molecular subsequences". Journal of Molecular Biology, 1981; 147:</font><font face="verdana" size="2">195&#45;197.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509555&pid=S0188-9532201200020000500001&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>  	    <!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">2.&nbsp;Altschul SF, Gish W, Miller W, Myers EW, </font><font face="verdana" size="2">Lipman DJ. "Basic local alignment search tool". Journal of Molecular Biology, 1990;</font> <font face="verdana" size="2">215: 403&#45;410.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509557&pid=S0188-9532201200020000500002&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>  	    ]]></body>
<body><![CDATA[<!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">3.&nbsp;Hamming RW. "Error detecting and error correcting codes". Bell System Technical</font> <font face="verdana" size="2">Journal, 1950; 29(2): 147&#45;160.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509559&pid=S0188-9532201200020000500003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>  	    <!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">4.&nbsp;Levenshtein VI. "Binary codes capable of correcting deletions, insertions, and reversals". Soviet Physics Doklady, 1966;</font> <font face="verdana" size="2">10: 707&#45;710.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509561&pid=S0188-9532201200020000500004&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>  	    <!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">5.&nbsp;Howie JM. Automata and Languages. Oxford University Press, 1991.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509563&pid=S0188-9532201200020000500005&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>  	    <!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">6.&nbsp;Ukkonen E. "Algorithms for approximate string matching". Inf. Control, 1985; 64(1&#45;</font><font face="verdana" size="2">3): 100&#45;118.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509565&pid=S0188-9532201200020000500006&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>  	    <!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">7.&nbsp;Jokinen P, Tarhio J, Ukkonen E. "A comparison of approximate string matching algorithms". Softw. Pract.</font> <font face="verdana" size="2">Exper., 1996; 26(12): 1439&#45;1458.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509567&pid=S0188-9532201200020000500007&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>  	    ]]></body>
<body><![CDATA[<!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">8.&nbsp;Navarro G. "A guided tour to approximate string matching". ACM Computing</font> <font face="verdana" size="2">Surveys, 2001; 33(1): 31&#45;88.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509569&pid=S0188-9532201200020000500008&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>  	    <!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">9.&nbsp;Navarro G, Baeza&#45;Yates RA, Sutinen E, Tarhio J. "Indexing methods for approximate string matching". IEEE Data</font> <font face="verdana" size="2">Engineering Bulletin, 2001; 24(4): 19&#45;27.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509571&pid=S0188-9532201200020000500009&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>  	    <!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">10.&nbsp;Boytsov L. "Indexing methods for approximate dictionary searching: Comparative analysis". J. Exp.</font> <font face="verdana" size="2">Algorithmics, 2011; 16: 1.1:1.1&#45;1.1:1.91.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509573&pid=S0188-9532201200020000500010&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>  	    <!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">11.&nbsp;Buhler J. "Efficient large&#45;scale sequence comparison by locality sensitive hashing".</font> <font face="verdana" size="2">Bioinformatics, 2001; 17(5): 419&#45;428.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509575&pid=S0188-9532201200020000500011&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>  	    <!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">12.&nbsp;Baeza&#45;Yates RA, Perleberg CH. "Fast and practical approximate string matching".</font> <font face="verdana" size="2">Inf. Process. Lett., 1996; 59(1): 21&#45;27.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509577&pid=S0188-9532201200020000500012&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>  	    ]]></body>
<body><![CDATA[<!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">13.&nbsp;Alba A, Rodriguez&#45;Kessler M, Arce&#45;Santana ER, Mendez MO. "Approximate string matching using phase correlation". Proceedings of the 34th Annual International Conference of the IEEE</font> <font face="verdana" size="2">EMBS, 2012; pp. 6309&#45;6312.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509579&pid=S0188-9532201200020000500013&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>  	    <!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">14.&nbsp;Frigo M, Johnson SG. "The Design and</font> <font face="verdana" size="2">Implementation of FFTW3". Proc. IEEE, 2005; 93(2): 216&#45;231.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509581&pid=S0188-9532201200020000500014&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>  	    <!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">15.&nbsp;Baeza&#45;Yates RA, Gonnet GH. "A new approach to text searching". Proceedings</font> <font face="verdana" size="2">of the 12th Annual ACM&#45;SIGIR</font> <font face="verdana" size="2">Conference on Information Retrieval, 1989;</font> <font face="verdana" size="2">pp. 168&#45;175.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509583&pid=S0188-9532201200020000500015&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>  	    <!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">16.&nbsp;Wu S, Manber U. "Fast Text Searching</font> <font face="verdana" size="2">With Errors". Technical Report TR 91&#45;11, Department of Computer Science, University of Arizona, 1991.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509585&pid=S0188-9532201200020000500016&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>  	    <!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">17.&nbsp;Ochoa&#45;Alfaro A, Rodr&iacute;guez&#45;Kessler M, P&eacute;rez&#45;Morales M, Delgado&#45;S<font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">&aacute;</font></font></font></font>nchez P, Cuevas&#45;Velazquez C, G&oacute;mez&#45;Anduro G, Jim&eacute;nez&#45;Bremont J. "Functional characterization of an acidic SK3 dehydrin isolated from an Opuntia streptacantha</font> <font face="verdana" size="2">cDNA library". Planta, 2012; 235: 565&#45;578.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509587&pid=S0188-9532201200020000500017&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>  	    ]]></body>
<body><![CDATA[<!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">18.&nbsp;Hundertmark M, Hincha DK. "LEA</font> <font face="verdana" size="2">(late embryogenesis abundant) proteins and their encoding genes in Arabidopsis</font> <font face="verdana" size="2">thaliana". BMC Genomics, 2008; 9: 118.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509589&pid=S0188-9532201200020000500018&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>  	    <p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">19.&nbsp;Jim&eacute;nez&#45;Bremont JF, Maruri&#45;L&oacute;pez I, Ochoa&#45;Alfaro A, Delgado&#45;S<font face="verdana" size="2"><font face="verdana" size="2">&aacute;</font></font>nchez P, Bravo J, Rodr&iacute;guez&#45;Kessler M. "LEA gene introns: is the intron of dehydrin genes a characteristic of the serine&#45;segment?". Plant Mol Biol Rep. (DOI:</font><font face="verdana" size="2">10.1007/s11105&#45;012&#45;0483&#45;x). In press.</font></font></font></p>      <!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">20.&nbsp;Allagulova CR, Gimalov FR, Shakirova</font> <font face="verdana" size="2">FM, Vakhitov VA. "The plant dehydrins:</font> <font face="verdana" size="2">structure and putative functions".</font> <font face="verdana" size="2">Biochemistry (Moscow), 2003; 68: 945&#45;951.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509592&pid=S0188-9532201200020000500019&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>  	    <!-- ref --><p align="justify"><font face="verdana" size="2"><font face="verdana" size="2"><font face="verdana" size="2">21.&nbsp;Kosov<font face="verdana" size="2"><font face="verdana" size="2">&aacute;</font></font> K, Pr<font face="verdana" size="2"><font face="verdana" size="2">&aacute;</font></font>sil IT, V&iacute;t<font face="verdana" size="2"><font face="verdana" size="2">&aacute;</font></font>mv<font face="verdana" size="2"><font face="verdana" size="2">&aacute;</font></font>s P. "Role</font> <font face="verdana" size="2">of dehydrins in plant stress response" En: Pessarakli M, editor, Handbook of Plant and Crop Stress, 3rd ed., CRC Press</font> <font face="verdana" size="2">(Florida), 2010: 239&#45;285.    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=8509594&pid=S0188-9532201200020000500020&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --></font></font></font></p>      ]]></body><back>
<ref-list>
<ref id="B1">
<label>1</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Smith]]></surname>
<given-names><![CDATA[TF]]></given-names>
</name>
<name>
<surname><![CDATA[Waterman]]></surname>
<given-names><![CDATA[MS]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Identification of common molecular subsequences]]></article-title>
<source><![CDATA[Journal of Molecular Biology]]></source>
<year>1981</year>
<volume>147</volume>
<page-range>195-197</page-range></nlm-citation>
</ref>
<ref id="B2">
<label>2</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Altschul]]></surname>
<given-names><![CDATA[SF]]></given-names>
</name>
<name>
<surname><![CDATA[Gish]]></surname>
<given-names><![CDATA[W]]></given-names>
</name>
<name>
<surname><![CDATA[Miller]]></surname>
<given-names><![CDATA[W]]></given-names>
</name>
<name>
<surname><![CDATA[Myers]]></surname>
<given-names><![CDATA[EW]]></given-names>
</name>
<name>
<surname><![CDATA[Lipman]]></surname>
<given-names><![CDATA[DJ]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Basic local alignment search tool]]></article-title>
<source><![CDATA[Journal of Molecular Biology]]></source>
<year>1990</year>
<volume>215</volume>
<page-range>403-410</page-range></nlm-citation>
</ref>
<ref id="B3">
<label>3</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Hamming]]></surname>
<given-names><![CDATA[RW]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Error detecting and error correcting codes]]></article-title>
<source><![CDATA[Bell System Technical Journal]]></source>
<year>1950</year>
<volume>29</volume>
<numero>2</numero>
<issue>2</issue>
<page-range>147-160</page-range></nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Levenshtein]]></surname>
<given-names><![CDATA[VI]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Binary codes capable of correcting deletions, insertions, and reversals]]></article-title>
<source><![CDATA[Soviet Physics Doklady]]></source>
<year>1966</year>
<volume>10</volume>
<page-range>707-710</page-range></nlm-citation>
</ref>
<ref id="B5">
<label>5</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Howie]]></surname>
<given-names><![CDATA[JM]]></given-names>
</name>
</person-group>
<source><![CDATA[Automata and Languages]]></source>
<year>1991</year>
<publisher-name><![CDATA[Oxford University Press]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B6">
<label>6</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Ukkonen]]></surname>
<given-names><![CDATA[E.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Algorithms for approximate string matching]]></article-title>
<source><![CDATA[Inf. Control]]></source>
<year>1985</year>
<volume>64</volume>
<numero>1-3</numero>
<issue>1-3</issue>
<page-range>100-118</page-range></nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Jokinen]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
<name>
<surname><![CDATA[Tarhio]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
<name>
<surname><![CDATA[Ukkonen]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A comparison of approximate string matching algorithms]]></article-title>
<source><![CDATA[Softw. Pract. Exper.]]></source>
<year>1996</year>
<volume>26</volume>
<numero>12</numero>
<issue>12</issue>
<page-range>1439-1458</page-range></nlm-citation>
</ref>
<ref id="B8">
<label>8</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Navarro]]></surname>
<given-names><![CDATA[G.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A guided tour to approximate string matching]]></article-title>
<source><![CDATA[ACM Computing Surveys]]></source>
<year>2001</year>
<volume>33</volume>
<numero>1</numero>
<issue>1</issue>
<page-range>31-88</page-range></nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Navarro]]></surname>
<given-names><![CDATA[G]]></given-names>
</name>
<name>
<surname><![CDATA[Baeza-Yates]]></surname>
<given-names><![CDATA[RA]]></given-names>
</name>
<name>
<surname><![CDATA[Sutinen]]></surname>
<given-names><![CDATA[E]]></given-names>
</name>
<name>
<surname><![CDATA[Tarhio]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Indexing methods for approximate string matching]]></article-title>
<source><![CDATA[IEEE Data Engineering Bulletin]]></source>
<year>2001</year>
<volume>24</volume>
<numero>4</numero>
<issue>4</issue>
<page-range>19-27</page-range></nlm-citation>
</ref>
<ref id="B10">
<label>10</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Boytsov]]></surname>
<given-names><![CDATA[L.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Indexing methods for approximate dictionary searching: Comparative analysis]]></article-title>
<source><![CDATA[J. Exp. Algorithmics]]></source>
<year>2011</year>
<volume>16</volume>
</nlm-citation>
</ref>
<ref id="B11">
<label>11</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Buhler]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Efficient large-scale sequence comparison by locality sensitive hashing]]></article-title>
<source><![CDATA[Bioinformatics]]></source>
<year>2001</year>
<volume>17</volume>
<numero>5</numero>
<issue>5</issue>
<page-range>419-428</page-range></nlm-citation>
</ref>
<ref id="B12">
<label>12</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Baeza-Yates]]></surname>
<given-names><![CDATA[RA]]></given-names>
</name>
<name>
<surname><![CDATA[Perleberg]]></surname>
<given-names><![CDATA[CH]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Fast and practical approximate string matching]]></article-title>
<source><![CDATA[Inf. Process. Lett.]]></source>
<year>1996</year>
<volume>59</volume>
<numero>1</numero>
<issue>1</issue>
<page-range>21-27</page-range></nlm-citation>
</ref>
<ref id="B13">
<label>13</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Alba]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Rodriguez-Kessler]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Arce-Santana]]></surname>
<given-names><![CDATA[ER]]></given-names>
</name>
<name>
<surname><![CDATA[Mendez]]></surname>
<given-names><![CDATA[MO]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Approximate string matching using phase correlation]]></article-title>
<source><![CDATA[Proceedings of the 34th Annual International Conference of the IEEE EMBS]]></source>
<year>2012</year>
<page-range>6309-6312</page-range></nlm-citation>
</ref>
<ref id="B14">
<label>14</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Frigo]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Johnson]]></surname>
<given-names><![CDATA[SG]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[The Design and Implementation of FFTW3]]></article-title>
<source><![CDATA[Proc. IEEE]]></source>
<year>2005</year>
<volume>93</volume>
<numero>2</numero>
<issue>2</issue>
<page-range>216-231</page-range></nlm-citation>
</ref>
<ref id="B15">
<label>15</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Baeza-Yates]]></surname>
<given-names><![CDATA[RA]]></given-names>
</name>
<name>
<surname><![CDATA[Gonnet]]></surname>
<given-names><![CDATA[GH]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A new approach to text searching]]></article-title>
<source><![CDATA[Proceedings of the 12th Annual ACM-SIGIR Conference on Information Retrieval]]></source>
<year>1989</year>
<page-range>168-175</page-range></nlm-citation>
</ref>
<ref id="B16">
<label>16</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Wu]]></surname>
<given-names><![CDATA[S]]></given-names>
</name>
<name>
<surname><![CDATA[Manber]]></surname>
<given-names><![CDATA[U]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Fast Text Searching With Errors]]></article-title>
<source><![CDATA[Technical Report TR 91-11]]></source>
<year>1991</year>
<publisher-name><![CDATA[Department of Computer Science, University of Arizona]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B17">
<label>17</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Ochoa-Alfaro]]></surname>
<given-names><![CDATA[A]]></given-names>
</name>
<name>
<surname><![CDATA[Rodríguez-Kessler]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Pérez-Morales]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Delgado-Sánchez]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
<name>
<surname><![CDATA[Cuevas-Velazquez]]></surname>
<given-names><![CDATA[C]]></given-names>
</name>
<name>
<surname><![CDATA[Gómez-Anduro]]></surname>
<given-names><![CDATA[G]]></given-names>
</name>
<name>
<surname><![CDATA[Jiménez-Bremont]]></surname>
<given-names><![CDATA[J]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Functional characterization of an acidic SK3 dehydrin isolated from an Opuntia streptacantha cDNA library]]></article-title>
<source><![CDATA[Planta]]></source>
<year>2012</year>
<volume>235</volume>
<page-range>565-578</page-range></nlm-citation>
</ref>
<ref id="B18">
<label>18</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Hundertmark]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
<name>
<surname><![CDATA[Hincha]]></surname>
<given-names><![CDATA[DK]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[LEA (late embryogenesis abundant) proteins and their encoding genes in Arabidopsis thaliana]]></article-title>
<source><![CDATA[BMC Genomics]]></source>
<year>2008</year>
<volume>9</volume>
<numero>118</numero>
<issue>118</issue>
</nlm-citation>
</ref>
<ref id="B19">
<label>20</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Allagulova]]></surname>
<given-names><![CDATA[CR]]></given-names>
</name>
<name>
<surname><![CDATA[Gimalov]]></surname>
<given-names><![CDATA[FR]]></given-names>
</name>
<name>
<surname><![CDATA[Shakirova]]></surname>
<given-names><![CDATA[FM]]></given-names>
</name>
<name>
<surname><![CDATA[Vakhitov]]></surname>
<given-names><![CDATA[VA]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[The plant dehydrins: structure and putative functions]]></article-title>
<source><![CDATA[Biochemistry]]></source>
<year>2003</year>
<volume>68</volume>
<page-range>945-951</page-range><publisher-loc><![CDATA[Moscow ]]></publisher-loc>
</nlm-citation>
</ref>
<ref id="B20">
<label>21</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Kosová]]></surname>
<given-names><![CDATA[K]]></given-names>
</name>
<name>
<surname><![CDATA[Prásil]]></surname>
<given-names><![CDATA[IT]]></given-names>
</name>
<name>
<surname><![CDATA[Vítámvás]]></surname>
<given-names><![CDATA[P]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Role of dehydrins in plant stress response]]></article-title>
<person-group person-group-type="editor">
<name>
<surname><![CDATA[Pessarakli]]></surname>
<given-names><![CDATA[M]]></given-names>
</name>
</person-group>
<source><![CDATA[Handbook of Plant and Crop Stress]]></source>
<year>2010</year>
<edition>3</edition>
<page-range>239-285</page-range><publisher-loc><![CDATA[Florida ]]></publisher-loc>
<publisher-name><![CDATA[CRC Press]]></publisher-name>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
