PHP Erstellen einer Matrix mit allen möglichen Zahlenkombinationen

koffi

Lt. Junior Grade
Registriert
Jan. 2007
Beiträge
490
Hallo zusammen!

Ich zerbreche mir schon seit Stunden den Kopf mit einem Problem und ich fürchte, dass ich dem als Hobby-Programmierer nicht gewachsen bin.

Für ein Optimierungsvorhaben brauche ich eine Zahlenmatrix, bestehen aus allen möglichen Zahlenkombinationen, möglichst gespeichert in einem mehrdimensionalen Array.

Es sollen alle möglichen Kombinationen aus den Zahlen 1, 2 und 3 ausgegeben werden, jedoch aber in einer Array Länge von 4 Feldern, also:

1. 1 1 1 1
2. 1 1 1 2
2. 1 1 2 2
3. 1 2 2 2
4. 2 2 2 2
5. 2 2 2 3
...
n. 3 2 3 1
...
usw.

Das ganze sollten dann 3^4 Zeilen werden, also 81 verschiedene Kombinationen.
Das ganze soll später noch skalierbar werden, eigentlich habe ich eine komplexität von 3^11 vor.
Mir ist mittlerweile bewusst, dass es mit ein paar for-loops nicht getan ist und ich bin an dem Punkt bei dem ich glaube, dass rekursive Funktionen gebraucht werden.

Hat jemand sowas schon mal gemacht bzw hat da einen Ansatz mit dem ich weitermachen kann?
 
Wie wäre es, wenn du einfach eine repräsentation im tertiären Zahlenraum (anstelle binär) verwendest und einfach nur hoch zählst und das array befüllst?
 
  • Gefällt mir
Reaktionen: BeBur und up.whatever
1. PHP ist eine Sprache die für Numbercrunching recht ungeeignet ist. An der Stelle dürfte Java/C# deutlich schneller sein und C/C++

2. Muss es ein Speicher fressendes Array sein? Bei deiner Methode systematisch hoch zu zählen gibt es eine klare Abhänigkeit zwischen n. und den generierten Ziffern. Mach es wie @scooter010, jedoch immer nur, wenn es ein Zugriff auf Position n. des Arrays gibt.
 
  • Gefällt mir
Reaktionen: scooter010
Jap, das ist besser, das array garnicht speichern sondern einfach den Zeileninhalt Just in Time berechnen, abhängig von der Arrayzeile n.

Im Prinzip kannst du daraus eine Funktion mit 5 parametern bauen:
Basis (hier 3)
Spaltenanzahl
Arrayzeile, dessen Werte du willst
Pointer für Rückgabezeile
Allozierte Größe (um Überschreiben zu vermeiden)

Der Rückgabewert der Funktion ist denn ein int (Erfolg ider Fehler).

Und wenn du nun nicht 0,1,2 in den Feldern stehen haben willst sondern 1,2,3, dann addierst du zu jeder Zelle +1 und gut
 
Zuletzt bearbeitet:
Zurück
Oben