Tengo dos cuerdas muy grandes y estoy tratando de averiguar su Longest Common Substring.¿Cómo acelerar el cálculo de la longitud de la subcadena común más larga?
Una forma es utilizar sufijo árboles (se supone que tienen una muy buena complejidad, aunque una aplicación compleja), y el otro es el método de programación dinámica (ambos son mencionados en la página de Wikipedia vinculado anteriormente).
El uso de programación dinámica
El problema es que el método de programación dinámica tiene un enorme tiempo de ejecución (complejidad es O(n*m)
, donde n
y m
son longitudes de las dos cadenas).
Lo que quiero saber (antes de saltar para implementar árboles de sufijos): ¿Es posible acelerar el algoritmo si solo quiero saber la longitud de la subcadena común (y no la subcadena común en sí)?
@Billy ONeal: ¿está comparando el árbol de sufijos y la programación dinámica? No estoy pidiendo eso."Lo que tengo que saber es si hay alguna manera de acelerar el algoritmo de programación dinámica si solo quiero saber la longitud de la subcadena común?" – Lazer
@eSKay: Creo que la primera parte de mi respuesta responde esa pregunta. –
bien, * ¿cómo puedo hacerlo más rápido en la práctica? – Lazer