vielleicht ein mathematisches problem?

H

houtsch

hi leute...

ich bin schon seit ein paar tagen auf der suche nach einer lösung für einen besonderen algorithmus... da ich noch eher frisch in der programmierung bin... vielleicht könnt ihr mir ja weiterhelfen...

mein problem:
ich bin dabei ein kosten-optimierungs-tool für rohrleitungsnetzwerke zu programmieren... von der theorie her eigentlich ganz einfach... aber...

mein bsp... ich habe 4 rohrstränge (bis zu n-stränge möglich)... jeder rohrstrang kann einen minimalen bzw. maximalen durchmesser besitzen... und alle dazwischen... zu meinem besipiel... rohrstrang 1 - 4 möglichkeiten, rohrstrang 2 - 2 möglichkeiten, rohrstrang 3 - 2 möglichkeiten, rohrstrang 4 - 3 möglichkeiten --> das ergibt in summe 4*2*2*3=48 verschiedene kombinationen...

ich benötige nun einen algorithmus der mir diese 48 kombinationen (in meinem bsp)... oder bei n strängen m vesrchiedene kombinationen... in eine matrix schreibt... stränge zu kombinationen... (z.B. komb. 1: a/a/a/a, komb. 2: a/a/a/b ... usw.)

ich denke das ist rein mathematisch... aber ich kopfe schon die ganze zeit wie blöd...

wäre froh wenn mir jemand von euch auf die sprünge helfen könnte!

danke
 
Hallöchen,
bin aus deiner Fragestellung nicht ganz schlau geworden, aber versuch es mal:

Wenn ich das richtig sehe willst du einfach nur ne matrix, die n-viele Rohre miteinander kombiniert enthält?
Was der min. und max. Durchmesser damit zu tun hat weiß ich net, das wäre dann ein festes Attribut des einzelnen Rohrstranges und sogesehen irrelevant für die kombination...

Aber ich weiß auch nicht wie du bei einer Anzahl von 4 Rohsträngen auf 48 kombinationsmöglichkeiten kommst!!

Deine Kombinatonen sollen eine fixe Anzahl haben oder alle Möglichkeiten, weil wenn ja dann steigen deine Kombinationsmöglichkeiten exponentiell und die Matrix wird sehr schnell sehr unübersichtlich :D
Also nochmal eine klare Fragestellung ;)

Und viell. mal ein komplettes kleines Beispiel per Hand, inkl. matrix wie du dir das vorstellst^^

Grüsse
RuFF
 
Hi.

Normalerweise läßt sich sowas immer ganz gut rekursiv lösen.

D.h. heißt du fängst erstmal mit dem Trivialfall an; wenn nämlich die Zahl der Rohre 0 ist, dann gibts du eine leere Matrix zurück.

Sollte die Menge der Rohre 1 sein, dann ist das Ergebnis eine Matrix in der die versch. Größen des Rohres aufgelistet sind.

Sollte die Menge der Rohre größer 1 sein, dann berechnet sich die Matrix aus der Kombination aller Größen des ersten Rohren mit allen restlichen Kombinationen.

D.h. in Pseudocode:
Code:
matrix kombiniere (rohre) {
  if (rohre.empty)
    return [];
  else {
    // berechne erstmal die Matrix der Rohre ohne
    // das erste Rohr, also wenn Rohre n Elemente
    // hat (Rohr 1, Rohr 2, ... Rohr n), berechne 
    // erstmal alle Kombinationen der Rohre 2..n
    untermatrix = kombiniere (rohre[2:])

    // jetzt ist diese Unter-Matrix nur noch mit
    // dem Rohr Nr. 1 zu "erweitern"
    for (i in rohre[1]) {
      for (j in untermatrix) {
        result.append (i + j)
      }
    }
    return result
  }
}
 
Zurück