Supongamos que se nos da una colección de cadenas, . Me gustaría saber si alguna de esas cadenas es una subcadena de cualquier otra cadena de la colección. En otras palabras, me gustaría un algoritmo para la siguiente tarea:S 1 , ... , S n
Entrada:
Salida: tal que es una subcadena de y , o Ninguno si hay tal existenS i S j i ≠ j i , j
¿Existe un algoritmo eficiente para esto?
Si reemplazamos "subcadena" por "prefijo", hay un algoritmo eficiente (clasifique las cadenas, luego realice un escaneo lineal para comparar cadenas adyacentes; la clasificación asegurará que las subcadenas sean adyacentes). Pero parece más difícil probar si alguna cadena es una subcadena de cualquier otra cadena. Un algoritmo ingenuo es iterar sobre todos los pares , pero esto requiere pruebas de subcadena . ¿Hay un algoritmo más eficiente?Θ ( n 2 )
Supongo que podríamos llamar a esto "prueba de subcadena de todos los pares", o algo así.
Mi objetivo final es podar la colección para que ninguna cadena sea una subcadena de ninguna otra, eliminando cada una que sea una subcadena de otra cosa en la colección.