# Karnaugh-diagram

Een Karnaugh-diagram of ook wel een Veitch-diagram is een hulpmiddel om expressies in booleaanse algebra te vereenvoudigen. Het diagram werd uitgevonden in 1950 door Maurice Karnaugh, een telecommunicatie-ingenieur bij Bell Labs.
Dikwijls zijn er uitgebreide berekeningen nodig om een booleaanse expressie of functie zo eenvoudig mogelijk te schrijven, maar met een Karnaugh-diagram kan dit vaak sneller. Doordat het menselijk brein gemakkelijk patronen kan herkennen, helpt het diagram om snel op te zoeken welke termen gecombineerd kunnen worden om een expressie te vereenvoudigen. Daarenboven kan men met Karnaugh-diagrammen snel herkennen waar eventueel een zogenaamde "race condition" zou kunnen voorkomen, en men kan ze dan ook verwijderen, wat met booleaanse expressies alleen niet kan.
Een Karnaugh-diagram is geschikt voor vereenvoudigen tot maximaal zes variabelen; meer variabelen maken het zelfs voor het brein moeilijk om nog patronen te herkennen. Voor expressies met meer dan 4 variabelen is het beter het Quine-McCluskey-algoritme te gebruiken. Heden ten dage wordt voor dit doel echter in de regel de veel efficiëntere Espresso heuristische logische minimalisator toegepast.
Karnaugh-diagrammen zijn ook nuttig bij het aanleren van booleaanse functies en minimalisatie.

## Voorbeeld

De functie $f(A,B,C,D)$ heeft de volgende waarheidstabel (met 0 voor onwaar en 1 voor waar):
    $i$$A$$B$$C$$D$Waarde van $f$$i$$A$$B$$C$$D$Waarde van $f$ 000000810001 100010910011 2001001010101 3001101110111 4010001211001 5010101311011 6011011411101 7011101511110
De waarheidstabel wordt anders weergegeven door de invoervariabelen $A,B,C$ en $D$ in paren $AB$ en $CD$ tegen elkaar uit te zetten. De waarden van deze paren zijn geordend in Gray-code, om ervoor te zorgen dat in twee opeenvolgende waarden er slechts één variabele verandert.
Het zo ontstane Karnaugh-diagram is een 4 bij 4 diagram, met in het veld $(AB,CD)$ de functiewaarde $f(A,B,C,D).$
    Sample Karnaugh map, style #1.
Als eenmaal de getallen ingevuld zijn, is de volgende stap het vinden van minimale termen voor de uiteindelijke expressie. Deze termen kunnen gevonden worden door de enen in het diagram te omkaderen. Dit moet gebeuren op een dusdanige manier dat de "kaders" rechthoekig zijn en exact $2^{n}$ velden omvatten, waarbij $n$ een natuurlijk getal is groter dan 0. De omkaderingen moeten ook zo groot mogelijk zijn. De optimale kaders worden hierboven getoond in groen, rood en blauw.
Voor elk van deze kaders wordt nagegaan welke variabele in alle velden van het kader dezelfde waarde heeft. Voor het eerste (rode) kader blijkt:
* De variabele $A$ heeft dezelfde waarde (1) in het hele kader, dus behoort $A$ tot de term die hoort bij het rode kader.
* De variabele $B$ heeft niet dezelfde waarde (ze verandert van 1 naar 0), dus wordt ze uitgesloten.
* Op dezelfde manier verandert $D$ wel, maar $C$ niet. $C$ is hier altijd gelijk aan 0.
Omdat $C=0$ wordt de negatie aan de term toegevoegd. De eerste term wordt daarom $A{\overline {C}}.$
In het groene kader is in elk veld $A=1$ en $B=0,$ maar veranderen $C$ en $D.$ De tweede term wordt daarom $A{\overline {B}}.$
In het blauwe kader ten slotte is $B=1,C=1,D=0$ en verandert $A$ van waarde, zodat de derde term $BC{\overline {D}}$ is.
De volledige expressie wordt dus gegeven door
    $f(A,B,C,D)=A{\overline {C}}+A{\overline {B}}+BC{\overline {D}}.$
Men verifieert eenvoudig dat bijvoorbeeld
    $1=f(0,1,1,0)=0\times 0+0\times 0+1\times 1\times 1.$
De inverse functie kan gevonden worden door de nullen te omcirkelen in plaats van de enen.