Como permutar un array?
Publicado por Daniel (7 intervenciones) el 06/12/2007 20:17:59
Hola.
Me gustaría hacer una algoritmo de backtracking que me permutase una serie de Strings.
El objetivo es meter los strings en una frase sin pasarse de una determinada longitud N y con las mismas letras que una frase de entrada F.
Os pongo el codigo que he hecho y no funciona. Os aviso que la recursividad no es lo mio, así que no seais muy crueles ;)
Frase fraseSolucion;
ArrayList<Frase> soluciones;
ArrayList<String> palabras;
public void resolverFrase(Frase F){
int k=0;
fraseSolucion = new Frase();
soluciones = new ArrayList<Frase>();
backtrack(F,k);
}
public void backtrack(Frase F, int k){
String auxiliar;
String auxiliar2;
String Auxiliar3;
if (k>=palabras.size()){
return;
} else{
if (F.consultarLongitudFrase() == fraseSolucion.consultarLongitudFrase()){
soluciones.add(fraseSolucion);
fraseSolucion = new Frase();
}//if
k++;
for (int i=0; i<palabras.size(); i++){
auxiliar = (String) palabras.get(i);
if (auxiliar + F = subconjuntoDeLetrasDe(F)){
fraseSolucion.añadirPalabra(auxiliar);
}//if
backtrack(F,k);
}//for
}//else
}//backtrack
Con este codigo, si le meto la frase Tea Tee (que son palabras, aunque no lo parezca), obtengo que el conjunto de strings a permutar es (eta, tea, tee, tate, teta), pero como frasesSolucion obtengo repetida varias veces: Eta Tee.
Si alguien fuese capaz de corregirme el codigo, o proporneme una alternativa no iterativa (es que ya la tengo hecha pero es tremendamente ineficiente) se lo agredería mucho.
Me gustaría hacer una algoritmo de backtracking que me permutase una serie de Strings.
El objetivo es meter los strings en una frase sin pasarse de una determinada longitud N y con las mismas letras que una frase de entrada F.
Os pongo el codigo que he hecho y no funciona. Os aviso que la recursividad no es lo mio, así que no seais muy crueles ;)
Frase fraseSolucion;
ArrayList<Frase> soluciones;
ArrayList<String> palabras;
public void resolverFrase(Frase F){
int k=0;
fraseSolucion = new Frase();
soluciones = new ArrayList<Frase>();
backtrack(F,k);
}
public void backtrack(Frase F, int k){
String auxiliar;
String auxiliar2;
String Auxiliar3;
if (k>=palabras.size()){
return;
} else{
if (F.consultarLongitudFrase() == fraseSolucion.consultarLongitudFrase()){
soluciones.add(fraseSolucion);
fraseSolucion = new Frase();
}//if
k++;
for (int i=0; i<palabras.size(); i++){
auxiliar = (String) palabras.get(i);
if (auxiliar + F = subconjuntoDeLetrasDe(F)){
fraseSolucion.añadirPalabra(auxiliar);
}//if
backtrack(F,k);
}//for
}//else
}//backtrack
Con este codigo, si le meto la frase Tea Tee (que son palabras, aunque no lo parezca), obtengo que el conjunto de strings a permutar es (eta, tea, tee, tate, teta), pero como frasesSolucion obtengo repetida varias veces: Eta Tee.
Si alguien fuese capaz de corregirme el codigo, o proporneme una alternativa no iterativa (es que ya la tengo hecha pero es tremendamente ineficiente) se lo agredería mucho.
Valora esta pregunta


0