Olá pessoal, eu tenho um código que eu fiz que gera palavras, e até frases porém como ele trabalha por análise combinatória existe o problema de ser extremamente sequencial, e conforme o tamanho da palvra vai aumentando, ou a quantidade de letras presente no alfabeto que ele irá trabalhar também aumenta eu tenho um problema de desempenho… Se alguém tiver alguma idéia de como eu posso fazer para melhorar esse código deixar ele mais rápido, ou paralelizar ele com threads para pelo menos melhorar o desempenho em processadores mais modernos, seria de grande ajuda.
o meu código é:
String[] alfabeto = ("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","x","z","w","y"," ");
/**
* Função montaPalavra, recebendo como parametro a palavra inicial, o nivel
* atual de recursividade e o tamanho maximo da palavra, como o algoritmo é recursivo é
* necessário esse parâmetro para controlar os níveis de recursividade do mesmo.
*
* saida esperada para uma palavra de 3 letras e alfabeto ABC:
* A | AA | AAA | AAB | AAC | AB | ABA | ABB | ABC | AC | ACA | ACB | ACC |
* B | BA | BAA | BAB | BAC | BB | BBA | BBB | BBC | BC | BCA | BCB | BCC |
* C | CA | CAA | CAB | CAC | CB | CBA | CBB | CBC | CC | CCA | CCB | CCC |
*
* Esse algoritmo não previne palavras iguais, caso durante o funcionamento ele gere mais de uma
* vez palavras como "BANANA" essa palavra será listada mais de uma vez.
*
* @param Palavra - a palavra que deverá ser passada para formar as proxiams combinações. O valor
* inicial dessa variavel deverá ser sempre obrigatoriamente "".
* @param nivelRec - Controle de nivel de recursividade, para que só sejam criadas palavras até
* quando o tamanho for o tamanho definido, para esse valor quando for incrementado não se pode
* usar nivelRec++ pois não estou trabalhando com incremento,a penas com parâmetro. O valor inicial
* dessa variavel deverá ser sempre obrigatoriamente 0.
* @param qtdLetras - tamanho em letras máximo das palavras gerada.
*/
private void montaPalavra(String palavra, int nivelRec, int qtdLetras)
{
for(String letra: alfabeto)
{
nivelRec == 0 ? palavra = letra : palavra += letra;
System.Out.println(palavra);
nivelRec <= qtdLetras ? montaPalavra(palavra, nivelRec + 1, qtdLetras) : return;
}
}