Quine–McCluskey-algoritm

Hasse diagram över sökgrafen för algoritmen för 3 variabler. Givet t.ex. delmängden bottennivån noder (ljusgrön), beräknar algoritmen en minimal uppsättning noder (här: , mörkgrön) som täcker exakt .

Quine –McCluskey-algoritmen ( QMC ), även känd som metoden för prime implicants , är en metod som används för att minimera booleska funktioner som utvecklades av Willard V. Quine 1952 och utökades av Edward J. McCluskey 1956. Som en allmän princip detta tillvägagångssätt hade redan demonstrerats av logikern Hugh McColl 1878, bevisades av Archie Blake 1937 och återupptäcktes av Edward W. Samson och Burton E. Mills 1954 och av Raymond J. Nelson 1955. Även 1955 , Paul W. Abrahams och John G. Nordahl samt Albert A. Mullin och Wayne G. Kellner föreslog en decimalvariant av metoden.

Quine–McCluskey-algoritmen är funktionellt identisk med Karnaugh-mappning , men tabellformen gör den mer effektiv för användning i datoralgoritmer, och den ger också ett deterministiskt sätt att kontrollera att den minimala formen av en boolesk funktion har uppnåtts. Det kallas ibland för tabuleringsmetoden.

Metoden innefattar två steg:

  1. Att hitta alla viktiga implikationer av funktionen.
  2. Använd dessa prime implikanter i ett prime implicant diagram för att hitta de väsentliga prime implikanterna för funktionen, såväl som andra prime implikanter som är nödvändiga för att täcka funktionen.

Komplexitet

Även om den är mer praktisk än Karnaugh-kartläggning när den hanterar fler än fyra variabler, har Quine–McCluskey-algoritmen också ett begränsat användningsområde eftersom problemet den löser är NP-komplett . Körtiden för Quine–McCluskey-algoritmen växer exponentiellt med antalet variabler. För en funktion av n variabler kan antalet prim-implikanter vara så stort som t.ex. för 32 variabler kan det vara över 534 × 10 12 främsta implikanter. Funktioner med ett stort antal variabler måste minimeras med potentiellt icke-optimala heuristiska metoder, av vilka Espresso heuristisk logikminimering var de facto-standarden 1995. [ behöver uppdateras ]

Steg två av algoritmen går ut på att lösa uppsättningsskyddsproblemet ; NP-hårda instanser av detta problem kan förekomma i detta algoritmsteg.

Exempel

Inmatning

I det här exemplet är indata en boolesk funktion i fyra variabler, som utvärderas till på värdena och , utvärderas till ett okänt värde på och och till överallt (där dessa heltal tolkas i sin binära form för inmatning till för kortfattad notation). Ingångarna som utvärderas till kallas 'minterms'. Vi kodar all denna information genom att skriva

Detta uttryck säger att utdatafunktionen f kommer att vara 1 för mintermerna och (betecknas med 'm' term) och att vi inte bryr oss om utdata för och kombinationer (betecknas med 'd'-termen). Summeringssymbolen betecknar den logiska summan (logisk ELLER eller disjunktion) av alla termer som summeras.

Steg 1: hitta viktiga implikanter

Först skriver vi funktionen som en tabell (där 'x' står för don't care):

A B C D f
m0 0 0 0 0 0
m1 0 0 0 1 0
m2 0 0 1 0 0
m3 0 0 1 1 0
m4 0 1 0 0 1
m5 0 1 0 1 0
m6 0 1 1 0 0
m7 0 1 1 1 0
m8 1 0 0 0 1
m9 1 0 0 1 x
m10 1 0 1 0 1
m11 1 0 1 1 1
m12 1 1 0 0 1
m13 1 1 0 1 0
m14 1 1 1 0 x
m15 1 1 1 1 1

Man kan enkelt bilda den kanoniska summan av produkter uttryck från denna tabell, helt enkelt genom att summera minterms (utelämna don't-care termer ) där funktionen utvärderas till en:

f A,B,C,D = A'BC'D' + AB'C'D' + AB'CD' + AB'CD + ABC'D' + ABCD.

vilket inte är minimalt. Så för att optimera placeras alla minterms som utvärderas till en först i en minterm-tabell. Don't care-termer läggs också till i den här tabellen (namn inom parentes), så att de kan kombineras med minterms:


Antal 1:or
Minterm
Binär representation
1 m4 0100
m8 1000
2 (m9) 1001
m10 1010
m12 1100
3 m11 1011
(m14) 1110
4 m15 1111

0 Vid det här laget kan man börja kombinera minterms med andra minterms. Om två termer skiljer sig åt med endast en siffra kan den siffran ersättas med ett streck som anger att siffran inte spelar någon roll. Termer som inte längre kan kombineras är markerade med en asterisk ( * ). Till exempel 1000 och 1001 kombineras för att ge 100- , vilket indikerar att båda mintermerna antyder att den första siffran är 1 och de två nästa är .


Antal 1:or
Minterm 0-Kub Storlek 2 implikanter
1 m4 0100 m(4,12) -100 *
m8 1000 m(8,9) 100-
m(8,10) 10-0
m(8,12) 1-00
2 m9 1001 m(9,11) 10-1
m10 1010 m(10,11) 101-
m(10,14) 1-10
m12 1100 m(12,14) 11-0
3 m11 1011 m(11,15) 1-11
m14 1110 m(14,15) 111-
4 m15 1111

När du går från storlek 2 till storlek 4, behandla - som ett tredje bitvärde. Matcha - först. Termerna representerar produkter och för att kombinera två produkttermer måste de ha samma variabler. En av variablerna ska kompletteras i en term och ofullbordad i den andra. De återstående variablerna bör överensstämma. Så för att matcha två termer - s passa in och alla utom en av de andra siffrorna måste vara samma. Till exempel -110 och -100 kombineras för att ge -1-0 , liksom -110 och -010 för att ge -10 , men -110 och 011- kan inte eftersom -: en inte är i linje. -110 motsvarar BCD' medan 011- motsvarar A'BC, och BCD' + A'BC motsvarar inte en produktterm.


Antal 1:or
Minterm 0-Kub Storlek 2 implikanter Storlek 4 implikanter
1 m4 0100 m(4,12) -100 *
m8 1000 m(8,9) 100- m(8,9,10,11) 10-- *
m(8,10) 10-0 m(8,10,12,14) 1--0 *
m(8,12) 1-00
2 m9 1001 m(9,11) 10-1
m10 1010 m(10,11) 101- m(10,11,14,15) 1-1- *
m(10,14) 1-10
m12 1100 m(12,14) 11-0
3 m11 1011 m(11,15) 1-11
m14 1110 m(14,15) 111-
4 m15 1111

Obs: I det här exemplet kan ingen av termerna i tabellen över implikanter för storlek 4 kombineras ytterligare. I allmänhet bör denna process fortsätta (storlek 8, 16 etc.) tills inga fler termer kan kombineras.

Steg 2: prime implikant diagram

Ingen av termerna kan kombineras längre än så här, så vid denna tidpunkt konstruerar vi en viktig prime implicant-tabell. Längs sidan går de primära implikanterna som just har genererats (detta är de som har markerats med " * " i föregående steg), och längst upp går de mintermer som specificerats tidigare. De bryr sig inte-termerna placeras inte överst – de utelämnas från det här avsnittet eftersom de inte är nödvändiga indata.

4 8 10 11 12 15 A B C D
m(4,12) ✓ ✓ 1 0 0
m(8,9,10,11) ✓ ✓ ✓ 1 0
m(8,10,12,14) ✓ ✓ ✓ 1 0
m(10,11,14,15) ✓ ✓ ✓ 1 1

För att hitta de väsentliga huvudimplikanterna letar vi efter kolumner med endast en "✓". Om en kolumn bara har en "✓", betyder det att mintermen endast kan täckas av en prime implicant. Denna främsta implikant är väsentlig .

Till exempel: i den första kolumnen, med minterm 4, finns det bara en "✓". Detta betyder att m(4,12) är väsentligt. Minterm 15 har också bara en "✓", så m(10,11,14,15) är också viktigt. Nu är alla kolumner med en "✓" täckta.

Den andra prime implikanten kan "täckas" av den tredje och fjärde, och den tredje prime implikanten kan "täckas" av den andra och första, och ingendera är således väsentlig. Om en primär implikant är väsentlig är det, som förväntat, nödvändigt att inkludera den i den minimerade booleska ekvationen. I vissa fall täcker de väsentliga primära implikanterna inte alla minterms, i vilket fall ytterligare procedurer för kortminskning kan användas. Det enklaste "tilläggsförfarandet" är försök och misstag, men ett mer systematiskt sätt är Petricks metod . I det aktuella exemplet hanterar inte de väsentliga primära implikanterna alla minterms, så i det här fallet kan de väsentliga implikanterna kombineras med en av de två icke-väsentliga för att ge en ekvation:

f A,B,C,D = BC'D' + AB' + AC

eller

f A,B,C,D = BC'D' + AD' + AC

Båda dessa slutliga ekvationer är funktionellt ekvivalenta med den ursprungliga, utförliga ekvationen:

f A,B,C,D = A'BC'D' + AB'C'D' + AB'C'D + AB'CD' + AB'CD + ABC'D' + ABCD' + ABCD.

Se även

Vidare läsning

externa länkar