Sunteți pe pagina 1din 24

Tema: rboles Sufijo

ndice
Introduccin.... Pg. 3 Desarrollo -Historia........... Pg. 4 -Conceptos Bsicos........... Pg. 4 -Principales Algoritmos... Pg. 6 -Algoritmo de los rboles Sufijo en Tiempo Lineal de Ukkonen Pg. 6 Primera Versin del Algoritmo: rbol de sufijos implcitos......... Pg. 6 Primera Aceleracin: Ligas entre sufijos ... Pg. 11 Aplicaciones... Pg. 17 Conclusin.... Pg. 19 Anexo........ Pg. 20 Bibliografa ... Pg. 23

Introduccin
El siguiente informe estar basado en el tema RBOLES DE SUFIJO para ser presentado como trabajo final de la materia Estructura de Datos de la carrera Analista de Sistemas. Se conceptuar el contenido aludido, destacando sus usos y proporcionando informacin adicional relacionada. A modo de introduccin en el tema, se mencionar que un rbol sufijo es una estructura de datos que sirve para almacenar una cadena de caracteres con informacin pre-procesada sobre su estructura interna. Nos ser til para, por ejemplo, resolver el problema de la subcadena en tiempo lineal: Sea un texto T de longitud m Se pre-procesa (se construye el rbol) en tiempo O(m) Para buscar una subcadena S de longitud n basta con O(n). Ser una herramienta vlida para resolver problemas ms complejos tales como: Dado un conjunto de textos {Ti} ver si S es subcadena de algn Ti Reconocimiento inexacto de patrones

Desarrollo Historia
El concepto fue introducido inicialmente como rbol de posicin por Weiner en 1973, en un paper donde Donald Knuth subsecuentemente caracterizo como el "algoritmo del ao en 1973". La construccin fue exitosamente simplificada por McCreight en 1976 y tambin por Ukkonen en 1995. Ukkonen proyect la primer construccin en tiempo lineal de los rboles sufijos, ahora conocida como Algoritmo de Ukkonen.

Qu es un rbol de Sufijo?
Un rbol sufijo es una estructura de datos que sirve para almacenar una cadena de caracteres con informacin pre-procesada sobre su estructura interna. Nos ser til para, por ejemplo, resolver el problema de la subcadena en tiempo lineal: Sea un texto T de longitud m Se pre-procesa (se construye el rbol) en tiempo O(m) Para buscar una subcadena S de longitud n basta con O(n). Ser una herramienta vlida para resolver problemas ms complejos tales como: Dado un conjunto de textos {Ti} ver si S es subcadena de algn Ti Reconocimiento inexacto de patrones Para poder comprender mejor que es un rbol de Sufijos se partir de definiciones previas al tema, las cuales, al ser aplicadas, desembocarn en el tema: rboles Multicamino: Una estructura Trie es esencialmente un rbol n-ario o multicamino, donde n es el grado mximo de los nodos del rbol. Los Tries utilizan la representacin de las claves como secuencias de dgitos o caracteres alfabticos. rbol Trie de Sufijos Un rbol Trie de Sufijos es un rbol Trie que almacena todos los sufijos de un texto y cuyas hojas almacenan punteros a la ubicacin de ese sufijo en el texto. Cada hoja representa un sufijo y cada nodo interno representa una nica subcadena de T. Cada subcadena de T puede ser encontrada realizando una bsqueda en el rbol Trie a partir de la raz. rbol de Sufijos

Un rbol de Sufijos corresponde a un rbol Trie de Sufijos cuyos caminos unarios han sido compactados. Los nodos internos almacenan el nmero de caracteres que han sido compactados y punteros al texto para conocerlos; las hojas representan la posicin en el texto en la que se encuentra el sufijo. Para buscar una cadena en el rbol de Sufijos se utiliza el mismo esquema que para un rbol Trie de Sufijos. Ejemplo:

Definicin Formal de rbol de Sufijos T de S


rbol dirigido con raz. Exactamente m = |S| hojas, etiquetadas de 1 . . .m. Nodos internos al menos 2 hijos. Etiqueta de cada arista es subcadenas de S, etiq(e) 6= ". e1 = (u, v1); e2 = (u, v2); etiq(e1) = a1 . . . ap; etiq(e2) = b1 . . . bq; a1 6= b1. etiq(u, v1) etiq(v1, v2) . . . etiq(vj , hojai) = S[i . . .m].

Terminologas para rboles de Sufijo


Etiqueta de un camino: La concatenacin en orden de las subcadenas que etiquetan a las aristas desde la raz hasta el nodo. Profundidad en la cadena de un nodo: Es el nmero de caracteres en la etiqueta del nodo.

Principales Algoritmos
1973, Weiner, Linear Pattern Matching Algorithms 1976, McCreight, A space-economical suffix tree construction algorithm 1993, Ukkonen, Approximate string-matching over suffix-trees 1995, Ukkonen, On-line construction of suffix-trees

Tenemos dos mtodos para construir rboles de sufijo detalladamente: Mtodo de Ukkonen Mtodo de Weiner. Weiner fue el primero en demostrar que los rboles sufijos se podan construir en tiempo lineal, y su mtodo lo veremos debido a la importancia histrica y por contener diversas ideas tcnicas. Sin embargo, el mtodo de Ukkonen es igualmente rpido y utiliza mucho menos espacio (es decir, memoria). Por lo tanto el mtodo de Ukkonen es la opcin para la mayora de los problemas que requieren la construccin de un rbol de sufijos. Se cree que este mtodo es el ms fcil de entender. Por lo tanto, ser el que se expondr.

Algoritmo de los rboles Sufijo en Tiempo Lineal de Ukkonen


En 1995 Esko Ukkonen propuso un algoritmo en tiempo lineal, para construir rboles sufijos. El algoritmo comenzaba con un rbol implcito del sufijo que contena el primer carcter de la secuencia. Entonces caminaba a travs de la secuencia que agregaba cada carcter sucesivamente hasta que el rbol estaba completo. Esta adicin de cada carcter perteneciente a S (cadena de caracteres) en tiempo lineal de Ukkonen es la caracterstica que hace ms relevante al algoritmo. La puesta en prctica de dicho algoritmo comenz de forma ingenua requiriendo tiempos de O (n2) o an ms, de O (n3), pero explotando un nmero de tcnicas algortmicas se pudo reducir a O(n). Primera Versin del Algoritmo: El mtodo: Era construir una secuencia de rboles de sufijos implcitos, y el ltimo de ellos convertirlo en rbol de sufijos de la cadena S. rbol de sufijos implcitos: Para una cadena S, se obtiene del rbol de sufijos de S borrando cada copia del smbolo terminal de las etiquetas de las aristas y despus eliminando cada arista que no tenga etiqueta y cada nodo interno que no tenga al menos dos hijos. Se define de manera anloga el rbol de sufijos implcitos, Ii, para un prefijo S[1..i] a partir del rbol de sufijos de S[1..i].

El rbol de sufijos implcitos de una cadena S, tiene menos hojas que el rbol de sufijos de S si y slo si al menos uno de los sufijos de S es prefijo de otro sufijo de S (precisamente para evitar esa situacin se aadi el smbolo ). Ejemplo: S = xabxa El sufijo xa es prefijo del sufijo xabxa, y tambin el sufijo a es prefijo de abxa. Por eso en el rbol de sufijos de S las aristas que llevan a las hojas 4 y 5 estn etiquetadas slo con .

Al borrar esas aristas quedan dos nodos con un solo hijo y se borran tambin. El rbol implcito puede no tener una hoja por cada sufijo de S, luego tiene menos informacin que el rbol de sufijos de S.

En caso contrario, si S termina con un carcter que no apareci antes en S, entonces el rbol de sufijos implcitos de S tendr una hoja por cada sufijo y por tanto es realmente un rbol de sufijos.

Primero versin del cdigo: Esta resulto ser ineficiente O(m3)

Detalles sobre la extensin j de la fase i+1: Se busca S[j..i] = en el rbol y al llegar al final de se debe conseguir que el sufijo S(i+1) est en el rbol, para ello se pueden dar tres casos: Regla 1: Si termina en una hoja: se aade S(i+1) al final de la etiqueta de la arista de la que cuelga esa hoja. Regla 2: Si ningn camino desde el final de la cadena empieza con S(i+1), pero al menos hay un camino etiquetado que contina desde el final de se crea una nueva arista a una hoja (que se etiqueta con j) colgando desde all y etiquetada con S(i+1). Si termina en mitad de una etiqueta de una arista hay

que insertar un nuevo nodo partiendo la arista y colgar de l una nueva hoja. La nueva hoja se etiqueta con j. Regla 3: Si algn camino desde el final de empieza por S(i+1), la cadena S(i+1) ya estaba en el rbol. No hay que hacer nada.

Ejemplo de la construccin del rbol de Sufijos Implcitos, teniendo en cuenta las reglas anteriormente nombradas. S= axabx

Coste de esta primera versin: Una vez alcanzado el final de un sufijo de S[1..i] se precisa tiempo constante para la extensin (asegurar que el sufijo S(i+1) est en el rbol). -La clave, por tanto, est en localizar los finales de todos los i+1 sufijos de S[1..i]. 10

-Lo fcil: Localizar el final de en tiempo O(||) bajando desde la raz; As, la extensin j de la fase i+1 lleva un tiempo O(i+1j); Por tanto el rbol Ii+1 se puede crear a partir de Ii en O(i2), y as Im se crea en O(m3)

Todos estos resultados implicaban un problema, tiempo, Ukkonen y Wiener queran encontrar de manera eficiente el final de los sufijos construidos en la fase anterior. Entonces plantearon como solucin para reducir este coste las ligas entre sufijos que proporcionan una cadena de apuntadores donde agregar los smbolos.

Primera Aceleracin: Ligas entre sufijos


Una liga de sufijos es un apuntador (referencia, liga) desde un nodo interior con etiqueta de camino x a un nodo con etiqueta , con x , *.

v=v8, S (v)=v5 Ejemplo de Sufijo con Ligas Abababc con x=b, =ab

11

Luego de esta primera aceleracin se tienen en cuenta varios puntos, para lograr mejoras en la nueva versin del algoritmo, se crean propiedades, corolarios, etc. para darle validez a esta nueva implementacin. 1. Un nodo que se crea como hoja nunca deja de ser hoja. 2. Cada vez que se extiende el prefijo, etiquetas que terminan en hoja 3. Al partir una rama lo que cambia es el punto de inicio del Sufijo de las hojas. 4. Supongamos que tenemos una liga de sufijo del vrtice u al vrtice v (v = s(u)). Entonces, si u esta etiquetado con a1a2 . . . an, v esta etiquetado con a2 . . . an.

Propiedades:
Lema: Si un nodo interno v con etiqueta x se agrega en la extensin j del rbol en alguna fase i + 1, entonces o ya existe el camino con etiqueta que termina en un nodo interno, o el nodo se va a agregar en la extensin j + 1 de la misma fase. Corolario I: En el algoritmo de Ukkonen, cualquier nodo interno que se
construya tendr una liga de sufijo desde el al final de la fase.

Corolario II: En un rbol implcito Ii , si el nodo v tiene etiq(v) = x , entonces existe un nodo s(v) de Ii tal que etiq(s(v)) = . 12

Uso de las ligas de sufijo (para ver el algoritmo explicado a continuacin, ver
Anexo) Fase i+1, extensin j (para j=1..i+1): localiza el sufijo S[j..i] de S[1..i] La versin naif recorre un camino desde la raz Se puede simplificar usando los punteros a sufijos Primera extensin (j=1): El final de la cadena S[1..i] debe terminar en una hoja de Ii porque es la cadena ms larga del rbol Basta con guardar siempre un puntero a la hoja que corresponde a la cadena completa S[1..i] As, se accede directamente al final del sufijo S[1..i] y aadir el carcter S(i+1) se resuelve con la regla 1, con coste constante Segunda extensin (j=2): encontrar el final de S[2..i] para aadir S(i+1). Sea S[1..i] = x (con vaca o no) y sea (v,1) la arista que llega a la hoja 1. Hay que encontrar el final de en el rbol. El nodo v es la raz o es un nodo interno de Ii Si v es la raz, para llegar al final de hay que recorrer el rbol hacia abajo siguiendo el camino de (como el algoritmo naif). Si v es interno, por el Corolario 2, hay un puntero a sufijo desde v hasta s(v). Ms an, como s(v) tiene una etiqueta que es prefijo de , el final de debe terminar en el subrbol de s(v) Entonces, en la bsqueda del final de , no hace falta recorrer la cadena completa, sino que se puede empezar el camino en s(v) (usando el puntero a sufijo) El resto de extensiones de S[j..i] a S[j..i+1] con j > 2: Empezando desde el final de S[j1..i] (al que se ha tenido que llegar en la extensin anterior) ascender un nodo para llegar bien a la raz bien a un nodo interno v desde el que sale un puntero a sufijo que llega a s(v). Si v no es la raz, seguir el puntero a sufijo y descender en el subrbol de s(v) hasta el final de S[j..i], y extender con S(i+1) segn las reglas de extensin. Coste resultante: Resulto ser el mismo, por lo tanto aplicaron diversas tcnicas para lograr que se reduzca a O(m2). Tcnica N 1: En la extensin j+1 el algoritmo desciende desde s(v) a lo largo de la subcadena, sea , hasta el final de S[j..i] Implementacin directa: O(||) 13

Se puede reducir a O(Numero nodos de camino): Sea g = || El 1er carcter de debe aparecer en una (y slo una) arista de las que salen de s(v); sea g el n de caracteres de esa arista Si g < g entonces se puede saltar al nodo final de la arista Se hace g=gg, se asigna a una variable h la posicin de g+1 y se sigue mirando hacia abajo

Terminologa: Profundidad de un nodo es el n de nodos del camino de la raz a Lema 2:

ese nodo. Sea (v, s(v)) un puntero a sufijo recorrido en el algoritmo de Ukkonen. En ese instante, la profundidad de v es, como mucho, uno ms que la de s(v). Teorema 1: Usando el truco 1, el coste en tiempo de cualquier fase del algoritmo de Ukkonen es O(m). Corolario 3: El algoritmo de Ukkonen puede implementarse con punteros a sufijos para conseguir un coste en tiempo en O(m2). Problema para bajar de coste O(m2): El rbol puede requerir (m2) en espacio: Las etiquetas de aristas pueden contener (m2) caracteres Ejemplo: S = abcdefghijklmnopqrstuvwxyz Cada sufijo empieza por distinta letra, luego de la raz salen 26 aristas y cada una etiquetada con un sufijo completo, por tanto se requieren 26 27/2 caracteres en total. 14

Se requiere otra forma de guardar las etiquetas. Compresin de etiquetas Guardar un par de ndices: Principio y fin de la subcadena en la cadena S El coste para localizar los caracteres a partir de las posiciones es constante (si se guarda una copia de S con acceso directo)

Nmero mximo de aristas: 2m 1, luego el coste en espacio para almacenar el rbol es O(m)

Observacin 1: Tener en cuenta la regla 3 Detalles sobre la extensin j de la fase i+1: Se busca S[j..i] = en el rbol y al llegar al final de se debe conseguir que el sufijo S(i+1) est en el rbol, para ello se pueden dar tres casos:

Si se aplica la regla 3 en alguna extensin j, se aplicar tambin en el resto de extensiones desde j + 1 hasta i + 1. Ms an, slo se aade un puntero a sufijo tras aplicar la regla 2.

15

Tcnica 2: Se debe terminar la fase i + 1 la primera vez que se aplique la regla 3 para una extensin. Las extensiones de la fase i + 1 tras la primera ejecucin de la regla 3 se dirn implcitas (no hay que hacer nada en ellas, luego no hay que hacerlas). Por el contrario, una extensin j en la que se encuentra explcitamente el final de S[j..i] (y por tanto se aplica la regla 1 o la 2), se llama explcita. Observacin 2: Una vez que se crea una hoja y se etiqueta con j (por el sufijo de S que empieza en la posicin j), se queda como hoja en toda la ejecucin del algoritmo. En efecto, si hay una hoja etiquetada con j la regla 1 de extensin se aplicar en todas las fases sucesivas a la extensin j.

Por tanto, tras crear la hoja 1 en la fase 1, en toda fase i hay una secuencia inicial de extensiones consecutivas (empezando desde la extensin 1) en las que se aplican las reglas 1 2. - Sea ji la ltima extensin de esta secuencia. Como cada aplicacin de la regla 2 crea una nueva hoja, se sigue de la observacin 2 que ji ji+1, Es decir, la longitud de la secuencia inicial de extensiones en las que se aplican las reglas 1 2 no puede reducirse en fases sucesivas; Por tanto, se puede implementar la siguiente tecnica . En la fase i + 1 evitar todas las extensiones explcitas desde la 1 a la ji (as se consume tiempo constante en hacer todas esas extensiones implcitamente); Lo vemos en detalle a continuacin (recordar que la etiqueta de una arista se representa por 2 ndices, p, q, que especifican la subcadena S[p..q], y que la arista a una hoja en el rbol Ii tendr q = i, y por tanto en la ase i + 1 q se incrementar a i + 1, indicando el aadido del carcter S(i + 1) al final de cada sufijo)

16

Tcnica N3: En la fase i + 1, cuando se crea una arista a una hoja que se debera etiquetar con los ndices (p, i + 1) representando la cadena S[p..i + 1], en lugar de eso, etiquetarla con (p, e), donde e es un smbolo que denota el final actual e es un ndice global al que se da valor i + 1 una vez en cada fase En la fase i + 1, puesto que el algoritmo sabe que se aplicar la regla 1 en las extensiones de la 1 a la ji como mnimo, no hace falta ms trabajo adicional para implementar esas ji extensiones; en su lugar, basta coste constante para incrementar la variable e y luego el trabajo necesario para las extensiones a partir de la ji + 1 Coste: El algoritmo de Ukkonen, usando los punteros a sufijos e implementando las tecnicas 1, 2 y 3, construye los rboles de sufijos implcitos I1 a Im en tiempo total O(m). El rbol de sufijos implcitos Im se puede transformar en el rbol de sufijos final en O(m): Se aade el smbolo terminador al final de S y se hace continuar el algoritmo de Ukkonen con ese carcter. Como ningn sufijo es ahora prefijo de otro sufijo, el algoritmo crea un rbol de sufijos implcitos en el que cada sufijo termina en una hoja (luego es un rbol de sufijos) Hay que cambiar cada ndice e de las aristas a las hojas por m

Aplicaciones
Los rboles sufijo se pueden utilizar para solucionar una gran cantidad de problemas de la secuencia que ocurran en edicin de textos, bsqueda del free-text, biologa de cmputo, y otras reas de aplicacin. Los usos primarios de los rboles sufijos incluyen, bsqueda de secuencia en O (m) complejidad, donde est la longitud m de la subsecuencia (pero con O inicial (n) tiempo requerido para construir la secuencia). Encontrar la subsecuencia repetida ms larga o la subsecuencia comn ms larga, el palndromo ms largo de una secuencia. Los rboles del sufijo son de uso frecuente en los usos de la bioinformtica, donde se utilizan para buscar los patrones en las secuencias del ADN o de la protena, que se pueden ver como cadenas de caracteres largas. La capacidad de buscar eficientemente con uniones mal hechas pudo ser el rbol de sufijo la fuerza ms grande de S. Tambin se utiliza en la compresin de datos, donde por una parte se usa para encontrar repeticiones de datos y por otra parte para la etapa de clasificacin. Un rbol sufijo, adems, se utiliza en el rbol que arracima, un

17

algoritmo de agrupamiento del sufijo de los datos usado en algunos motores de la bsqueda. Otros usos: Reconocer contaminacin de ADN: Dada una cadena S1 y otra S2 (que puede estar contaminada) encuentra todas las subcadenas de S2 que ocurren en S1 y que tienen longitud mayor que l. Subcadenas comunes a ms de dos cadenas. Compactacin de un rbol de sufijos, usando un grafo dirigido y acclico de palabras. Uso inverso: rbol de sufijos del patrn buscado Aplicaciones concretas en proyectos genoma Codificacin de mnima longitud de ADN Reconocimiento inexacto de patrones Comparacin mltiple de cadenas

18

Conclusin
Segn lo investigado, los rboles sufijo son estructuras de datos que tienen un almacenamiento especfico de cadenas de caracteres que trabaja con informacin manipulada en estructuras internas, facilitando la bsqueda en las mismas, longitudes, reconocimiento de subcadenas y de patrones inexactos entre diversas funcionalidades. En la actualidad, como alumna de la carrera de analista de sistemas, lo aplicara para realizar motores de bsqueda, encontrar la subsecuencia repetida ms larga o la subsecuencia comn ms larga, el palndromo ms largo de una secuencia, entre otras, pero adems, posee mltiples utilidades, entre las cuales podra mencionar: el uso frecuente en la bioinformtica, donde se utilizan para buscar los patrones en las secuencias del ADN o de la protena, que se pueden ver como cadenas de caracteres largas. Para poder aplicar este nuevo conocimiento que estoy incorporando necesito saberes previos tales como rboles multicaminos, rboles trie de sufijos y rboles de sufijos. Si bien es un tema que an se encuentra en investigacin, existe una amplia gama de sitios en los que se puede encontrar informacin para ayudarnos a comprenderlo mejor.

19

ANEXO

20

Cdigo Algoritmo de Ukkonen


function ukkonen95() { var s, k, i; var bt; root = new State(); bt = new State(); // crea transiciones desde bt hacia root for(i = 0; i< Txt.length; i++) bt.addTransition(i,i,root); root.sLink = bt; s=root; k=0; for(i=0; i < Txt.length; i++) { var (s,k) = upDate(s, k, i); upDate / / desde el punto activo (s,k) = canonize(s, k, i); can } }// Ukkonen95

function upDate(s, k, i) { // (s, (k,i-1)) ref canonica del punto activo var oldr = root; var (endPoint, r) = test_and_split(s, k, i-1, Txt.charAt(i)); tas while (! endPoint) { r.addTransition(i, infinity, new State()); if (oldr != root) oldr.sLink = r; oldr = r; var (s, k) = canonize(s.s, k, i-1); can (endPoint, r) = test_and_split(s, k, i-1, Txt.charAt(i));tas } if (oldr != root) oldr.sLink = s; return new pair(s, k); } // update

21

function canonize(s, k, p) { if (p < k) return new pair (s,k); var ((k1,p1), s1) = s[Txt.charAt(k)]; while(p1-k1 _ p-k) { k += p1 - k1 + 1; s = s1; if (k _ p) ((k1,p1), s1) = s[Txt.charAt(k)]; } return new pair(s,k); }// canonize

function test and split(s, k, p, t) { if (k _ p) { var ((k1,p1),s1) = s.Txt.charAt(k)]; if (t == Txt.charAt(k1 + p - k + 1)) return new pair(true, s); else { var r = new State(); s.addTransition(k1, k1+p-k,r); r.addTransicion(k1+p-k+1, p1, s1); returm new pair(false, r); } } else return new pair(s[t] != null, s); }// test and split

22

Bibliografa
Algorithms on Strings, Trees, and Sequences Dan Gusfield University of California, Davis Cambridge University Press- Ao 1997 rboles: Estructuras Avanzadas M. Andrea Rodrguez- Tastets Universidad de Concepcin, Chile Ao 2008.Links: www.inf.udec.cl\ sandrea Estructuras de datos y anlisis de Algoritmos- Una Introduccin usando Java Jose Galaviz Casas Departamento de Matemticas . Facultad de Ciencias Universidad Nacional Autnoma de Mxico. Grupo de Estructura de Datos y Lingstica Computacional Departamento de Informtica y Sistemas de la Universidad de Las Palmas de Gran Canaria; Por Octavio Santana Surez, Octavio Mayor Gonzlez; Links: http://protos.dis.ulpgc.es/docencia/seminarios/rit On-Line construction ok suffix trees Esko Ukkonen Department Of computer Science University of Helsinki Suffix tree and suffix array techniques for pattern analysis in strings Esko Ukkonen Univ Helsink Erice School 30 Oct 2005 Links :http://www.cise.ufl.edu/~sahni/dsaaj/enrich/c16/suffix.htm#tree Links: http://homepage.usask.ca/~ctl271/857/suffix_tree.shtml Links: http://datacompression.info/SuffixTrees.shtml Links:http://www.benjarath.com/SIGMOD07.pdf Links: http://www.google.com Links: http://www.altavista.com Links: http://www.wikipedia.com

23

Links:http://espanol.babelfish.yahoo.com/translate_url? doit=done&tt=url&intl=1&fr=bfres&trurl=http%3A%2F%2Fhomepage.usask.ca %2F%7Ectl271%2F857%2Fsuffix_tree.shtml&lp=en_es Links: http://webdiis.unizar.es/asignaturas/TAP/material/ Links: http://webdiis.unizar.es/asignaturas/TAP/material/suffixtrees.pdf Links: http://www.dirinfo.unsl.edu.ar/~oaybd1/organizacion/teorias/OA-AASuf2008.pdf Links: http://es.wikipedia.org/wiki/%C3%81rbol_(estructura_de_datos) Links: http://en.wikipedia.org/wiki/Suffix_tree Links: http://en.wikipedia.org/wiki/Ukkonen's_algorithm Links:http://lambda.fciencias.unam.mx/~elisa/NotasDeCursos/Herramientas/cap 5Beamer.pdf Links: http://www.lsi.us.es/~troyano/documentos/arboles.pdf Links: http://marknelson.us/1996/08/01/suffix-trees/ Links: http://homepage.usask.ca/~ctl271/857/suffix_tree.shtml Links: http://www.cs.helsinki.fi/u/ukkonen/ Links: http://marknelson.us/1996/08/01/suffix-trees/

24