Forum: PC-Programmierung Bedingungsmatrix vs. Kontrollstrukturen (Verzweigungsbaum minimieren?)


von Phoenix (Gast)


Lesenswert?

Als Nichtinformatiker frage ich mich, ob es eine Methode gibt, eine 
Matrix/Tabelle mit verschiedenen Eigenschaften (Spalten) mit einer 
minimalen Zahl einfacher Verzweigungen abzubilden.

Dazu ein Beispiel:

x  A B C
1  1 7 3
2  5 7 2
3  0 1 6

Die Eigenschaften (Bedingungen) einer Zeile haben einen begrenzten 
Wertebereich unterschiedlichen Typs, im Grunde könnte man aber alles 
auch binär darstellen.

Alerdings sind die Operatoren und ihre Argumente sehr stark begrenzt 
(grafische SPS-Programmierung), d.h. ein
1
IF (x == 1) and (A == 1) and (B== ...

ist nicht möglich und muss verschachtelt (sequentiell geprüft) werden.

Meine Überlegung war nun, ob man die (Anzahl der) Prüfung(en) durch 
Nutzung der Gemeinsamkeiten reduzieren (optimieren) kann, z.B.
1
IF (B == 7) THEN
2
  IF (A == 1) THEN
3
    IF (C == 3) THEN
4
      IF (x == 1) THEN
5
        ..
6
      END IF 
7
    END IF 
8
  END IF
9
  IF (A ...
10
  END IF
11
END IF

Gegenüber der ersten Abfrage von x spart mir das eine Abfrage (wow).

Ich gehe davon aus, dass es ein Konzept gibt, das mein Problem besser 
und ausführlicher beschreibt - aber ich weiß nicht, wonach ich suche.. 
Stichworte und Links gerne gelesen!

von K. B. (kbf)


Lesenswert?

Schau mal nach Karnaugh-Veitch Minimierung.

von Phoenix (Gast)


Lesenswert?


von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Am effizientesten und übersichtlichsten liest man die Daten aus einem 
2-dimensonalen Array aus, hier in C dargestellt:
1
const int werte[][] = 
2
{
3
  { 1, 7, 3 },
4
  { 5, 7, 2 },
5
  { 0, 1, 6 }
6
};
7
8
int get_wert (int zeile /* 1..3 */, int spalte /* 'A'..'C' */)
9
{
10
   return werte[zeile - 1][spalte - 'A'];
11
}

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.