Hallo zusammen,
ich habe folgende Problemstellung:
Vektor mit n Einträgen, wobei n > 2 mit z. B. folgender Syntax:
1, 0, 0, 0 oder 2, 0, 0, 0 oder 1, 1, 0, 0 oder 2, 1, 0, 0 oder 2, 2, 0, 0
d. h. der Vektor (hier 4 Stellen lang) beinhaltet immer nur am Anfang einen Eintrag ungleich 0 und dieser ist entweder 1 oder 2. Die oberen 5 Möglichkeiten wären, wenn jeweils max. 2 Stellen des Vektors belegt werden würden, es könnten aber auch mehr sein, z. B. 3 Stellen, dann würden dementsprechend folgende Möglichkeiten hinzukommen:
1, 1, 1, 0 und 2, 1, 1, 0 und 2, 2, 1, 0 und 2, 2, 2, 0
Im Prinzip könnten auch 4 der 4 Stellen belegt sein. Die o. g. Vektoren werden bereits automatisch durch meinen Programmcode erstellt. Jedoch müssen diese Vektoren noch permutiert werden, sodass ich alle tatsächlichen Möglichkeiten (keine 0 mit einer 0 getauscht oder eine 1 mit einer 1 usw.) erhalte. Das mache ich aktuell noch mit dem Code, den Norbi am 2.7.2002 um 17 Uhr gepostet hat: http://www.herber.de/forum/archiv/132to136/133059_Permutationen.html
Jedoch ruft dieser Code sich selbst auf, was die Rechenzeit extrem in die Höhe treibt und es werden Wiederholungen permutiert, sprich der o. g. Vektor ergibt 4! = 24 Möglichkeiten. Nun kommt es beispielsweise auch vor, dass der Vektor 8 Einträge lang ist und 4 davon mit den Zahlen 1 und 2 besetzt werden sollen, was extrem viele Berechnungen zur Folge hat. Solche Fälle habe ich aktuell in meinem Programmcode aufgrund der Rechenzeit noch gesperrt, benötige sie aber.
Nun wollte ich fragen ob jmd einen effizienteren Programmcode für die Permutation kennt? Am besten natürlich einen, der mir nur die tatsächlich unterschiedlichen Kombinationen berechnet und nicht aus dem Vektor 1, 1, 0, 0 noch zusätzlich den Vektor 1, 1, 0, 0 permutiert, da er die 1 mit der 1 tauscht oder die 0 mit der 0...
Vielen Dank bereits im Voraus für Eure Hilfe!
LG Daniel
|