<?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>1692-3324</journal-id>
<journal-title><![CDATA[Revista Ingenierías Universidad de Medellín]]></journal-title>
<abbrev-journal-title><![CDATA[Rev. ing. univ. Medellín]]></abbrev-journal-title>
<issn>1692-3324</issn>
<publisher>
<publisher-name><![CDATA[Universidad de Medellín]]></publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id>S1692-33242010000200016</article-id>
<title-group>
<article-title xml:lang="es"><![CDATA[Análisis de algoritmos para la construcción de arreglo de sufijos en tiempo lineal]]></article-title>
<article-title xml:lang="en"><![CDATA[Algorithms analysis for construction of suffix arrays in linear timel]]></article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Arango Palacio]]></surname>
<given-names><![CDATA[César Alejandro]]></given-names>
</name>
<xref ref-type="aff" rid="A01"/>
</contrib>
<contrib contrib-type="author">
<name>
<surname><![CDATA[Baeza-Yates]]></surname>
<given-names><![CDATA[Ricardo]]></given-names>
</name>
<xref ref-type="aff" rid="A02"/>
</contrib>
</contrib-group>
<aff id="A01">
<institution><![CDATA[,PREBEL S.A.  ]]></institution>
<addr-line><![CDATA[Medellín ]]></addr-line>
<country>Colombia</country>
</aff>
<aff id="A02">
<institution><![CDATA[,EMEA  ]]></institution>
<addr-line><![CDATA[Barcelona ]]></addr-line>
</aff>
<pub-date pub-type="pub">
<day>00</day>
<month>07</month>
<year>2010</year>
</pub-date>
<pub-date pub-type="epub">
<day>00</day>
<month>07</month>
<year>2010</year>
</pub-date>
<volume>9</volume>
<numero>17</numero>
<fpage>185</fpage>
<lpage>193</lpage>
<copyright-statement/>
<copyright-year/>
<self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_arttext&amp;pid=S1692-33242010000200016&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_abstract&amp;pid=S1692-33242010000200016&amp;lng=en&amp;nrm=iso"></self-uri><self-uri xlink:href="http://www.scielo.org.co/scielo.php?script=sci_pdf&amp;pid=S1692-33242010000200016&amp;lng=en&amp;nrm=iso"></self-uri><abstract abstract-type="short" xml:lang="es"><p><![CDATA[El avance en la investigación de los arreglos de sufijos permitió en el año 2003 el planteamiento de tres algoritmos de tiempo lineal para la generación de tales estructuras. Anterior a estos se venía trabajando con algoritmos de orden O(n log n) con probada calidad para la obtención de los arreglos. Desde este punto de partida planteamos la necesidad de conocer experimentalmente el rendimiento de los algoritmos O(n) frente a los de orden O(n log n) y conocer entre los planteados de orden n cual es el mejor en términos de tiempo de ejecución y uso de recursos computacionales. Después de un profundo trabajo de investigación, pruebas y análisis en el laboratorio podemos concluir basados en los resultados experimentales y los criterios de tiempo y recursos que los algoritmos O(n log n) en este caso alcanzan un mejor rendimiento que los O(n).]]></p></abstract>
<abstract abstract-type="short" xml:lang="en"><p><![CDATA[The advance in the investigation about suffix arrays allowed the publication for three new algorithms about the linear time construction in 2003. Before that, it had been working with algorithms in the order O(n log n) which were considered the best in this topic. At this point, it was decided to work on a project for proving which one of the algorithms was better in terms of time and computational resources. Algorithms O(n) vs were compared. O(n log n) and the O(n) vs. O(n) were also compared. Later, after the investigation at the lab, it was discovered that algorithms in the order O(n log n) are better than the others in O(n) based on time and computational resources.]]></p></abstract>
<kwd-group>
<kwd lng="es"><![CDATA[arreglos de sufijos]]></kwd>
<kwd lng="es"><![CDATA[orden de magnitud]]></kwd>
<kwd lng="es"><![CDATA[indexación]]></kwd>
<kwd lng="es"><![CDATA[tiempo lineal]]></kwd>
<kwd lng="es"><![CDATA[algoritmo]]></kwd>
<kwd lng="en"><![CDATA[suffix array]]></kwd>
<kwd lng="en"><![CDATA[orders of growth]]></kwd>
<kwd lng="en"><![CDATA[index]]></kwd>
<kwd lng="en"><![CDATA[linear time]]></kwd>
<kwd lng="en"><![CDATA[algorithm]]></kwd>
</kwd-group>
</article-meta>
</front><body><![CDATA[  	    <p ALIGN="CENTER"><FONT SIZE="4" FACE="Verdana"><B>An&aacute;lisis de algoritmos para la construcci&oacute;n de arreglo de sufijos en tiempo lineal   </B></FONT></p> 	    <p ALIGN="CENTER">&nbsp;</p> 	    <p ALIGN="CENTER"><B><FONT SIZE="3" FACE="Verdana">Algorithms analysis for construction of suffix arrays in linear timel  </FONT></B></p>     <p>&nbsp;</p>     <p>&nbsp;</p>     <p><FONT SIZE="2" FACE="Verdana"> C&eacute;sar Alejandro Arango Palacio<SUP>*</SUP>; Ricardo Baeza-Yates<SUP>**</SUP> </FONT></p>        <p><FONT SIZE="2" FACE="Verdana">*	Ingeniero de Sistemas de la Universidad de Medell&iacute;n, Especialista en Sistemas de Informaci&oacute;n de la Universidad EAFIT. Medell&iacute;n, Colombia. SAP BI Certified. Jefe de Proyectos de Inform&aacute;tica PREBEL S.A. Correo electr&oacute;nico: <a href="mailto:cesar.arango@prebel.com.co.">cesar.arango@prebel.com.co.    <BR>   </a></FONT><FONT SIZE="2" FACE="Verdana">**       VP of Research for EMEA &#38;LatAm.Yahoo! Research Barcelona.Ph.D. in Computer Science. Correo electr&oacute;nico: <a href="mailto:ricardo.baeza@barcelonamedia.org.">ricardo.baeza@barcelonamedia.org.</a>  Web: research.yahoo.com. Personal site: <A HREF="http://www.dcc.uchile.cl/%7Erbaeza/">www.baeza.cl</A>  Barcelona Media InnovationCtre. </FONT></p>        <p>&nbsp;</p>     ]]></body>
<body><![CDATA[<p>&nbsp;</p> <hr size="1" noshade> <font size="2" face="Verdana"><B>Resumen</B></font>       <p><FONT SIZE="2" FACE="Verdana">El avance en la investigaci&oacute;n de los arreglos de sufijos permiti&oacute; en el a&ntilde;o 2003 el planteamiento de tres algoritmos de tiempo lineal para la generaci&oacute;n de tales estructuras. Anterior a estos se ven&iacute;a trabajando con algoritmos de orden O(n log n) con probada calidad para la obtenci&oacute;n de los arreglos. Desde este punto de partida planteamos la necesidad de conocer experimentalmente el rendimiento de los algoritmos O(n) frente a los de orden O(n log n) y conocer entre los planteados de orden <I>n</I> cual es el mejor en t&eacute;rminos de tiempo de ejecuci&oacute;n y uso de recursos computacionales. Despu&eacute;s de un profundo trabajo de investigaci&oacute;n, pruebas y an&aacute;lisis en el laboratorio podemos concluir basados en los resultados experimentales y los criterios de tiempo y recursos que los algoritmos O(n log n) en este caso alcanzan un mejor rendimiento que los O(n). </FONT></p> <FONT SIZE="2" FACE="Verdana">  <B>Palabras clave:</B> arreglos de sufijos, orden de magnitud, indexaci&oacute;n, tiempo lineal, algoritmo.     </FONT>  <hr size="1" noshade><font size="2" face="Verdana"><B>Abstract</B></font>       <p><FONT SIZE="2" FACE="Verdana">The advance in the investigation about suffix arrays allowed the publication for three new algorithms about the linear time construction in 2003. Before that, it had been working with algorithms in the order O(n log n) which were considered the best in this topic. At this point, it was decided to work on a project for proving which one of the algorithms was better in terms of time and computational resources. Algorithms O(n) vs were compared. O(n log n) and the O(n) vs. O(n) were also compared. Later, after the investigation at the lab, it was discovered that algorithms in the order O(n log n) are better than the others in O(n) based on time and computational resources. </FONT></p> <FONT SIZE="2" FACE="Verdana">  <B>Key words:</B> suffix array, orders of growth, index, linear time, algorithm. </FONT>   <hr size="1" noshade>      <p>&nbsp;</p>     <p>&nbsp;</p>     <p><FONT SIZE="3" FACE="Verdana"><B>INTRODUCCI&Oacute;N</B></FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">Durante los &uacute;ltimos a&ntilde;os la teor&iacute;a referente a los arreglos de sufijos ha tenido un gran avance, entre el 2003 y 2004 se presentaron algunos muy significativos, tras la publicaci&oacute;n de diferentes algoritmos para la creaci&oacute;n de arreglos de sufijos en tiempo lineal. Partiendo de esto decidimos realizar un an&aacute;lisis en el laboratorio para determinar cu&aacute;l presenta un mejor rendimiento, en cuanto a tiempo de proceso y a porcentaje de recursos de memoria principal utilizados.</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">Durante los meses de mayo y junio de 2004 se realizaron pruebas computacionales con cinco algoritmos para la construcci&oacute;n de arreglos de sufijos. Tres de ellos usan tiempo lineal O(n) para cumplir el proceso y los otros dos necesitan de O(n log n); estos &uacute;ltimos sirven como punto de referencia para realizar comparaciones tanto en alfabeto de enteros como en el caso de caracteres, como se vera m&aacute;s a profundidad en el desarrollo de este trabajo.</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">A continuaci&oacute;n se muestran y analizan los resultados obtenidos mediante este estudio de los distintos algoritmos para la indexaci&oacute;n de arreglos de sufijos en tiempo lineal</FONT>.</p>     <p>&nbsp;</p>     ]]></body>
<body><![CDATA[<p><FONT SIZE="3" FACE="Verdana"><B>1. MATERIALES Y M&Eacute;TODOS </B></FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">Te&oacute;ricamente los algoritmos se definen con un orden de complejidad o magnitud el cual se denota en una escala de orden, desde O(1) que denota el orden constante, pasando por el O(log n) de orden logar&iacute;tmico, llegando a los ordenes cuadr&aacute;ticos O(n2), polinomiales O(na) entre otros. En este an&aacute;lisis nos referimos espec&iacute;ficamente a los &oacute;rdenes O(n), el cual se denomina lineal, y el orden O(n log n). En esta escala ascendente los algoritmos de O(n) alcanzan siempre un mejor desempe&ntilde;o en cuanto tiempo frente a la cantidad de datos procesados.</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">Para realizar el an&aacute;lisis se toman los algoritmos de orden O(n) planteados en los siguientes papers:</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">&#8226; Simple Linear Work Suffix Array Construction &#91;1&#93;, (skew), y el c&oacute;digo fuente de Peter Sanders. &#91;2&#93;    <BR> </FONT><FONT SIZE="2" FACE ="Verdana">&#8226; A Fast Algorithm for Constructing SuffixArraysforFixed-SizeAlphabets &#91;3&#93;, (kim), cuyoc&oacute;digo fuente fue proporcionado por el se&ntilde;or Dong Kyue Kim.    <BR> </FONT><FONT SIZE="2" FACE ="Verdana">&#8226; Space Efficient Linear Time Construction of Suffix Array &#91;4&#93;, (alu), y el c&oacute;digofuentede Pang Ko. &#91;5&#93;    <BR> </FONT><FONT SIZE="2" FACE ="Verdana">De ordenO(n log n):    <BR> </FONT><FONT SIZE="2" FACE ="Verdana">&#8226; SuffixArrays: a new methodfor online stringsearches &#91;6&#93;, implementado por Doug McIlroy's, (manber), c&oacute;digofuenteobtenido de la p&aacute;gina de Bell-Labs. &#91;7&#93;    <BR> </FONT><FONT SIZE="2" FACE ="Verdana">&#8226; FasterSuffixSorting &#91;8&#93;, (larsson), c&oacute;digo fuente tomado de la p&aacute;gina de Jesper Larsson. &#91;9&#93;</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">Para las pruebas con alfabetos de enteros se usaron los tres algoritmos de orden lineal comparados con respecto a <I>Larsson.</I> En el caso del alfabeto de enteros se us&oacute; el algoritmo <I>alu</I>O(n), comparado con <I>manber</I> O(n log n). Se tuvo en cuenta el algoritmo planteado en Linear-Time Construction of SuffixArrays &#91;10&#93; pero se descart&oacute;ya que el planteado en &#91;3&#93; es una mejor&iacute;a de este.</FONT></p>     ]]></body>
<body><![CDATA[<p><FONT SIZE="2" FACE ="Verdana">Para realizar las pruebas con alfabetos de enteros, se desarroll&oacute; una aplicaci&oacute;n llamada <I>tester_linear</I> que tiene las siguientes caracter&iacute;sticas:</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">Esta aplicaci&oacute;n, desarrollada en C bajo Linux, permite llamar a los diferentes m&eacute;todos de indexaci&oacute;n de arreglos de sufijos, <I>tester_linear</I> entrega para cada algoritmo el tiempo de usuario que se consume en la tarea de generar el arreglo. Al momento de ejecutar la aplicaci&oacute;n se pasan los siguientes par&aacute;metros:</FONT></p>     <BLOCKQUOTE>       <P><FONT SIZE="2" FACE ="Verdana"><I>tester &#91;in&#93; &#91;out&#93; &#91;m&eacute;todo&#93; MB    <BR>     </I></FONT><FONT SIZE="2" FACE ="Verdana"><I>tester:</I> nombre del archivo ejecutable.    <BR>     </FONT><FONT SIZE="2" FACE ="Verdana"><I>in:</I> archivo de entrada para ser indexado.    <BR>     </FONT><FONT SIZE="2" FACE ="Verdana"><I>out:</I> archivo de salida donde se guarda el arreglo de sufijos.    <BR>     </FONT><FONT SIZE="2" FACE ="Verdana"><I>m&eacute;todo:</I> se     define con que algoritmo se desea hacer la indexaci&oacute;n as&iacute;:</FONT></P>       <BLOCKQUOTE>         <P><FONT SIZE="2" FACE ="Verdana">&#8226; <I>larsson    ]]></body>
<body><![CDATA[<BR>       </I></FONT><FONT SIZE="2" FACE ="Verdana">&#8226; <I>alu    <BR>       </I></FONT><FONT SIZE="2" FACE ="Verdana">&#8226; <I>skew    <BR>       </I></FONT><FONT SIZE="2" FACE ="Verdana">&#8226; <I>kim</I></FONT></P>   </BLOCKQUOTE> </BLOCKQUOTE>     <p><FONT SIZE="2" FACE ="Verdana">Los cuatro algoritmos adaptados al tester_linear trabajan para indexar alfabetos comparables de enteros y long (4 bytes).</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">Para realizar las pruebas con alfabetos de caracteres (1 byte), se hizo la ejecuci&oacute;n directa de la aplicaci&oacute;n generada con los algoritmos manber y larsson. Para la ejecuci&oacute;n se tomaron partes del archivo &#8220;ohsumed.88-91&#8221; desde 10MB hasta 100MB.</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">Los archivos usados para las pruebas fueron:</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">&#8226; ohsumed.87; 60MB    <BR> </FONT><FONT SIZE="2" FACE ="Verdana">&#8226; ohsumed.88-91; 324MB</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">Estos conforman la colecci&oacute;n de datos TREC-9 obtenida de Text Retrieval Conference(TREC) &#91;11&#93;y se consideran informaci&oacute;n confiable y aceptada para realizar las pruebas requeridas para lograr el objetivo del estudio sobre los algoritmos de tiempo lineal para la indexaci&oacute;n de arreglos de sufijos. La colecci&oacute;n de datos OHSUMED es un set de 348.566 referencias del &aacute;rea de la medicina, que recoge informaci&oacute;n del periodo comprendido entre 1987 y 1991.</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">Las pruebas se realizaron utilizando una m&aacute;quina con un procesador Intel Xeon de 3.06GHZ y con 2GB de RAM, al momento de realizar las pruebas se ten&iacute;an el 90&#37; de recursos disponibles en cuanto a procesador y alrededor del 70&#37; en cuanto a RAM.</FONT></p>     ]]></body>
<body><![CDATA[<p>&nbsp;</p>     <p><FONT SIZE="3" FACE="Verdana"><B>2. RESULTADOS </B></FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">Se realizaron las siguientes pruebas:</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana"><B>Archivo: ohsumed.87    <BR> </B> Se     utiliz&oacute; para la creaci&oacute;n de arreglos de sufijos con alfabeto de enteros.</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">Se corrieron 180 pruebas bajos las condiciones definidas para el proyecto, 45 con cada uno de los algoritmos probados, se accedi&oacute; a nivel de 1, 2, 5, 10, 20... 60 MB con <I>tester_linear.</I></FONT></p>     <p><FONT SIZE="2" FACE ="Verdana"><B>Archivo: ohsumed.88-91    <BR> </B></FONT><FONT SIZE="2" FACE ="Verdana">Tomamos &eacute;ste para realizar pruebas con alfabetos de enteros y de caracteres.</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">Se corrieron para alfabeto de enteros 200 pruebas y 100 para el de caracteres, en ambos casos continuando con las condiciones definidas para el estudio. En el primer caso se accedi&oacute; desde 10MB hasta 100MB mediante la utilizaci&oacute;n de <I>tester_linear,</I> para el segundo se crearon archivos en el rango de 10 a 100 MB.</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">Los resultados se presentan codificados as&iacute;:</FONT></p>     ]]></body>
<body><![CDATA[<BLOCKQUOTE>       <P><FONT SIZE="2" FACE ="Verdana"><I>larsson</I> = Larsson    <BR>     </FONT><FONT SIZE="2" FACE ="Verdana"><I>skew</I> = Sanders    <BR>     </FONT><FONT SIZE="2" FACE ="Verdana"><I>alu</I> = Aluru    <BR>     </FONT><FONT SIZE="2" FACE ="Verdana"><I>kim</I> = Kim    <BR>   </FONT><FONT SIZE="2" FACE ="Verdana"><I>manber</I> = Manber</FONT></P> </BLOCKQUOTE>     <p><FONT SIZE="2" FACE ="Verdana">En la <A HREF="#t1">tabla 1</A> y la <A HREF="#f1">figura 1</A> se muestra el tiempo promedio que toma cada uno de los m&eacute;todos para finalizar el proceso de creaci&oacute;n de arreglos de sufijos. En este caso las pruebas han sido realizadas con ohsumed.87.</FONT></p>     <p ALIGN="CENTER"><FONT SIZE="2" FACE ="Verdana"><STRONG>Tabla 1.</STRONG> Tiempo     promedio para creación de arreglos de sufijos con alfabeto de enteros (ohsumed.87).    <BR>   <img src="/img/revistas/rium/v9n17/v9n17a16t1.jpg"><A NAME="t1"></A>    <BR> Fuente: elaboración de los autores</FONT></p>     ]]></body>
<body><![CDATA[<p ALIGN="CENTER">&nbsp;</p>     <p ALIGN="CENTER"><FONT SIZE="2" FACE ="Verdana"><img src="/img/revistas/rium/v9n17/v9n17a16f1.jpg"><A NAME="f1"></A>    <BR>   <STRONG>Figura 1. </STRONG>Comparación de algoritmos para indexación de arreglo   de sufijos con alfabeto de enteros (ohsumed.87)<BR /> Fuente: elaboración de los autores.</FONT></p>     <p ALIGN="CENTER">&nbsp;</p>     <p><FONT SIZE="2" FACE ="Verdana">En la <A HREF="#t2">tabla 2</A> y la <A HREF="#f2">figura 2</A> se aprecian las pruebas     realizadas con el archivo ohsumed.88-91 bajo las condiciones mencionadas anteriormente.</FONT></p>     <p ALIGN="CENTER"><FONT SIZE="2" FACE ="Verdana"><STRONG>Tabla 2.</STRONG> Tiempo     promedio para creación de arreglos de sufijos con alfabeto de enteros (ohsumed.88-91)    <BR> <img src="/img/revistas/rium/v9n17/v9n17a16t2.jpg"><A NAME="t2"></A>    <BR> Fuente: elaboración de los autores</FONT></p>     <p ALIGN="CENTER">&nbsp;</p>     <p ALIGN="CENTER"><FONT SIZE="2" FACE ="Verdana"><img src="/img/revistas/rium/v9n17/v9n17a16f2.jpg"><A NAME="f2"></A>    ]]></body>
<body><![CDATA[<BR>   <STRONG>Figura 2.</STRONG> Comparación de algoritmos para indexación de arreglos   de sufijos con alfabeto de enteros (ohsumed.88-91)<BR /> Fuente: elaboración de los autores.</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">Con los datos obtenidos podemos observar caracter&iacute;sticas en cuanto al tiempo de usuario necesario para la indexaci&oacute;n de <I>X</I> MB de datos; adem&aacute;s de esta informaci&oacute;n, durante las pruebas obtuvimos datos que nos permiten conocer el porcentaje m&aacute;ximo de memoria principal utilizada durante la ejecuci&oacute;n     de los procesos. Dichos porcentajes son presentados en la <A HREF="#t3">tabla     3</A> y la <A HREF="#f3">figura     3</A>. A partir de &eacute;stos, obtuvimos la cantidad m&aacute;xima de MB de RAM usados durante la ejecuci&oacute;n de las pruebas por cada proceso, en este caso se presentan la <A HREF="#t4">tabla 4</A> y la <A HREF="#f4">figura 4</A>.</FONT></p>     <p ALIGN="CENTER"><FONT SIZE="2" FACE ="Verdana"><STRONG>Tabla 3. </STRONG>Porcentaje     máximo de uso de RAM durante ejecución tomando ohsumed.88-91<BR /> <img src="/img/revistas/rium/v9n17/v9n17a16t3.jpg"><A NAME="t3"></A>    <BR> Fuente: elaboración de los autores </FONT></p>     <p ALIGN="CENTER">&nbsp;</p>     <p ALIGN="CENTER"><FONT SIZE="2" FACE ="Verdana"><img src="/img/revistas/rium/v9n17/v9n17a16f3.jpg"><A NAME="f3"></A>    <BR>   <STRONG>Figura 3.</STRONG> Comparativo de máximo porcentaje de RAM usada para   procesar ohsumed.88-91<BR /> Fuente: elaboración de los autores</FONT></p>     <p ALIGN="CENTER">&nbsp;</p>     <p ALIGN="CENTER"><FONT SIZE="2" FACE ="Verdana"><STRONG>Tabla 4.</STRONG> Cantidad     de KB de RAM usados para indexar ohsumed.88-91<BR />     <BR>     <img src="/img/revistas/rium/v9n17/v9n17a16t4.jpg"><A NAME="t4"></A>    ]]></body>
<body><![CDATA[<BR> Fuente: elaboración de los autores</FONT></p>     <p ALIGN="CENTER">&nbsp;</p>     <p ALIGN="CENTER"><FONT SIZE="2" FACE ="Verdana"><img src="/img/revistas/rium/v9n17/v9n17a16f4.jpg"><A NAME="f4"></A>    <BR>   <STRONG>Figura 4.</STRONG> Comparativo de la cantidad de KB usados para indexar   ohsumed.88-91<BR /> Fuente: elaboración de los autores.</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">A continuaci&oacute;n, presentamos los resultados obtenidos utilizando un alfabeto de caracteres. Cabe resaltar que en estas pruebas s&oacute;lo se usaron dos algoritmos, &eacute;stos reciben directamente texto y luego lo procesan; los dem&aacute;s algoritmos analizados no reciben caracteres (1 byte). Si se quisiera indexar un alfabeto de caracteres con los algoritmos usados en las pruebas descritas anteriormente se har&iacute;a un pre-procesamiento para convertir los caracteres a enteros, de esta manera los cuatro algoritmos descritos en las pruebas anteriormente expuestas son aplicables a cualquier alfabeto que se pueda convertir a enteros.</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">Los resultados presentados en la <A HREF="#t5">tabla       5</A> y la <A HREF="#f5">figura 5</A> para los alfabetos de caracteres se obtuvieron de un an&aacute;lisis completo del tiempo de usuario necesario para la indexaci&oacute;n de los caracteres en un arreglo de sufijos. Recordemos que para estas pruebas se usaron particiones del archivo ohsumed.88-91.</FONT></p>     <p ALIGN="CENTER"><FONT SIZE="2" FACE ="Verdana"><STRONG>Tabla 5:</STRONG> Tiempo     promedio para creación de arreglos de sufijos con alfabeto de caracteres.    <BR> <img src="/img/revistas/rium/v9n17/v9n17a16t5.jpg"><A NAME="t5"></A>    <BR> Fuente: elaboración de los autores </FONT></p>     <p ALIGN="CENTER">&nbsp;</p>     ]]></body>
<body><![CDATA[<p ALIGN="CENTER"> <FONT SIZE="2" FACE ="Verdana"><img src="/img/revistas/rium/v9n17/v9n17a16f5.jpg"><A NAME="f5"></A>    <BR> <STRONG>Figura 5. </STRONG>Comparación de algoritmos para indexación de arreglos de sufijos con alfabeto de caracteres.<BR /> Fuente: elaboración de los autores.</FONT></p>     <p ALIGN="CENTER"><FONT SIZE="2" FACE ="Verdana"></FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">Cabe anotar que todos los resultados se registraron para emplear un m&eacute;todo de comparaci&oacute;n lineal buscando un factor de 4 d&iacute;gitos significativos.</FONT></p>     <p>&nbsp;</p>     <p><FONT SIZE="3" FACE="Verdana"><B>3. DISCUSI&Oacute;N </B></FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">Basados en los resultados expuestos en la secci&oacute;n anterior se abordaron los dos frentes de an&aacute;lisis definidos para los resultados, desde el punto de vista de tiempo y uso de memoria principal; tambi&eacute;n desde la divisi&oacute;n realizada para alfabeto de enteros y de caracteres.</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana"><I>Alfabeto de enteros:</I> es posible apreciar     que el 100&#37; de     los algoritmos probados presentan un comportamiento similar en consumos de     memoria y tiempo necesario para indexar entre 1 y 10 MB como se aprecia en     las pruebas realizadas sobre ohsumed.87 en la <A HREF="#t1">tabla 1</A> y     la <A HREF="#f1">figura     1</A>, el algoritmo presentado en &#91;8&#93; a partir de los 20MB presenta grandes diferencias con los dem&aacute;s tanto en tiempo como de cantidad de RAM utilizada; esto es posible apreciarlo en <A HREF="#t2">tabla 2</A> y gr&aacute;fico 2. Un punto adicional que se analizo, referente al m&aacute;ximo porcentaje de RAM utilizada durante el proceso de generaci&oacute;n del arreglo de sufijos tambi&eacute;n demostr&oacute; que el algoritmo presentado en &#91;8&#93; presenta un comportamiento superior a los dem&aacute;s algoritmos &#91;1, 3, 4&#93;.</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana"><I>Alfabeto de caracteres:</I> analizando los     aspectos estudiados para los dos algoritmos disponibles para este tipo de     alfabetos la discusi&oacute;n se centra en la escasa diferencia de uso de     recursos y tiempo de ejecuci&oacute;n que se tiene entre &#91;4, 6&#93;;     tomando al detalle los datos obtenidos durante las pruebas y que se presentan     en la <A HREF="#t5">tabla 5</A> y la <A HREF="#f5">figura 5</A> es posible determinar que a     partir de 30MB el algoritmo planteado en &#91;4&#93; representa una mejor soluci&oacute;n, para el caso estudiado.</FONT></p>     <p>&nbsp;</p>     ]]></body>
<body><![CDATA[<p><FONT SIZE="3" FACE="Verdana"><B>4. CONCLUSIONES </B></FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">Tras las pruebas y an&aacute;lisis realizados y teniendo como base los resultados obtenidos que anteriormente se expusieron podemos concluir, sin lugar a dudas, que el mejor algoritmo en los aspectos estudiados para la creaci&oacute;n de arreglos de sufijos es el planteado en &#91;8&#93;; esto se puede afirmar tras confirmar experimentalmente que, en cuanto a tiempo de usuario y memoria principal requerida para la creaci&oacute;n de los arreglos, supera a los dem&aacute;s algoritmos estudiados. Aun siendo un algoritmo de orden O(n log n) que te&oacute;ricamente es inferior, prevalece ampliamente en los aspectos estudiados sobre los algoritmos de orden O(n); esto respecto a lo analizado con los resultados obtenidos para alfabetos de enteros.</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">En el caso del alfabeto de caracteres las pruebas no son concluyentes pero podemos determinar que el algoritmo planteado en &#91;4&#93; tiene un mejor comportamiento respecto al planteado en &#91;6&#93;; esta caracter&iacute;stica de mejor uso de recursos se puede encontrara partir de 30MB y se acent&uacute;a con el crecimiento de la cantidad de datos a indexar en el arreglo. As&iacute;, en el caso de alfabetos de caracteres el algoritmo estudiado de orden O(n) supera al de orden O(n log n).</FONT></p>     <p><FONT SIZE="2" FACE ="Verdana">&#150; Respecto a cu&aacute;l de los algoritmos de orden O(n) es mejor seg&uacute;n los par&aacute;metros del estudio, se puede afirmar que el planteado en &#91;4&#93; es el indicado. En los an&aacute;lisis hechos en cuanto a tiempo de usuario tiene un rendimiento similar al planteado en &#91;3&#93; pero a medida que aumenta la cantidad de datos es superior a &eacute;ste; en el aspecto de memoria, se determina que presenta un mejor uso de recursos a los de su mismo orden.</FONT></p>     <p>&nbsp;</p>     <p><FONT SIZE="3" FACE="Verdana"><B>REFERENCIAS </B></FONT></p>     <!-- ref --><p><FONT SIZE="2" FACE ="Verdana">&#91;1&#93;  J. K&auml;rkk&auml;inen y P. Sanders, &#8220;Simple     Linear Work Suffix Array Construction&#8221;, En <I>30th International Colloquium     on Automata, Languages and Programming,</I> LNCS 2719, Springer 2003, pp.     943-955.</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000119&pid=S1692-3324201000020001600001&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><FONT SIZE="2" FACE ="Verdana">&#91;2&#93;  S. Peter. &#91;En l&iacute;nea&#93; Disponible en: <A HREF="http://www.mpi-inf.mpg.de/%7Esanders/programs/suffix/" TARGET="_blank">http://www.mpi-sb.mpg.de/~sanders/programs/suffix/</A></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000120&pid=S1692-3324201000020001600002&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><FONT SIZE="2" FACE ="Verdana">&#91;3&#93;  D.K. Kim <I>et al.,</I> &#8220;A Fast Algorithm for Constructing Suffix Arrays for Fixed-Size Alphabets&#8221;, En Experimental and Efficient Algorithms, LNCS 3059, Springer 2004, pp. 301-314</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000121&pid=S1692-3324201000020001600003&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><FONT SIZE="2" FACE ="Verdana">&#91;4&#93;  P. Koy y S. Aluru, &#8220;Space Efficient     Linear Time Construction of Suffix Array&#8221;, En <I>14th Annual Symposium on     Combinatorial Pattern Matching, </I>Springer 2003, pp. 200-210</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000122&pid=S1692-3324201000020001600004&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><FONT SIZE="2" FACE ="Verdana">&#91;5&#93;  K. Pang. (2004, May.). &#91;En l&iacute;nea&#93; Disponible <A HREF="http://www.public.iastate.edu/" TARGET="_blank">http://www.public.iastate.edu/~kopang/</A></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000123&pid=S1692-3324201000020001600005&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><FONT SIZE="2" FACE ="Verdana">&#91;6&#93;  U. Manber y G. Myers, &#8220;Suffix Arrays: a new method for online string searches&#8221;, En <I>SIAM Journal of Computing 22,</I> 1993, pp. 935-948.</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000124&pid=S1692-3324201000020001600006&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><FONT SIZE="2" FACE ="Verdana">&#91;7&#93;  M. Peter y M. Douglas. (2004, May.) &#91;En l&iacute;nea&#93; Disponible: <A HREF="http://cm.bell-labs.com/cm/cs/who/doug/ssort.c" TARGET="_blank">http://cm.bell-labs.com/cm/cs/who/doug/ ssort.c</A></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000125&pid=S1692-3324201000020001600007&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><FONT SIZE="2" FACE ="Verdana">&#91;8&#93;  J. Larsson y K. Sadakane, &#8220;Faster     Suffix Sorting&#8221;, Tech. Rep. LU-CS-TR: 99-214, LUNFD6/(NFCS-3140)/1-20/(1999),     Department of Computer Science, Lund University, Sweden,1999</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000126&pid=S1692-3324201000020001600008&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><FONT SIZE="2" FACE ="Verdana">&#91;9&#93; L. Jesper. (2004, May.) &#91;En l&iacute;nea&#93; Disponible: <A HREF="http://larsson.dogma.net/research.html" TARGET="_blank">http://larsson.dogma.net/research.html</A></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000127&pid=S1692-3324201000020001600009&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><FONT SIZE="2" FACE ="Verdana">&#91;10&#93; D.K. Kim y J.S. Sim, H. Parky     K. Park, &#8220;Linear-Time Construction of Suffix Arrays En <I>Combinatorial     Pattern Matching: 14th Annual Symposium, CPM 2003,</I> LNCS 2676, Springer     2003, pp. 186-199.</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000128&pid=S1692-3324201000020001600010&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><!-- ref --><p><FONT SIZE="2" FACE ="Verdana">&#91;11&#93; Text RetrievalConference (TREC). (2004, May.) &#91;En linea&#93; Disponible: <A HREF="http://trec.nist.gov/data.html" TARGET="_blank">http://trec.nist.gov/data.html</A></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&#160;<a href="javascript:void(0);" onclick="javascript: window.open('/scielo.php?script=sci_nlinks&ref=000129&pid=S1692-3324201000020001600011&lng=','','width=640,height=500,resizable=yes,scrollbars=1,menubar=yes,');">Links</a>&#160;]<!-- end-ref --><p>&nbsp;</p>     <p><FONT SIZE="2" FACE ="Verdana"> <B>Recibido:</B> 14/08/2008.     <BR> <B>Aceptado:</B> 08/10/2010.  </FONT></p>     ]]></body>
<body><![CDATA[ ]]></body><back>
<ref-list>
<ref id="B1">
<label>1</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Kärkkäinen]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
<name>
<surname><![CDATA[Sanders]]></surname>
<given-names><![CDATA[P.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Simple Linear Work Suffix Array Construction]]></article-title>
<source><![CDATA[]]></source>
<year>2003</year>
<conf-name><![CDATA[30 International Colloquium on Automata, Languages and Programming, LNCS 2719]]></conf-name>
<conf-loc> </conf-loc>
<page-range>943-955</page-range><publisher-name><![CDATA[Springer]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B2">
<label>2</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Peter]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
</person-group>
<source><![CDATA[]]></source>
<year></year>
</nlm-citation>
</ref>
<ref id="B3">
<label>3</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Kim]]></surname>
<given-names><![CDATA[D.K.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[A Fast Algorithm for Constructing Suffix Arrays for Fixed-Size Alphabets]]></article-title>
<source><![CDATA[Experimental and Efficient Algorithms, LNCS 3059]]></source>
<year>2004</year>
<page-range>301-314</page-range><publisher-name><![CDATA[Springer]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B4">
<label>4</label><nlm-citation citation-type="confpro">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Koy]]></surname>
</name>
<name>
<surname><![CDATA[Aluru]]></surname>
<given-names><![CDATA[S.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Space Efficient Linear Time Construction of Suffix Array]]></article-title>
<source><![CDATA[]]></source>
<year>2003</year>
<conf-name><![CDATA[14 Symposium on Combinatorial Pattern Matching]]></conf-name>
<conf-loc> </conf-loc>
<page-range>200-210</page-range><publisher-name><![CDATA[Springer]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B5">
<label>5</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Pang]]></surname>
<given-names><![CDATA[K.]]></given-names>
</name>
</person-group>
<source><![CDATA[]]></source>
<year>2004</year>
<month>, </month>
<day>Ma</day>
</nlm-citation>
</ref>
<ref id="B6">
<label>6</label><nlm-citation citation-type="journal">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Manber]]></surname>
<given-names><![CDATA[U.]]></given-names>
</name>
<name>
<surname><![CDATA[Myers]]></surname>
<given-names><![CDATA[G.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Suffix Arrays: a new method for online string searches]]></article-title>
<source><![CDATA[SIAM Journal of Computing]]></source>
<year>1993</year>
<numero>22</numero>
<issue>22</issue>
<page-range>935-948</page-range></nlm-citation>
</ref>
<ref id="B7">
<label>7</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Peter]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
<name>
<surname><![CDATA[Douglas]]></surname>
<given-names><![CDATA[M.]]></given-names>
</name>
</person-group>
<source><![CDATA[]]></source>
<year>2004</year>
<month>, </month>
<day>Ma</day>
</nlm-citation>
</ref>
<ref id="B8">
<label>8</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Larsson]]></surname>
<given-names><![CDATA[J.]]></given-names>
</name>
<name>
<surname><![CDATA[Sadakane]]></surname>
<given-names><![CDATA[K.]]></given-names>
</name>
</person-group>
<source><![CDATA[Faster Suffix Sorting]]></source>
<year>1999</year>
<publisher-name><![CDATA[Department of Computer Science, Lund University]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B9">
<label>9</label><nlm-citation citation-type="">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Jesper]]></surname>
<given-names><![CDATA[L.]]></given-names>
</name>
</person-group>
<source><![CDATA[]]></source>
<year>(200</year>
<month>4,</month>
<day> M</day>
</nlm-citation>
</ref>
<ref id="B10">
<label>10</label><nlm-citation citation-type="book">
<person-group person-group-type="author">
<name>
<surname><![CDATA[Kim]]></surname>
<given-names><![CDATA[D.K.]]></given-names>
</name>
<name>
<surname><![CDATA[Sim]]></surname>
<given-names><![CDATA[J.S.]]></given-names>
</name>
<name>
<surname><![CDATA[Parky]]></surname>
<given-names><![CDATA[H.]]></given-names>
</name>
<name>
<surname><![CDATA[Park]]></surname>
<given-names><![CDATA[K.]]></given-names>
</name>
</person-group>
<article-title xml:lang="en"><![CDATA[Linear-Time Construction of Suffix Arrays]]></article-title>
<source><![CDATA[Combinatorial Pattern Matching: 14th Annual Symposium, CPM 2003]]></source>
<year>2003</year>
<page-range>186-199</page-range><publisher-name><![CDATA[Springer]]></publisher-name>
</nlm-citation>
</ref>
<ref id="B11">
<label>11</label><nlm-citation citation-type="">
<source><![CDATA[Text RetrievalConference (TREC)]]></source>
<year>2004</year>
<month>, </month>
<day>Ma</day>
</nlm-citation>
</ref>
</ref-list>
</back>
</article>
