Ma chaîne est de type "abacsdsdvvsg"
Ou "a a a a a a a"
Et j'utilise String[] stringArray = s.split("");
ou String[] stringArray = s.split(" ");
Je me demande quelle serait la complexité (dans O(string length)
) pour le fractionnement ci-dessus?
PS: Je sais calculer O(...) si le code est donné. Ici je ne connais pas l'algorithme de la fonction split.
La complexité dépendra de l'expression rationnelle que vous utilisez pour effectuer le fractionnement. (Oui, l'argument que vous fournissez à String.split (...) est une expression régulière!)
Pour votre exemple, ce sera O(N)
où N
est le nombre de caractères dans la chaîne d'entrée.
L'algorithme de fractionnement est assez simple, basé sur une implémentation regex existante. Une description de haut niveau est:
Matcher.find(...)
pour trouver la prochaine limite de WordLa recherche des coupures entre les "mots" sera O(N)
ou plus complexe, selon l'expression régulière (l'appel find
). La construction de la liste, du tableau de résultats et des sous-chaînes sera O(N)
dans le pire des cas.
Les détails précis sont dans le code source, que vous pouvez trouver en utilisant Google. (Rechercher "Java.lang.String" source
, choisissez-en un, puis accédez à la version de Java qui vous intéresse. Ou recherchez les fichiers dans le fichier Zip de code source inclus dans votre installation JDK)
Son O(n) dans vos cas particuliers, où vous divisez par des séparateurs de longueur de 1/0 caractère. En général, c'est O (n + k) avec un séparateur de k caractères, peut être implémenté en utilisant l'algorithme KMP. Java string split accepte également les regexes comme séparateurs, auquel cas sa complexité dépend de l'algorithme de correspondance utilisé. Un algorithme de correspondance de regex commun est l'algorithme Thompson NFA.