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.[1]

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.

ABCDf
m000000
m100010
m200100
m300110
m401001
m501010
m601100
m701110
m810001
m91001x
m1010101
m1110111
m1211001
m1311010
m141110x
m1511111

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.

Número de 1sMintermoRepresentação Binária
1 m40100
m81000
2 m91001
m101010
m121100
3 m111011
m141110
4 m151111

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.

Número de 1'sColuna 1MarcaColuna 2MarcaColuna 3Marca
0
10100ok100-ok10--*
1000ok10-0ok1--0*
1-00ok
-100*
21001ok10-1ok1-1-*
1010ok101-ok
1100ok1-10ok
11-0ok
31011ok1-11ok
1110ok111-ok
41111ok

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.

Implicante primominitermos representáveis4810111215ABCD
-100m(4,12)*XX-100
10--m(8,9,10,11)XXX10--
1--0m(8,10,12,14)XXX1--0
1-1-m(10,11,14,15)*XXX1-1-

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:

Ver também

Referências

  1. V.P. Nelson e.a., Digital Circuit Analysis and Design, Prentice Hall, 1995, pag. 234
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.