Carnot-karta ( Carnot- kub , Carnot -diagram , Veitch-karta ) är ett grafiskt sätt att representera booleska funktioner med syftet att deras bekväma och visuella manuella minimering [1] .
Det är ett av de likvärdiga sätten att beskriva eller specificera logiska funktioner tillsammans med en sanningstabell eller booleska algebrauttryck . Omvandlingen av Karnaugh-kartan till en sanningstabell eller en boolesk formel och vice versa utförs av en elementär algoritm.
Bekvämligheten och tydligheten med en sådan representation av den logiska funktionen beror på det faktum att de logiska termerna på vilka operationerna med parvis ofullständig limning och elementär absorption kan tillämpas är grupperade i Carnot-kartan i form av visuellt uppenbara rektangulära arrayer som innehåller samma värden (nollor och ettor) i sina celler.
Karnaugh-kartor kan betraktas som en utveckling på planet för en n - dimensionell boolesk kub , och dimensionen av denna hyperkub sammanfaller med antalet variabler för funktionen som representeras, och varje vertex av hyperkuben motsvarar en-till-en en cell på Karnaugh-kartan. Grafiskt är Karnaugh-kartan avbildad som en rektangel eller kvadrat av celler, vars antal är lika med , och två intilliggande celler vertikalt eller horisontellt eller, med andra ord, i von Neumann-kvarteret beskriver termer som skiljer sig åt i endast en variabel - med logisk negation och utan logisk negation . Också intill är de första och sista raden, kolumnerna längst till vänster och längst till höger i tabellen, så Carnot-tabellen är faktiskt en utveckling av en logisk hyperkub på ytan av en toroid . Det är möjligt att bygga en mängd olika kartor för samma funktion som uppfyller villkoret: cellers geometriska grannskap i meningen von Neumann är termernas logiska grannskap - det vill säga med Hamming-avståndet mellan termerna för angränsande celler lika till 1. Vilken som helst av dessa tabeller är lika bekväma för att minimera funktionen, men vanligtvis är variabler i rader och kolumner i Karnaugh-kartan ordnade enligt den reflexiva Gray-koden på grund av mnemoniken och klarheten.
Karnaugh kartor introducerades 1952 av Edward V. Veitch [2] och förbättrades 1953 av Bell Labs fysiker Maurice Karnaugh för att förenkla designen av digitala system [3] .
En Karnaugh-karta är en sanningstabell formaterad på ett speciellt sätt, lämplig för visuell manuell minimering. Resultatet av minimering är antingen en disjunktiv normal form (DNF) eller en konjunktiv normal form (CNF). I det första fallet utförs arbete med cellerna på kartan där det finns ettor, i det andra - med cellerna där det finns nollor. I den ursprungliga kartan, såväl som i sanningstabellen, motsvarar varje enhet en term av den perfekta disjunktiva normalformen (PDNF) , och varje nolla motsvarar en term av den perfekta konjunktiva normalformen (CKNF) .
Närliggande grupper av ettor eller nollor på Karnaugh-kartan kombineras till rektangulära områden eller "limningar" efter storleken på cellerna. Varje sådan grupp i den slutliga logiska formeln kommer att motsvara en term (om vi antar att den logiska " ELLER "-operationen är "summation", och den logiska " OCH "-operationen är "multiplikation", så motsvarar en term en term i fallet med DNF, eller till en faktor i fallet med CNF) som innehåller variabler, brukar denna gruppering kallas "limning" [4] . Att arbeta med kartan handlar alltså om att välja den optimala uppsättningen av flera grupper av ettor (nollor) och omvandla dem till ett logiskt uttryck.
Huvudmetoden för att minimera logiska funktioner representerade som SDNF eller SKNF är operationen av parvis ofullständig limning och elementär absorption. Operationen av parvis limning utförs mellan två termer som innehåller samma variabler, vars förekomster (direkt och invers) är desamma för alla variabler utom en. I det här fallet kan alla variabler, utom en, tas ut från parentes, och de direkta och omvända förekomsterna av en variabel som finns kvar inom parentes kan absorberas. Till exempel:
På samma sätt för CNF:
Möjligheten till absorption följer av de uppenbara jämlikheterna:
Sålunda är huvuduppgiften för att minimera SDNF och SKNF sökandet efter termer lämpliga för limning med efterföljande absorption, vilket för funktioner av många logiska variabler kan vara en ganska svår uppgift. Karnaugh-kartor ger ett visuellt sätt att hitta sådana termer.
Booleska funktioner för N variabler, representerade som SDNF eller SKNF, kan inte innehålla mer än olika termer. Alla dessa elementära termer kan representeras som någon struktur topologiskt ekvivalent med en dimensionell kub, och vilka två termer som helst som är förbundna med en kant är lämpliga för limning och absorption.
Figuren visar en enkel sanningstabell för en funktion av två variabler, en 2-dimensionell kub (kvadrat) som motsvarar denna tabell, samt en 2-dimensionell kub med beteckningen SDNF-medlemmar och en motsvarande tabell för gruppering av termer:
När det gäller en funktion av tre variabler har man att göra med en tredimensionell kub. Detta är mer komplicerat och mindre visuellt, men tekniskt möjligt. Som ett exempel visar figuren sanningstabellen för en boolesk funktion av tre variabler och motsvarande kub.
Som framgår av figuren, för det tredimensionella fallet, är mer komplexa konfigurationer av termer möjliga. Till exempel kombineras fyra termer som hör till samma yta av en kub till en term med absorption av två variabler:
I det allmänna fallet kan vi säga att termerna som hör till en av hyperkubens -dimensionella yta limmas till en term, medan variablerna absorberas.
För att förenkla arbetet med booleska funktioner för ett stort antal variabler föreslogs följande praktiska knep. Kuben, som är en struktur av termer, viks ut på ett plan, som visas i figuren. Därmed blir det möjligt att representera booleska funktioner med fler än två variabler i form av en platt tabell. Man bör komma ihåg att ordningen på termkoderna i tabellen (00 01 11 10) inte motsvarar ordningen för de binära talen som skrivs i lexikografisk ordning (00 01 10 11), och cellerna som finns i de extrema kolumnerna av bordet ligger intill varandra.
På samma sätt kan du arbeta med logiska funktioner för ett större antal variabler.
Traditionellt finns det flera stilar för att presentera Karnot-kartor. Ofta innehåller rubriken och den vänstra kolumnen de numeriska värdena för variablerna, precis som de visas i sanningstabellen (a). I denna stil är det mest uppenbart att Karnaugh-kartan är en speciell form av sanningstabellsrepresentation. Cellerna på Karnaugh-kartan följer dock i en något annan ordning än raderna i sanningstabellen, eftersom det är brukligt i sanningstabellen att ordna raderna i den lexikografiska ökningen av binära tal. Till exempel, i en Karnaugh-karta för fyra variabler, kommer ordningen på kartcellerna och raderna i sanningstabellen att sammanfalla om tredje-fjärde kolumnerna och tredje-fjärde raderna på kartan byts om.
Varje rad i sanningstabellen och varje cell i Karnaugh-kartan motsvarar en term i DNF, så förekomsten av variabler (direkt och invers) kan indikeras i rubriken och vänster kolumn på kartan, som de ser ut i SDNF ( b). Det finns en förkortad version av denna presentationsstil, där de extra raderna och kolumnerna anger i vilken form, direkt eller invers, varje variabel presenteras i motsvarande rad eller kolumn på kartan (c).
Slutligen, i vissa fall, anger linjer kolumner och rader vid kartans kanter, där motsvarande variabel representeras i direkt form (d).
a) b) c) d)
Den första informationen för att arbeta med Karnaugh-kartan är sanningstabellen för den minimerade funktionen. Sanningstabellen innehåller fullständig information om den logiska funktionen, och ger dess värden på alla möjliga 2 n uppsättningar av indatavariabler X 1 ... X n . Karnaugh-kartan innehåller också 2 n celler, som var och en är associerad med en unik uppsättning indatavariabler X 1 … X n . Det finns alltså en en-till-en-överensstämmelse mellan sanningstabellen och Karnaugh-kartan, och Karnaugh-kartan kan ses som en lämpligt formaterad sanningstabell.
I detta avsnitt används funktionen av fyra variabler som ges av sanningstabellen som visas i Fig. 2 som ett exempel. 2a. Carnot-kartan för samma funktion visas i fig. 2b.
Ett rektangulärt område i Karnaugh-kartan, som består av 2 k identiska värden (ettor eller nollor, beroende på vilken form du behöver få) kommer att kallas limning , grupp eller område . Fördelningen av alla nollor (ettor) i Carnot-kartan över limningar kommer att kallas en täckning . För att minimera den booleska funktionen är det nödvändigt att konstruera en sådan täckning av Carnot-kartan så att antalet limningar är minimalt och storleken på varje limning så stor som möjligt. För att göra detta måste du följa följande regler.
a) b)
I praktiken finns det fall då, för vissa värden av argumenten, den booleska funktionen inte är definierad. Till exempel beskriver en boolesk funktion en digital enhet för vilken vissa kombinationer av insignaler är fysiskt omöjliga, eller för vissa värden på ingångssignalerna spelar enhetens reaktion ingen roll. I sådana fall talar man om "osäkra förhållanden", och en funktion av detta slag kallas "delvis definierad" eller helt enkelt "partiell" [5] .
Bilden visar en digital enhet F med fyra binära ingångar . Ingångssignalerna kan vara avläsningar av sensorer som fungerar på en krets och därför bara har två värden - "på" (1) och "av" (0). Låt oss anta att på grund av enhetens designfunktioner kan den andra och fjärde sensorn inte fungera samtidigt, det vill säga kombinationen av signaler är fysiskt omöjlig. I det här fallet spelar värdet på funktionen i de fyra cellerna i Karnot-kartan ingen roll, vilket villkorligt visas med symbolen "×".
Sådana celler kan godtyckligt inkluderas i vilken limning som helst, och får inte heller inkluderas i någon limning, det vill säga de kan valfritt definieras som 1 eller 0 [5] .
När alla limningar på Karnaugh-kartan är bestämda är det nödvändigt att konvertera den resulterande Karnaugh-kartan till en formel. När de gör det styrs de av följande principer:
En Karnaugh-karta kan byggas för hur många variabler som helst, men det är bekvämt att arbeta med högst fem variabler. I huvudsak är en Karnaugh-karta en sanningstabell som presenteras som en matris i 2-dimensionell form.
Varje cell i denna karta motsvarar en rad i den klassiska sanningstabellen och betecknas med en rad variabler med och utan inversioner. Till exempel, låt in sanningstabellen för en funktion av 4 variabler en av raderna ser ut så här: 0 1 1 0 | 1, så kommer cellen i Karnaugh-kartan som motsvarar denna rad att ha ett namn och i denna cell sätts 1. Indikeringen av cellnamn i Karnaugh-kartan utförs vanligtvis av en extra rad överst och en extra kolumn till vänster .
Det är väsentligt att angränsande celler i Carnot-kartan nödvändigtvis har angränsande koder i betydelsen Hamming-avståndet , det vill säga Hamming-avståndet mellan angränsande celler är lika med 1, och skiljer sig endast i tillståndet - med eller utan inversion, av en och endast en av variablerna. Närliggande celler är celler som gränsar till varandra vid sidan, även celler i kolumnerna längst till vänster och längst till höger och cellerna i den första och sista raden betraktas som närliggande celler. Således är en Carnot-karta på ett plan topologiskt ekvivalent med ytan på en torus i tredimensionell rymd, eller en hypertorus i ett rymd med dimension 1 större än dimensionen för motsvarande flerdimensionella Karnot-karta.
Eftersom permutationen av variabler i en logisk funktion inte ändrar själva funktionen, det vill säga, till exempel, eller, som är densamma, permutationen av kolumnerna med variabler i sanningstabellen inte ändrar funktionen, finns det flera alternativ för att visa sanningstabellen på en Karnaugh-karta samtidigt som cellernas "grannskap" bibehålls. Men i praktiken fylls Karnaugh-kartan oftast i med en inkrementell grå kod för att ange rader och kolumner. Detta tillvägagångssätt garanterar genereringen av en Karnot-karta med undvikande av subjektiva fel.
När kartan är ifylld, i skärningspunkten mellan raden och kolumnen, anges motsvarande värde från sanningstabellen - 0 eller 1. Efter att kartan är ifylld startas minimering.
Om det är nödvändigt att erhålla den lägsta DNF , så betraktar vi i kartan endast de celler som innehåller ettor, om CNF behövs , då överväger vi de celler som innehåller nollor. Själva minimeringen utförs enligt följande regler (till exempel DNF).
Därefter tar vi det första området och ser vilka variabler som inte förändras inom detta område, skriver ut konjunktionen av dessa variabler; om den oföränderliga variabeln är noll, sätt inversionen över den . Vi tar nästa område, gör samma sak som för det första och så vidare för alla områden. Områdens konjunktioner kombineras med disjunktion .
Till exempel (för Maps för 2 variabler):
För CNF är allt sig likt, bara vi betraktar celler med nollor, kombinerar oföränderliga variabler inom samma region till disjunktioner (inversioner sätts ner över enhetsvariabler), och disjunktioner av regioner kombineras till en konjunktion. Detta avslutar minimeringen. Så för Karnot-kartan i fig. 1 kommer uttrycket i DNF-format att se ut så här:
I CNF-format:
Du kan också byta från DNF till CNF och tillbaka med De Morgans lagar .
Pojken Kolya har en mamma, pappa, farfar och mormor. Kolya kommer att gå en promenad på gatan om och bara om minst två släktingar tillåter honom.
För korthetens skull, låt oss beteckna Kolyas släktingar med bokstäver:
mamma - X1
pappa - X2
farfar - X3
farmor - X4
Låt oss komma överens om att beteckna anhörigas samtycke som ett, oenighet som noll. Möjligheten att gå på promenad kommer att betecknas med bokstaven f, Kolya går en promenad - f = 1, Kolya går inte på promenad - f = 0.
Låt oss göra en sanningstabell:
Låt oss rita om sanningstabellen i tvådimensionell form:
Låt oss ordna om raderna och kolumnerna i den i enlighet med den grå koden (de sista och näst sista kolumnerna byts). Mottaget Karnot-kort:
Låt oss fylla den med värden från sanningstabellen (den första raden motsvarar inte sanningstabellen, eftersom f=0 och det inte finns någon tillåtelse att gå):
Vi minimerar i enlighet med reglerna:
Nu, enligt den erhållna minsta DNF, är det möjligt att konstruera en logisk krets :
På grund av avsaknaden av ett OR-element med sex ingångar som implementerar disjunktionsfunktionen, var det nödvändigt att kaskadbilda fem- och tvåingångarselement (D7, D8).
Låt oss göra min. CNF:
programvara