Wie alle erlaubten Permutationen/Kombinationen ermitteln?

BurnInHell

Newbie
Registriert
Apr. 2007
Beiträge
1
Hallo!
Ich habe folgendes Problem: Ich habe eine Matrix mit allen Werten von Parametern, von denen einige inkompatibel sind und brauche eine Liste von kompatiblen Permutationen. Hier ein Beispiel:

--------|-----0°----30°--|--sonne----regen--|-asphalt
0°------------F------F-------F--------T--------T
30°-----------F------F-------T--------T--------T
-------------------------------------------------
sonne---------F------T-------F--------F--------T
regen---------T------T-------F--------F--------T
---------------------------------------------------
asphalt-------T------T-------T--------T--------F

Es gibt hier drei Parameter (Temperatur,Wetter und Boden), mit jeweils 1 bis 2 Werten. Nun ist etwa die Sonne nicht mit 0° kompatibel, deswegen dort das F(=false). Asphalt zB ist mit allem kompatibel (deswegen T=true) ausser mit sich selbst. Parameter sind mit sich selbst nicht kompatibel.

Es gibt hier 3 gültige Permutationen (Reihenfolge ist egal):
0°-regen-asphalt
30°-sonne-asphalt
30°-regen-asphalt

Ich grüble schon lange, komm aber auf kein Ergebnis ausser:
1)alle Permutationen durchgehen, O(x^2)
2)dabei jeden Parameter durchgehen, O(x^3)
3)und schauen, ob keiner der Werte dazu inkompatibel ist. O(x^4)

Dies scheint mir sehr aufwändig und ineffizient. Geht das besser?
 
Das ist doch eine winzige Matrix und die Variablen sind alle boolesch, da würde ich mir gar keine Gedanken machen sondern einfach alle Permutationen durchgehen.

Eine (kleine) Optimierung wäre bei einem etwas größeren Problem schon, zuerst alle gültigen Kombinationen zu ermitteln und dann alle Permutationen der gültigen Kombinationen auszugeben. Dann spart man sich das erzeugen aller Permutationen, die aus ungültigen Kombinationen bestehen.

Parameter die zu allem kompatibel sind (ausser zu sich selbst) kann man vorher eliminieren und dann bei der Erzeutung der Permutationen wieder berücksichtigen.

Man könnte das auch in eine Datenbank laden und die gültigen Kombinationen per Abfrage ermitteln, dann übernimmt die Datenbankengine die Optimierung für dich :) Auch hier müssen dann wieder nur die Permutationen der gültigen Kombinationen erzeugt werden.

Nur so ein paar Ideen...
 

Ähnliche Themen

Zurück
Oben