Você está na página 1de 4

Algoritmo de Quine-McCluskey

O Algoritmo de Quine–McCluskey (ou método dos implicantes primos) é um método


utilizado para minimização de funções booleanas desenvolvido por W.V. Quine e Edward
J. McCluskey em 1956. É funcionalmente idêntico ao mapa de Karnaugh, mas a forma
tabular o faz mais eficiente para uso em algoritmos computacionais, além de fornecer um
algoritmo determinístico para checar se a forma mais simplificada de uma função
booleana foi alcançada.

O procedimento consiste em 3 etapas:

1. Encontrar todos os implicantes primos da função;


2. Usar esses implicantes primos num mapa de implicantes primos para encontrar
os implicantes primos essenciais da função;
3. Usar os implicante primos essenciais e se necessário alguns implicantes
primos para encontrar a função minimizada.

Complexidade

Embora mais prático do que o mapa de Karnaugh ao lidar com mais de 4 variáveis, o
algoritmo de Quine-McCluskey também possui limitações devido ao fato de
o problema resolvido por ele ser NP-difícil: o tempo de execução do algoritmo de Quine-
McCluskey cresce exponencialmente em relação ao número de variáveis. Pode-se mostrar
que para uma função de n variáveis o limite superior no número de implicantes primos é
3n/n. Se n = 32 haverá cerca de 5.8 * 1013 implicantes primos. Funções com grande número
de variáveis têm de ser simplificadas com heurísticas não-ótimas, das quais
o ESPRESSO é considerado um padrão.

Exemplo

Etapa 1: Implicantes primos


Minimizando uma função arbitrária:

Esta expressão diz que a saída da função f será 1 para os mintermos 4,8,10,11,12 e
15 (denotados por 'm'), além de haver saídas irrelevantes, chamados don't care,
definidas pelos minitermos 9 e 14.
Obtemos facilmente a soma de produtos a partir desta tabela, simplesmente somando
os mintermos e desprezando os termos don't care:

A fórmula acima não está em sua forma mais simplificada. Para encontrar os minitermos
primos, primeiro agrupa-se todos os minitermos em uma tabela. Separando em grupos
baseado na quantidade de 1's presentes.

Começando pelo primeiro elemento do primeiro grupo da tabela, compare-o com todos os
termos do grupo seguinte. Toda vez que que a combinação for possível a menos de um
dígito deve-se anotar o código resultante em uma outra tabela, substituindo o dígito
divergente pelo sinal -. Toda vez que um termo não possuir combinação deve-se marcá-lo
pois este representa um implicante primo. Repete-se o procedimento para cada termo do
primeiro grupo. Faça o mesmo para o segundo grupo, comparando seus termos com os
termos do terceiro grupo.
Depois de realizar o procedimento em toda a tabela. Repita o procedimento para a tabela
gerada. O algorítimo continua até que não haja mais combinações possíveis.
Neste exemplo, nenhum dos termos da coluna 3 pôde ser combinado. Se não fosse o
caso, o algorítimo continuaria.

Etapa 2: Implicantes primos essenciais


Usando os implicantes primos essenciais constrói-se o mapa a seguir. A primeira linha do
mapa representa os minitermos envolvidos. A primeira coluna mostra os implicantes
primos e quais minitermos ele pode representar. Para definir quais os minitermos cada
implicante primo pode representar usa-se o código substituindo o - por 0 e por 1 de forma
a gerar todas as combinações possíveis.

Olhando as colunas da tabela observa-se que os implicantes primos são aqueles que
possuem apenas um X e uma das colunas. Se um implicante primo é essencial, então será
necessário incluí-lo na equação booleana simplificada. Em alguns casos, os implicantes
primos essenciais não cobrem todos os minitermos. Nesses casos deve-se adicionar
termos não essenciais de forma a cobrir todos os minitermos. Esse procedimento deve
visar a menor quantidade possível de adições. Para proceder forma mais analítica pode
ser usado o método de Petrick. Neste exemplo podemos combinar os implicantes
essenciais com um dos não essenciais para cobrir todos os minitermos e obter uma das
equações:

Ambas as equações são mínimas e equivalentes à equação inicial:

Em álgebra abstrata, álgebras boolianas[nota 1] (ou álgebras de Boole) são estruturas


algébricas que "captam as propriedades essenciais" dos operadores lógicos e de
conjuntos, ou ainda oferecem uma estrutura para se lidar com "afirmações",[1] são assim
denominadas em homenagem ao matemático George Boole
Uma álgebra booliana é uma 6-upla  consistindo de um conjunto  munido de
duas operações binárias  (também denotado por , é geralmente chamado de "ou")
e  (também denotado por  ou por , é geralmente chamado de "e"), uma operação
unária  (também denotada por  ou por uma barra superior, é geralmente chamado de
"não"), e duas constantes  (também denotada por  ou por , geralmente chamado de "zero"
ou de "falso") e  (também denotada por  ou por , geralmente chamado de "um" ou de
"verdadeiro"), e satisfazendo os seguintes axiomas, para quaisquer 

Você também pode gostar