7.4.5 Minimierung der Reed-Muller-Form

Auch bei einer Reed-Muller-Form kann man die Anzahl der im Ausdruck benutzten Verknüpfungen durch Ausklammern von Variablen verringern wie das folgende Beispiel zeigt:

 f(a,b,c,d)  =  1 + b + a*b + a*d + a*b*c*d  =  1 + b + a*(d + b*(1 + c*d)) 

Häufig gibt es mehrere gleichwertige Lösungen. Eine weitere für das obige Beispiel ist:

 f(a,b,c,d)  =  1 + b + a*b + a*d + a*b*c*d  =  1 + b + a*(b + d*(1 + b*c)) 

Durch das Ausklammern geht allerdings die ursprüngliche Struktur der Reed-Muller-Form verloren. Die besonderen Eigenschaften der Reed-Muller-Form basieren aber gerade auf dieser Struktur. Deshalb wird man diese Art der Minimierung nicht wollen und die Reed-Muller-Form in der ursprünglichen Form belassen.

Ist die zu realisierende Funktion aber nicht vollständig spezifiziert, dann dürfen die Don't-Care-Punkte beliebig gesetzt werden. Dies ermöglicht die Eliminierung der aufwendigsten Terme. Wir betrachten hierzu die folgende Schaltfunktion von 4 Variablen, die 5 Don't-Care-Punkte enthält. Anstelle der Sterne an den Don't-Care-Punkten der Funktionstabelle werden formale binäre Variable A, B, C, ... eingeführt, die so zu bestimmen sind, dass ausgewählte Terme der Reed-Muller-Entwicklung verschwinden. In diesem Fall sind 5 Variable zu bestimmen, also benötigen wir 5 Gleichungen. Wir transformieren die Funktionstabelle mit den Unbekannten in den Koeffizientenvektor der Reed-Muller-Form. Das Resultat ist die vierte Spalte des folgenden Bildes:

demominrm

Die sechste Spalte des Bildes zeigt alle möglichen Terme der Reed-Muller-Form. Wir setzen versuchsweise die fünf aufwendigsten der nicht verschwindenden Terme zu Null, um die erforderlichen Gleichungen zu erhalten. Sie können linear abhängig oder widersprüchlich sein. Dann muss man einen eine andere Wahl unter den von den Unbekannten abhängigen Termen treffen. Die letzte Spalte des Bildes zeigt den so erhaltenen Koeffizientenvektor der minimierten Reed-Muller-Form. Der zugehörige Ausdruck ist unten in rot angegeben.

demominrm hat als Parameter die Funktionstabelle mit den Werten 0 und 1 sowie -1 für die Don't-Cares. Die Funktion arbeitet mit Schaltfunktionen von 1 bis 6 Variablen, die immer mit a, b, c, ... bezeichnet werden. Nachfolgend werden einige Beispiele gegeben.

demominrm([0  0  0 -1  0  1  0  0])

demominrm([-1 -1 -1 -1  1  1  0  1  0  0 -1  1 -1 -1 -1  0])

demominrm([ 0 -1  1  0 -1  0  1  1  1 -1 -1  1  0 -1  0  1 ...
           -1 -1 -1  1 -1  1  0  1 -1  1 -1  0  0  1 -1 -1])

demominrm([ 0  0  0  0  1  1  0  1  0  0  0  0  0  0  0  1 ...
            0  1  0 -1  0  1 -1  0  1  1  1  0  0  0  0 -1 ...
            0  1  0  0  0  1  1  1  0 -1 -1  0  0  1  0  1 ...
            1  1  1  0 -1  0  1  1  1  1  1  1 -1  1  1  1])

Das folgende Beispiel zeigt einen Fall, in dem viele Terme linear abhängig oder paarweise widersprüchlich sind. In solchem Fall wird hier suboptimal durch probieren nach einer Lösung gesucht:

demominrm([-1  0 -1  1  0  1  1  0  1  0 -1  0  1  0 -1  1])