一尘不染

在C#中以编程方式生成决策表?

algorithm

我遇到这种情况,我需要让用户根据给定条件的数量来定义决策。例如,鉴于有两个条件(IsMale和IsSmoker),我的程序需要自动生成如下的矩阵:

IsMale:   YES YES NO  NO
IsSmoker: YES NO  YES NO

而且决策是由用户定义的,因此以下任何一项都可以有效:

IsMale:   YES YES NO  NO
IsSmoker: YES NO  YES NO
Decision: T   F   T   F

IsMale:   YES YES NO  NO
IsSmoker: YES NO  YES NO
Decision: F   F   F   F

IsMale:   YES YES NO  NO
IsSmoker: YES NO  YES NO
Decision: T   T   T   T

对于每个条件,只能有两种状态, TrueFalse 。因此,组合的总数计算如下:

没有可能的 状态(S) 达到 条件(C) 的幂的幂 S ^ C =组合总数

4种可能性(2 ^ 2 = 4)

Condition A   T T F F
Condition B   T F T F

8种可能性(2 ^ 3 = 8)

Condition A   T T T T F F F F
Condition B   T T F F T F T F
Condition C   T F T F T T F F

希望我能比原来的问题更好地解释自己。

更新: 根据古法给出的。以下是他的算法的人工计算,以生成不同的组合。

4 possibilities (2^2=4)

索引= 0,(右移0)

binary   8 4 2 1  Value

original 0 0 0 1  1
& 1      0 0 0 1  1 T

original 0 0 1 0  2
& 1      0 0 0 1  0 F

original 0 0 1 1  3
& 1      0 0 0 1  1 T

original 0 1 0 0  4
& 1      0 0 0 1  0 F

索引= 1,(右移1)

binary   8 4 2 1  Value
original 0 0 0 1  1
shift    0 0 0 0  0
& 1      0 0 0 1  0 F

original 0 0 1 0  2
shift    0 0 0 1  1
& 1      0 0 0 1  1 T

original 0 0 1 1  3
shift    0 0 0 1  1
& 1      0 0 0 1  1 T

original 0 1 0 0  4
shift    0 0 1 0  2
& 1      0 0 0 1  0 F

组合:

Condition 1: TFTF
Condition 2: FTTF

阅读 335

收藏
2020-07-28

共1个答案

一尘不染

输出矩阵相当简单:

int conditions = 3;
for (int c = 0; c < conditions; c++) {
    Console.WriteLine(
       "Condition {0} : {1}",
       (char)('A' + c),
       new String(
          Enumerable.Range(0, (1 << conditions))
          .Select(n => "TF"[(n >> c) & 1])
          .ToArray()
       )
    );
}

那么,您要如何处理呢?

2020-07-28