Minha string é do tipo "abacsdsdvvsg"
ou "a a a a a a a"
E eu uso String[] stringArray = s.split("");
ou String[] stringArray = s.split(" ");
estou me perguntando qual seria a complexidade (in O(string length)
) para a divisão acima?
PS: Eu sei calcular O (...) se o código for fornecido. Aqui não conheço o algoritmo da função de divisão.
8
Respostas:
A complexidade dependerá do regex que você usa para fazer a divisão. (Sim, o argumento que você fornece para String.split (...) é um regex!)
Para o seu exemplo, será
O(N)
ondeN
está o número de caracteres na String de entrada.O algoritmo de divisão é bastante simples, com base em uma implementação de regex existente. Uma descrição de alto nível é:
Matcher.find(...)
para encontrar o próximo limite de palavrasA busca pelas quebras entre "palavras" será
O(N)
ou mais complexa, dependendo da regex (afind
chamada). A construção da lista, matriz de resultados e substrings seráO(N)
no pior caso.Os detalhes precisos estão no código-fonte, que você pode encontrar usando o Google. (Procure
"java.lang.String" source
, escolha um e, em seguida, faça um drill down para a versão do Java em que você está interessado. Ou pesquise os arquivos no arquivo ZIP do código-fonte incluído na instalação do JDK)fonte
É O (n) em seus casos específicos, onde você está dividindo por separadores de 1/0 caracteres. Em geral, é O (n + k) com um separador de caracteres k, pode ser implementado usando o algoritmo KMP. A divisão de cadeia de caracteres Java também aceita regexes como separadores; nesse caso, sua complexidade depende do algoritmo de correspondência que está sendo usado. Um algoritmo comum de correspondência de expressões regulares é o algoritmo Thompson NFA.
fonte