#boolean #minimize #algorithm

quine-mccluskey

基于Quine–McCluskey算法的布尔函数最小化器

1个稳定版本

1.0.0 2024年3月15日

#839算法

MIT 许可证

48KB
1K SLoC

Quine-McCluskey

crates.io docs.rs

基于Quine-McCluskey算法的布尔函数最小化器。

示例

给定以下真值表表示的布尔函数

A B C 输出
0 0 0 1
0 0 1 0
0 1 0 X
0 1 1 0
1 0 0 0
1 0 1 1
1 1 0 0
1 1 1 X

我们可以使用带有积之和形式和最大项的 minimize 以及 Form::SOP 来最小化它

use quine_mccluskey as qmc;

let mut solutions = qmc::minimize(
    &qmc::DEFAULT_VARIABLES[..3],
    &[0, 5],        // minterms
    &[1, 3, 4, 6],  // maxterms
    qmc::SOP,
    false,
    None
)
.unwrap();

assert_eq!(
    solutions.pop().unwrap().to_string(),
    "(A ∧ C) ∨ (~A ∧ ~C)"
);

或者使用带有积之和形式和无关项的 minimize_minterms

let mut solutions = qmc::minimize_minterms(
    &qmc::DEFAULT_VARIABLES[..3],
    &[0, 5],  // minterms
    &[2, 7],  // don't cares
    false,
    None
)
.unwrap();

assert_eq!(
    solutions.pop().unwrap().to_string(),
    "(A ∧ C) ∨ (~A ∧ ~C)"
);

或者使用带有积之和形式和最大项的 minimize 以及 Form::POS

let mut solutions = qmc::minimize(
    &qmc::DEFAULT_VARIABLES[..3],
    &[0, 5],        // minterms
    &[1, 3, 4, 6],  // maxterms
    qmc::POS,
    false,
    None
)
.unwrap();

assert_eq!(
    solutions.pop().unwrap().to_string(),
    "(A ∨ ~C) ∧ (~A ∨ C)"
);

或者使用带有积之和形式和无关项的 minimize_maxterms

let mut solutions = qmc::minimize_maxterms(
    &qmc::DEFAULT_VARIABLES[..3],
    &[1, 3, 4, 6],  // maxterms
    &[2, 7],        // don't cares
    false,
    None
)
.unwrap();

assert_eq!(
    solutions.pop().unwrap().to_string(),
    "(A ∨ ~C) ∧ (~A ∨ C)"
);

特性标志

  • serde – 为结构和枚举派生 SerializeDeserialize 特性。

依赖项

~0.3–0.8MB
~20K SLoC