2009-03-20 13 views
7

Je suis sûr que je peux me souvenir de faire quelque chose comme ça dans l'un de mes cours de niveau collégial et qu'il y avait une sorte de formule, mais mon esprit me manque plus que ça.Comment réduire une déclaration logique?

Compte tenu de la déclaration: (a ou b ou d) et (a c)

Je suis assez sûr que cela peut être réduit à: (a ou b ou d ou c)

Mais je ne me souviens pas comment j'allais le prouver.

Peut-être que c'était une série de tables logiques?

Répondre

10

Vous ne pouvez pas réduire "(a OR b OU d) ET (a OR c)" à "(a OR b OU d OR c)" parce que le premier n'est pas satisfait de "c = true, a, b, d = false ", alors que le dernier est. Donc, vous ne pouvez pas prouver la réduction correcte non plus :)

En général, il existe plusieurs façons de réduire la taille des formules booléennes, et c'est aussi une question de ce que vous voulez optimiser (taille totale - nombre moyen de conditions évaluations?). Les cartes de Karnaugh ne fonctionnent que pour un petit nombre de variables. Réduire les grandes formules booléennes en plus petites est un sujet avancé qui est essentiel dans, par exemple, conception de circuit logique automatique.

+0

nice! +1 – Learning

+0

est donc leurs programmes disponibles pour ce faire? – Dave

+0

Commander par ex. http://babbage.cs.qc.edu/courses/Minimize/ –

3

Karnaugh cartes, la clé est de "dessiner" toutes les entrées possibles et d'indiquer leurs sorties. Ensuite, vous pouvez commencer à filtrer les entrées qui ne font pas de différence à la sortie, ce qui réduit la carte. Une fois optimisé, vous pouvez alors produire votre logique à partir de celui-ci.

4

Une carte Karnaugh est votre ami ici:

http://en.wikipedia.org/wiki/Karnaugh_map

Vous sorte de devoir construire en sens inverse à partir des équations ci-dessus, mais il est un bon outil pour vous dire si elle peut être réduite plus loin.

2

(a ou b ou d) et (a c)

Cela veut dire quand un est vrai, tout est vrai!

=> a ou {(B ou D) et (c)}

=> a ou (B et C) ou (D et C)

Je pense que le résultat (A ou B OU d OR c) est faux, mais donnez-moi un coup de main quand c'est faux.

0

Oui, vous pouvez le prouver. Vous ne pouvez pas le réduire à (a OU b OU d OR c)

Regardez la 3ème ligne ci-dessous. Votre réduction échouerait à générer la bonne réponse.

il suffit de courir à travers:

A B C D
0 0 0 0 = 0
0 0 0 1 = 0
0 0 1 0 = 0
.
.
.
1 0 0 0 = 1
1 0 0 1 = 1

Jusqu'à présent, j'ai (A OR (???)) :(

1

un ou {(b ou d) eT c}

Raisonnement:. Si « a », l'affirmation est vraie autre, vous avez besoin b ou d (pour satisfaire la première partie de la déclaration) et c (satisfait la seconde moitié pour les cas où! a

1

Utilisation de Karnaugh maps:

C'est un OU b ou d:

 
\ab 
cd\ 00 01 11 10 
---+-----------+ 
00 | | X| X| X| 
01 | X| X| X| X| 
11 | X| X| X| X| 
10 | | X| X| X| 
    +-----------+ 

Ceci est un OU c:

 
\ab 
cd\ 00 01 11 10 
---+-----------+ 
00 | | | X| X| 
01 | | | X| X| 
11 | X| X| X| X| 
10 | X| X| X| X| 
    +-----------+ 

les Intersection, nous obtenons:

 
\ab 
cd\ 00 01 11 10 
---+-----------+ 
00 | | | X| X| 
01 | | | X| X| 
11 | X| X| X| X| 
10 | | X| X| X| 
    +-----------+ 

De toute évidence, c'est OU (quelque chose), où le (quelque chose) est:

 
    00 01 
11 | X| X| 
10 | | X|

Puisque le (quelque chose) n'est pas un rectangle, il nécessite deux expressions, qui peuvent être soit ET, soit OR ensemble, selon la façon dont nous voulons l'approcher. Nous utiliserons OR dans cet exemple, car il donne une expression plus simple.

Dans ce cas, nous pouvons regrouper les deux X l'un à côté de l'autre avec deux autres pour remplir toute la ligne cd, ainsi cd peut être l'une des expressions. Nous pouvons également grouper les deux les uns sur les autres avec les deux à leur droite pour former un carré. Ce carré représente l'expression bc, puisque a et d varient dans le carré.

Ainsi, l'expression finale est un OU ((c et d) OU (b et d)) ou a + cd + bd. Beaucoup plus agréable, n'est-ce pas?

1
SOP forme minimale

:

y = a | b&c | c&d; 

POS ont le même coût (nombre de portes pour mettre en œuvre logigramme):

y = (a|c)&(a|b|d);