java - permutaciones - unicoos variaciones sin repeticion
Código de variaciones con repetición(combinatoria)? (4)
¿Alguien tiene código Java para generar todas las VARIACIONES CON REPETICIÓN?
Hay muchos ejemplos de permutación y combinación disponibles, y las variaciones deben ser las más fáciles ... Se siente estúpido perder el tiempo para reinventar la rueda (debe haber muchos códigos escritos para esto).
Un ejemplo de VARIACIONES CON REPETICIÓN podría ser así:
(tupletSize=3, input= A, B)
AAA, AAB, ABA, BAA, ABB, BAB, BBA, BBB
¡Gracias!
Esto funciona como está, y es más fácil para ti estudiar.
public class Main {
public static void main(String args[]) {
brute("AB", 3, new StringBuffer());
}
static void brute(String input, int depth, StringBuffer output) {
if (depth == 0) {
System.out.println(output);
} else {
for (int i = 0; i < input.length(); i++) {
output.append(input.charAt(i));
brute(input, depth - 1, output);
output.deleteCharAt(output.length() - 1);
}
}
}
}
Cómo escribir un cracker de contraseñas de fuerza bruta
Si bien esto no es una implementación de Java, la parte que realiza las permutaciones debería ser bastante fácil de portar en Java.
Lo porté a C sin conocimiento de Python, y funcionó a las mil maravillas.
public class Main {
public static void main(String[] args) throws IOException {
LinkedList<char[]> items = new LinkedList<char[]>();
char[] item = new char[3];
char[] input = {''A'', ''B''};
rep(items, input, item, 0);
for (char[] rep : items) {
System.out.println(rep);
}
}
private static void rep(LinkedList<char[]> reps, char[] input, char[] item, int count){
if (count < item.length){
for (int i = 0; i < input.length; i++) {
item[count] = input[i];
rep(reps, input, item, count+1);
}
}else{
reps.add(item.clone());
}
}
}
produce el siguiente resultado: AAA AAB ABA ABB BAA BAB BBA BBB
ten cuidado con los desbordamientos de pila con tupleSize grande. Los algoritmos recursivos (como este) suelen ser más lentos que las versiones iterativas, pero son muy útiles para codificar.
Puedes usar el principio del código Gray n-ary
http://en.wikipedia.org/wiki/Gray_code#Constructing_an_n-bit_Gray_code