Alle möglichen Kombinationen


Snape

Erfahrenes Mitglied
#1
Moin,
ich steh grad auf der Leitung, hab aber auch nicht ganz den Kopf frei, länger darüber nachzudenken:

Wie kann ich mir alle möglichen Kombinationen eines Wortes oder einer Zahlenkombination ("73485784" oder auch "waldameise" o.ä.) ausgeben lassen, ohne dabei doppelte Ergebnisse geliefert zu bekommen?
 

vop

Erfahrenes Mitglied
#2
Hi

vielleicht hilft Dir dieser Thread (allerdings in PHP) etwas weiter
http://www.tutorials.de/tutorials221304.html

Da habe ich mal eine PHP-Lösung gepostet.

Wenn Du die in java umbastelst, anschließend die Einträge in eine sortierte Stringliste einfügst (und dabei doppelte Einträge überspringst), sollstest Du alles haben, oder?

Beachte aber: Es gibt eine ganze Menge Kombinationen.
Vielleicht ist bei längeren Wörtern statt der rekursiven besser eine iterative Lösung zu nehmen.

vop
 
#3
Hallo!
Code:
 package de.tutorials;
 
 public class Permutation {
 
 	static int anz = 0;
 	static int maxIndex;
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) {
 
 		String s = "123a";
 		maxIndex = s.length()-1;
 		permut(s.toCharArray(),maxIndex);
 		
 	}
 	
 	static void swap(char[] a, int i, int j) {
 		char temp = a[i];
 		a[i] = a[j];
 		a[j] = temp;
 	}
 	
 	static void permut(char[] a, int endIndex) {
 		if (endIndex==0){
 			print(a);
 			anz++;
 		}else{
 			permut(a, endIndex-1);
 			for (int i=0; i<=endIndex-1; i++){
 				swap(a, i, endIndex);
 				permut(a, endIndex-1);
 				swap(a, i, endIndex);
 			}
 		}
 	}
 	
 	static void print(char[] a) {
 		System.out.println(String.valueOf(a));
 	}
 }
gruß Tom
 

jimb0p

Erfahrenes Mitglied
#5
Wie würde man vorgehen wenn man eine feste Länge vorgibt, bspw. 5 und ein Zeichen häufiger vorkommen darf. Ich aber ein Alphabet vorgebe was größer ist als die Wortlänge. Nehmen wir an das Alphabet ist "A" "B" "C" "D" "E" "F":

AAAAA
AAAAB
AAAAC
...
FFFFF
 

zerix

Hausmeister
Moderator
#6
Hallo,

hier mal ein kleines Beispiel, wie man es machen könnte.

Java:
public class Example{

	public static void main(String args[]){

		String alphabet = "ABCDEF";
		int length = 5;
		int a[] = new int[length];
		String newString = "";

	

		for(int i = 0; i < Math.pow(alphabet.length(),length); i++){

			for(int j = 0; j < a.length; j++){
				newString += alphabet.charAt(a[j]);
			}
			System.out.println(newString);
			newString = "";
			int tmp = i;
			int counter = a.length-1;
			while(tmp != 0){
			
				a[counter] = tmp % alphabet.length();
				tmp /= alphabet.length();
				counter--;
			}

		}
	}
}
Viele Grüße

Sascha