Anagramas

0 respostas
R

ai galera tudo bom?

acho que esta é meio cabeluda mas vamo la.

estou tentando escrever um codigo que me de todos os anagramas de uma palavra.

por exemplo:

roma -> amor ->omar ->maro e assim até encontrar todas. a palavra não precisa existir.

consegui arranjar um algoritm que resolve o problema. a questão é que ele funciona muito bem com palavras de 4 ou 5 letras mas assima disso fica extremamente lento.

queria saber se vcs conseguem me dar um help. o codigo é esse ai.
public class Anagrama {
  private String palavrAnagrama, anagramaFinal="";
  private int tamanho = 0;
 
  public Anagrama() {
  }
 
  public int factorial(int n) {
    int fact = 1;//não pode começar em zero
    for (int h = 1; h <= n; h++) {
      fact = fact * h;
    }
    return fact;
  }
 
  public String criarAngrama(String palavra) {
    palavrAnagrama = palavra;
    tamanho = palavrAnagrama.length();
    for (int k = factorial(tamanho); --k > 0; ) {
      getSwaps(k, tamanho);
    }
    return anagramaFinal;
  }
 
  public void doSwaps(int[] x, int n) {
    int i1, i2;
    char[] plain;
 
    plain = palavrAnagrama.toCharArray();
    for (int j = n - 1; j >= 1; j--) {
      i1 = j;
      i2 = x[j];
      if ( (i1 < n) && (i1 >= 0) && (i2 < n) && (i2 >= 0)) {
        char temp = plain[i1];
        plain[i1] = plain[i2];
        plain[i2] = temp;
      }
    }
    //convert back to string
    StringBuffer plaintext = new StringBuffer("");
    for (int j = 0; j < plain.length; j++) {
      plaintext.append(plain[j]);
    }
    anagramaFinal=anagramaFinal+","+plaintext.toString();
  }
  public void getSwaps(int k, int n) {
    int[] x = new int[n], y = new int[n];
    int r = n - 1;
    int factorialDer = factorial(r);
    x[r] = k / factorialDer;
    y[r] = k % factorialDer;
    r--;
    while (r >= 1) {
      factorialDer = factorial(r);
      x[r] = y[r + 1] / factorialDer;
      y[r] = y[r + 1] % factorialDer;
      r--;
    }
    doSwaps(x, n);
  }
}

desde ja obrigado.

Criado 11 de junho de 2005
Respostas 0
Participantes 1