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