Mi cadena es de tipo "abacsdsdvvsg"
o "a a a a a a a"
Y uso String[] stringArray = s.split("");
o String[] stringArray = s.split(" ");
me pregunto cuál sería la complejidad (en O(string length)
) para la división anterior.
PD: Sé cómo calcular O (...) si se da el código. Aquí no conozco el algoritmo de la función dividida.
8
Respuestas:
La complejidad dependerá de la expresión regular que use para dividir. (Sí, el argumento que proporciona a String.split (...) es una expresión regular!)
Para su ejemplo, será
O(N)
dondeN
está el número de caracteres en la Cadena de entrada.El algoritmo de división es bastante sencillo, basado en una implementación de expresiones regulares existente. Una descripción de alto nivel es:
Matcher.find(...)
para encontrar el límite de la siguiente palabraLa búsqueda de los descansos entre "palabras" será
O(N)
o más compleja, dependiendo de la expresión regular (lafind
llamada). La construcción de la lista, matriz de resultados y subcadenas seráO(N)
en el peor de los casos.Los detalles precisos se encuentran en el código fuente, que puede encontrar con Google. (Busque
"java.lang.String" source
, elija uno y luego busque la versión de Java que le interesa. O busque los archivos en el archivo ZIP de código fuente incluido en su instalación de JDK)fuente
Es O (n) en sus casos particulares, donde está dividiendo por separadores de longitud de caracteres 1/0. En general, se puede implementar O (n + k) con un separador de caracteres k utilizando el algoritmo KMP. La división de cadenas de Java también acepta expresiones regulares como separadores, en cuyo caso su complejidad depende del algoritmo de coincidencia utilizado. Un algoritmo común de coincidencia de expresiones regulares es el algoritmo Thompson NFA.
fuente