1个稳定版本
| 1.0.0 | 2024年3月15日 |
|---|
#839 在 算法 中
48KB
1K SLoC
Quine-McCluskey
基于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– 为结构和枚举派生Serialize和Deserialize特性。
依赖项
~0.3–0.8MB
~20K SLoC