array alle möglichen Reihenfolgen

Status
Nicht offen für weitere Antworten.

cybernewb

Neues Mitglied
hi ich möchte gern ein programm implementieren, welches von einem array, wie zum Beispiel:
A,B,C,D,E,F alle möglichen Kombinationen ausgibt, dabei dürfen aber nur die Buchstaben ausgetauscht werden also zum Beispiel B,A,C,D,E,F oder F,D,E,A,C,B; und soetwas wie A,A,A,B,D,F soll nicht vorkommen. Ich komme leider einfach nicht auf die passende Idee um dies zu implementieren.

ich weiss das es je nach länge des arrays, n! verschiedene kombinationen gibt und das ist auch ok.
Und es ist auch ok wenn ich n Schleifen ineinander setzen müsste.

Nur eines würde nicht gehen, nämlich alles durchlaufen und faule ergebnisse aussortieren denn dass würde n^n Kombinationen ergeben, was zu lange dauern würde.

Das ist übrigens keine Hausaufgabe, sondern dient dazu ein brute force Programm zu erstellen.



Hoffe ihr könnt mir helfen mir fehlt einfach die passende Idee.
 

hdi

Top Contributor
edit: Oh man du willst ja nicht sowas wie A,A, usw :roll:

Dir ist aber schon klar dass das dann kein Brute Force Algorithmus ist, und demnach auch
zu einer recht grossen Wahrscheinlichkeit den Code niemals knacken wird?
 

0x7F800000

Top Contributor
Code:
import java.util.*;

...

public static <X> List<List<X>> getAllPermutations(List<X> sequence){
		return getAllPermutationsRecursion(sequence, new boolean[sequence.size()], sequence.size());
	}
	
	public static <X> List<List<X>> getAllPermutationsRecursion(List<X> sequence, boolean[] used, int available){
		
		List<List<X>> result=new LinkedList<List<X>>();
		
		if(available!=0){
			int usedIndex=0;
			for(Iterator<X> i=sequence.iterator(); i.hasNext(); usedIndex++){
				X currentElement=i.next();
				if(used[usedIndex]){
					continue;
				}else{
					used[usedIndex]=true;
					for(List<X> permutation:getAllPermutationsRecursion(sequence,used,available-1)){
						permutation.add(currentElement);
						result.add(permutation);
					}
					used[usedIndex]=false;
				}
			}
		}else{
			result.add(new LinkedList<X>());
		}
		return result;
	}


//kleiner test
public static void main(String... _){
		List<String> l=new LinkedList<String>();
		for(char c='A'; c<'F'; c++) l.add(String.valueOf(c));
		System.out.println(getAllPermutations(l));
	}
Funktioniert allerdings nicht für arrays, sondern für listen.
Aber das ist jetzt eher vom rein theoretischen interesse, für bruteforce ist das wenig geeignet. Müsstest du selbst für arrays umschreiben. Vielleicht mach ich's auch noch irgendwann später mal...
 

cybernewb

Neues Mitglied
Es geht nicht darum ein Passwort zu knacken, sonst hätte ich keine Probleme einen normalen brute force zu erstellen, nur das Problem ist, dass wenn ich ca. 10 verschiedene Zeichen umsortiere mit nem n! schnellen Verfahren schneller bin als mit dem n^n Verfahren.
 

0x7F800000

Top Contributor
shit... 10*10! Listen passen schon nicht mehr in den speicher :(
Ich überleg mir mal, wie man irgendein Iterable basteln kann, das zwar alle permutationen ausgibt, aber diese nicht abspeichert. Momentan habe ich keine ideen ???:L
 

Marco13

Top Contributor
Jo geht - man kann eine Bijektion ( :D ) zwischen der Nummer der Permutation und der Permutation selbst aufbauen. Wenn man das nachvollziehen würde (was ich NICHT getan habe) könnte man es ggf. noch effizienter oder schöner machen, aber so hab' ich jetzt einfach mal die Methode von http://en.wikipedia.org/wiki/Permutation#Lexicographical_order_generation in ein Iterable gepackt:
Code:
import java.util.*;

class PermutationIterable<T> implements Iterable<T[]>
{

    public static void main(String args[])
    {
        String input[] = new String[]{"A","B","C","D"};
        PermutationIterable<String> pi = new PermutationIterable<String>(input);
        for (String s[] : pi)
        {
            System.out.println(Arrays.toString(s));
        }
    }

    private T input[];
    private int numPermutations = 0;

    public PermutationIterable(T input[])
    {
        this.input = input.clone();
        numPermutations = factorial(input.length);
    }

    private static int factorial(int n)
    {
        int f = 1;
        for (int i = 2; i <= n; i++)
        {
            f *= i;
        }
        return f;
    }

    public Iterator<T[]> iterator()
    {
        return new Iterator<T[]>()
        {
            int current = 0;

            public boolean hasNext()
            {
                return current < numPermutations;
            }

            // Adapted from [url]http://en.wikipedia.org/wiki/Permutation#Lexicographical_order_generation[/url]
            public T[] next()
            {
                T result[] = input.clone();
                int factorial = numPermutations / input.length;
                for(int i = 0; i < result.length - 1; i++)
                {
                    int tempIndex = (current / factorial) % (result.length - i);
                    T temp = result[i + tempIndex];
                    for(int j = i + tempIndex; j > i; j--)
                    {
                        result[j] = result[j-1];
                    }
                    result[i] = temp;
                    factorial /= (result.length - (i + 1));
                }
                current++;
                return result;
            }

            public void remove()
            {
                throw new UnsupportedOperationException("Forget it");
            }
        };
    }

}
 

0x7F800000

Top Contributor
:toll: genau sowas hab ich gemeint. Den code hab ich mir nicht genau angeguggt, aber das ist jetzt genau die idee. Von solchen iterables sollte ich mal öfters gebrauch machen.

Etwa für die Potenzmenge damals... Da wäre so eine Vorgehensweise echt angebrachter. Damit wäre deine Methode nochmal einen Tick sinnvoller :applaus:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Alle möglichen Kombinationen in einem Array ausgeben Java Basics - Anfänger-Themen 2
K Array alle Werte aufsummieren und ausgeben Java Basics - Anfänger-Themen 6
D Alle Möglichkeiten, n-Anzahl aus Elementen aus einem Array zu wählen, ausgeben? Java Basics - Anfänger-Themen 23
M prüfen ob alle array werte gleich sind Java Basics - Anfänger-Themen 27
S Problem: Array alle Einträge gleich Java Basics - Anfänger-Themen 10
M Klassen Auf Alle Array Methoden gleichzeitig zugreifen Java Basics - Anfänger-Themen 8
B Frage zur Effizienz - alle Array-Felder initialisieren oder jedes Feld auf null prüfen? Java Basics - Anfänger-Themen 4
J Alle Vorkommen eines chars in einem Array durch einen anderen char ersetzen Java Basics - Anfänger-Themen 10
2 Alle Werte die mit n Würfeln mit m Seiten geworfen werden können in ein n Dimensionales Array Java Basics - Anfänger-Themen 15
H Alle Array-Elemente auf einmal überprüfen? Java Basics - Anfänger-Themen 10
S Alle Datentypen in byte Array und zurückwandeln Java Basics - Anfänger-Themen 2
O String in array einlesen alle x zeichen Java Basics - Anfänger-Themen 15
H text string alle 100 zeichen in ein 1D array einlesen ? Java Basics - Anfänger-Themen 8
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
L Frage zum Array Java Basics - Anfänger-Themen 1
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
P Array vom Typ Klasse Java Basics - Anfänger-Themen 18
Lion.King Array deklarieren und initialisieren Java Basics - Anfänger-Themen 5
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
AkiJou Zeile in 2d Array löschen Java Basics - Anfänger-Themen 2
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
A Elemente in einem Array Java Basics - Anfänger-Themen 5
A Vorkommende Farben ermittel und als Array zurückgeben Java Basics - Anfänger-Themen 7
AhmadSlack Array Java Basics - Anfänger-Themen 7
Jambolo Kartenhand Array Java Basics - Anfänger-Themen 14
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben