用Java构造布尔逻辑中的真值表标题

时间:2016-02-16 00:56:25

标签: java boolean boolean-logic truthtable karnaugh-map

我正在开发一个小项目来构建基于中缀布尔逻辑表达式的真值表。例如:

A ∧ (B ∨ C)

我可以将其转换为后缀:

ABC∨∧

因此能够将表达式构造成二叉树(可以将树转换回中缀,获取后缀或前缀):

ABC∨∧的语法树:

Syntax Tree of ABC∨∧

digraph graphname {
    node1 [label="∧"];
    node2 [label="A"];
    node3 [label="∨"];
    node6 [label="B"];
    node7 [label="C"];
    node1 -> node2;
    node1 -> node3;
    node3 -> node6;
    node3 -> node7;
}

问题

我的问题是在构建真值表时,如何找出完成真值表所需的其余列标题?

目前,我可以在符号上生成所有排列:

| A | B | C |
| - | - | - |
| F | F | F |
| F | F | T |
| F | T | F |
| F | T | T |
| T | F | F |
| T | F | T |
| T | T | F |
| T | T | T |

基本上,为了获得这些标题,我只需根据输入创建一个Set<Character>个不同的字母字符。

但是,这不是A ∧ (B ∨ C)的完整真值表。对于完整的真值表,我需要添加列(B ∨ C)A ∧ (B ∨ C),以便完整的真值表如下所示:

| A | B | C | (B ∨ C) | A ∧ (B ∨ C) |
| - | - | - | ------- | ----------- |
| F | F | F |         |             |
| F | F | T |         |             |
| F | T | F |         |             |
| F | T | T |         |             |
| T | F | F |         |             |
| T | F | T |         |             |
| T | T | F |         |             |
| T | T | T |         |             |

那么,我将如何以编程方式生成所需的其他标题(即具有逻辑连接词的标题),使我能够生成其语义含义?

一些树遍历算法会这样做吗?或者你只是使用输入的中缀/后缀版本?

某些Java代码会有所帮助,但方法/算法就足够了:)

谢谢!

0 个答案:

没有答案