Systematisch alle n-Tupel von (n über k) finden

30/07/2011 - 19:19 von Aladin1001 | Report spam
Hallo :)
Beispiel:
Es gibt 6 von 1 bis 6 nummerierte Kugeln, die aus einer Urne ohne
Zurücklegen, ohne Beachtung der Reihenfolge gezogen werden sollen. Und
zwar drei.

-> Anzahl der Möglichkeiten: (6 über 3) = 20.

Mein Problem: Wie finde ich jetzt alle diese 20 Tripel? Gibt es da ein
systematisches Verfahren?

Gruss,
Alexander
 

Lesen sie die antworten

#1 ram
30/07/2011 - 20:46 | Warnen spam
Aladin1001 writes:
Wie finde ich jetzt alle diese 20 Tripel?



Es sind keine »Tripel« im Sinne von »3-Tupel«, sondern
eher Mengen der Màchtigkeit 3 oder eben

»Kombinationen von 6 Dingen zur Klasse 3 ohne Wiederholung«
(»combinations of 6 things, taken 3 at a time«,
»3-combinations of 6 things«).

public class Main
{
public static void main( final java.lang.String[] args )
{ java.lang.Object[] hand = new java.lang.Object[]
{ "1", "2", "3", "4", "5", "6" };
for( java.lang.Object[] j : new Combinations( 3, hand ))
java.lang.System.out.println( java.util.Arrays.toString( j )); }}

class Combinations
implements
java.lang.Iterable<java.lang.Object[]>,
java.util.Iterator<java.lang.Object[]>
{ public final int zzSize;
public final java.lang.Object[] zzBase;
public final int zzLength;
public final int[] zzC;
public final java.lang.Object[] zzResult;
public boolean zzHasNext = true;
public Combinations
( final int size,
final java.lang.Object[] base )
{ this.zzSize = size;
assert this.zzSize >= 0;
this.zzBase = base;
this.zzLength = this.zzBase.length;
assert this.zzLength >= this.zzSize;
this.zzResult = new java.lang.Object[ this.zzSize ];
zzC = new int[ this.zzSize + 3 ];
{ int j;
for( j = 1; j <= this.zzSize; ++j )zzC[ j ]= j - 1;
zzC[ this.zzSize + 1 ]= this.zzLength;
zzC[ this.zzSize + 2 ]= 0; }
advance(); }
public final boolean hasNext(){ return this.zzHasNext; }
public void advance()
{ for( int i = 1; i <= this.zzSize; ++i )
this.zzResult[ i - 1 ]=this.zzBase[ this.zzC[ i ]]; }
public final java.lang.Object[] next()
{ advance();
if( this.zzHasNext )
{ int j;
{ for( j = 1; this.zzC[ j ]+ 1 == this.zzC[ j + 1 ]; ++j )
this.zzC[ j ]= j - 1; }
if( j > this.zzSize ){ this.zzHasNext = false; }
else{ this.zzC[ j ]= this.zzC[ j ]+ 1; }}
else { throw new java.util.NoSuchElementException(); }
return this.zzResult; }
public void remove()
{ throw new java.lang.UnsupportedOperationException(); }
public java.util.Iterator<java.lang.Object[]>
iterator(){ return this; }}

[1, 2, 3]
[1, 2, 4]
[1, 3, 4]
[2, 3, 4]
[1, 2, 5]
[1, 3, 5]
[2, 3, 5]
[1, 4, 5]
[2, 4, 5]
[3, 4, 5]
[1, 2, 6]
[1, 3, 6]
[2, 3, 6]
[1, 4, 6]
[2, 4, 6]
[3, 4, 6]
[1, 5, 6]
[2, 5, 6]
[3, 5, 6]
[4, 5, 6]

Ähnliche fragen