El algoritmo de Ruzzo-Tompa o algoritmo RT [ 1 ] es un algoritmo de tiempo lineal para encontrar todas las subsecuencias contiguas, no superpuestas y de puntuación máxima en una secuencia de números reales. [ 2 ] El algoritmo de Ruzzo-Tompa fue propuesto por Walter L. Ruzzo y Martin Tompa. [ 3 ] Este algoritmo es una mejora con respecto a los algoritmos de tiempo cuadrático conocidos anteriormente. [ 1 ] La subsecuencia de puntuación máxima del conjunto producido por el algoritmo también es una solución al problema de la submatriz máxima .
El algoritmo Ruzzo-Tompa tiene aplicaciones en bioinformática , [ 4 ] web scraping , [ 5 ] y recuperación de información . [ 6 ]
Aplicaciones
Bioinformática
El algoritmo de Ruzzo-Tompa se ha utilizado en herramientas bioinformáticas para el estudio de datos biológicos. El problema de encontrar subsecuencias máximas disjuntas es de importancia práctica en el análisis del ADN . Los algoritmos de subsecuencias máximas se han utilizado en la identificación de segmentos transmembrana y la evaluación de la homología de secuencias . [ 4 ]
El algoritmo se utiliza en el alineamiento de secuencias , que se emplea como método para identificar secuencias de ADN , ARN o proteínas similares. [ 7 ] Considerar el orden de los pares de subsecuencias con alta puntuación en dos secuencias genera mejores alineamientos. Esto se debe a que el modelo biológico sugiere que los pares de subsecuencias con alta puntuación surgen de inserciones o deleciones dentro de una región coincidente. Exigir un ordenamiento consistente de los pares de subsecuencias con alta puntuación aumenta su significancia estadística. [ 4 ]
Extracción de datos web
El algoritmo Ruzzo-Tompa se utiliza en el web scraping para extraer información de páginas web. Pasternack y Roth propusieron un método para extraer bloques de texto importantes de documentos HTML. Las páginas web se tokenizan primero y se calcula la puntuación de cada token mediante clasificadores locales a nivel de token. [ 8 ] A continuación, se utiliza una versión modificada del algoritmo Ruzzo-Tompa para encontrar las k subsecuencias de tokens con mayor valor. Estas subsecuencias se utilizan posteriormente como predicciones de bloques de texto importantes en el artículo. [ 5 ]
Recuperación de información
El algoritmo de Ruzzo-Tompa se ha utilizado en algoritmos de búsqueda para la recuperación de información . Liang et al. propusieron un método de fusión de datos para combinar los resultados de búsqueda de varios algoritmos de búsqueda de microblogs. En su método, el algoritmo de Ruzzo-Tompa se utiliza para detectar picos de información. [ 6 ]
Definición del problema
El problema de encontrar todas las subsecuencias máximas se define de la siguiente manera: Dada una lista de puntuaciones numéricas reales, encuentra la lista de subsecuencias contiguas que da la mayor puntuación total, donde la puntuación de cada subsecuencia. Las subsecuencias deben ser disjuntas (no superpuestas) y tener una puntuación positiva. [ 9 ]
Otros algoritmos
Existen varios enfoques para resolver el problema de todas las subsecuencias de puntuación máxima. Un enfoque natural es utilizar algoritmos existentes de tiempo lineal para encontrar la subsecuencia máxima (véase el problema de la submatriz máxima ) y luego encontrar recursivamente las subsecuencias máximas a la izquierda y a la derecha de la subsecuencia máxima. El análisis de este algoritmo es similar al de Quicksort : la subsecuencia máxima podría ser pequeña en comparación con el resto de la secuencia, lo que lleva a un tiempo de ejecución deen el peor de los casos.
Algoritmo
La implementación estándar del algoritmo Ruzzo-Tompa se ejecuta enEl algoritmo requiere tiempo y espacio O ( n ), donde n es la longitud de la lista de puntuaciones. Utiliza programación dinámica para construir progresivamente la solución final resolviendo incrementalmente subconjuntos cada vez mayores del problema. La descripción del algoritmo proporcionada por Ruzzo y Tompa es la siguiente:
- Lee las puntuaciones de izquierda a derecha y mantén la suma acumulada de las puntuaciones leídas. Mantén una lista ordenada.de subsecuencias disjuntas. Para cada subsecuencia, registrar el total acumuladode todas las puntuaciones hasta pero sin incluir la puntuación más a la izquierda dey el totalhasta e incluyendo la puntuación más a la derecha de.
- Las listas están inicialmente vacías. Las puntuaciones se leen de izquierda a derecha y se procesan de la siguiente manera. Las puntuaciones no positivas no requieren procesamiento especial, por lo que se lee la siguiente puntuación. Una puntuación positiva se incorpora a una nueva subsecuencia.de longitud uno que luego se integra en la lista mediante el siguiente proceso:
- La listase busca de derecha a izquierda el valor máximo desatisfactorio
- Si no existe tal cosa, luego añadehasta el final de la lista.
- Si existe tal cosa, y, luego añadehasta el final de la lista.
- De lo contrario (es decir, existe tal aj, pero), extender la subsecuenciaa la izquierda para abarcar todo hasta la puntuación más a la izquierda inclusive en. Eliminar subsecuenciasde la lista y agregarhasta el final de la lista. Reconsidere la subsecuencia recientemente extendida.(ahora renumerado)) como en el paso 1.
- Una vez que se llega al final de la entrada, todas las subsecuencias que quedan en la listason máximos. [ 2 ]
El siguiente código Python implementa el algoritmo de Ruzzo-Tompa:
def ruzzo_tompa ( puntuaciones ):"""Algoritmo de Ruzzo-Tompa."""k = 0total = 0# Asignación de matrices de tamaño nI , L , R , Lidx = [[ 0 ] * len ( puntuaciones ) para _ en rango ( 4 )]para i , s en enumerate ( puntuaciones ):total += ssi s > 0 :# Almacenar I[k] por índices (inicio, fin) de puntuacionesI [ k ] = ( i , i + 1 )Lidx [ k ] = iL [ k ] = total - sR [ k ] = totalmientras sea verdadero :maxj = Ningunopara j en rango ( k - 1 , - 1 , - 1 ):si L [ j ] < L [ k ]:maxj = jromperSi maxj no es None y R [ maxj ] < R [ k ]:I [ maxj ] = ( Lidx [ maxj ], i + 1 )R [ maxj ] = totalk = maxjdemás :k += 1romper# Obtención de subsecuencias máximas utilizando índices almacenadosdevolver [ puntuaciones [ I [ l ][ 0 ] : I [ l ][ 1 ]] para l en rango ( k )]Véase también
Referencias
- 1 2 3 Spouge, John L.; Ramírez, Leonardo Mariño; Sheetlin, Sergey L. (2014). "Búsqueda de repeticiones, como ejemplo del uso del algoritmo generalizado de Ruzzo-Tompa para encontrar subsecuencias óptimas con huecos" . International Journal of Bioinformatics Research and Applications . 10 (4/5): 384– 408. doi : 10.1504/IJBRA.2014.062991 . ISSN 1744-5485 . PMC 4135518. PMID 24989859 .
- 1 2 Ruzzo, Walter L.; Martin, Tompa (1999). "Un algoritmo de tiempo lineal para encontrar todas las subsecuencias de puntuación máxima" . Actas de la Conferencia Internacional sobre Sistemas Inteligentes para la Biología Molecular : 234–241 . ISBN 9781577350835. PMID 10786306 .
- ↑ "Un algoritmo de tiempo lineal para encontrar todas las subsecuencias de puntuación máxima" (PDF) .
- 1 2 3 Karlin, S; Altschul, SF (15 de junio de 1993). "Aplicaciones y estadísticas para múltiples segmentos de alta puntuación en secuencias moleculares" . Actas de la Academia Nacional de Ciencias de los Estados Unidos de América . 90 (12): 5873– 5877. Bibcode : 1993PNAS...90.5873K . doi : 10.1073/pnas.90.12.5873 . PMC 46825. PMID 8390686 .
- 1 2 Pasternack, Jeff; Roth, Dan (2009). "Extracción de texto de artículos de la web con segmentación de subsecuencias máxima". Actas de la 18.ª conferencia internacional sobre la World Wide Web . págs. 971–980 . doi : 10.1145/1526709.1526840 . ISBN 9781605584874. S2CID 346124 .
- ^ Liang , Shangsong; Ren, Zhaochun; Weerkamp, Wouter; Meij, Edgar; de Rijke, Martín (2014). "Agregación de rangos en función del tiempo para búsqueda de microblogs". Actas de la 23ª Conferencia Internacional ACM sobre Gestión de la Información y el Conocimiento . págs. 989–998 . CiteSeerX 10.1.1.681.6828 . doi : 10.1145/2661829.2661905 . ISBN 9781450325981. S2CID 14287901 .
- ↑ Spouge, John L.; Mariño-Ramírez, Leonardo; Sheetlin, Sergey L. (2012). "El algoritmo de Ruzzo-Tompa puede encontrar los caminos máximos en grafos dirigidos ponderados en una red unidimensional". 2012 IEEE 2nd International Conference on Computational Advances in Bio and medical Sciences (ICCABS) . pp. 1–6 . doi : 10.1109/ICCABS.2012.6182645 . ISBN 978-1-4673-1321-6. S2CID 14584619 .
- ↑ "Web Scraping: Todo lo que necesitas saber" . Datamam . 30 de julio de 2021. Consultado el 16 de febrero de 2023 .
- ↑ Spouge, John L.; Mariño-Ramírez, Leonardo; Sheetlin, Sergey L. (2012). "El algoritmo de Ruzzo-Tompa puede encontrar los caminos máximos en grafos dirigidos ponderados en una red unidimensional". 2012 IEEE 2nd International Conference on Computational Advances in Bio and medical Sciences (ICCABS) . pp. 1–6 . doi : 10.1109/ICCABS.2012.6182645 . ISBN 978-1-4673-1321-6. S2CID 14584619 .
Lecturas adicionales
- Ali, Syed Arslan; Raza, Basit; Malik, Ahmad Kamran; Shahid, Ahmad Raza; Faheem, Muhammad; Alquhayz, Hani; Kumar, Yogan Jaya (2020). "Un enfoque de red neuronal profunda (OCI-DBN) optimizado y mejorado para la predicción de enfermedades cardíacas basado en el algoritmo genético apilado de Ruzzo-Tompa" . Acceso IEEE . 8. Instituto de Ingenieros Eléctricos y Electrónicos (IEEE): 65947–65958 . Bibcode : 2020IEEEA...865947A . doi : 10.1109/access.2020.2985646 . ISSN 2169-3536 . S2CID 215817246 .
- Algoritmos y métodos de optimización
- Programación dinámica