Java使用条件

时间:2015-05-22 18:58:50

标签: java

我有以下数据,我想知道计算以下数量的最佳数据结构:

enter image description here

注意:

  • 我为以下所有规则创建表:a ==> z,b ==> z,和c ==> ž

  • 每个规则的
  • ,例如上图中的规则(a ==> z): 我为所有组合创建表格:a ==> z当b = 1时,a ==> z当c = 1时,a ==> z时b,c = 1

  • 例如,当我计算多少次(A = 1,B = 1和Z = 1)时,我必须排除次数(A = 1,B = 1,C = 1,和Z = 1)聚集在一起,在其他病区,我想计算次数(A = 1,B = 1,C = 0,Z = 1)聚集在一起

一种方法是使用前缀树(尝试),这里用纸来描述: http://www.sciencedirect.com/science/article/pii/S095070511400152X#

但我不想将任何树用作数据结构。

更新,对于那些问我是否付出努力的人:

是的,我付出了努力,但我一直在寻找更好的想法,谢谢大家。给@isaac特别的问候,我真的很适合你的帮助。

我将数据重新排列为这种格式(变量,arraylist对(变量出现的记录号,记录的长度)) 记录的长度=变量的值= 1的时间

示例:

A, comes in the records ( (7,1) ,(8,2) , (9,2) , (10,3), (11,3), (12,3) ,(13,4) )
B, comes in the records ( (4,1) , (5,2) ,(6,3), (11,3), (12,3) ,(13,4))
C, comes in the records ( (2,1), (3,2), (5,2) ,(6,3), (9,2) , (10,3), (12,3) ,(13,4) )
Z, comes in the records ( (1,1) , (3,2), (6,3), (8,2), (10,3), (11,3), (13,4) )

然后:

  • 我将计算每个变量单独出现的次数
  • Afrequency = 1,Bfrequency = 1,Cfrequency = 1,Zfrequency = 1
  • 然后,我根据记录的长度执行记录列表之间的交集

例如:  变量(A,B,Z)之间的交集在于记录(11和13) 的

记录13的长度>变量的数量。 因此,我不算数

结果:

The count number of (A=1, B=1, Z=1) = 1. Let call this result R1
From this, I can figure out the others values:
The count number of (A=1, B=1, Z=0) =  R1 -  Afrequency  =1-1=0
The count number of (A=0, B=1, Z=1) = R1 -  Zfrequency = 1-1 =0
The count number of (A=0, B=1, Z=0) = Bfrequency =1

1 个答案:

答案 0 :(得分:1)

我不会研究您正在谈论的这个前缀树,也不会费心阅读您提供的论文。但是根据我对你的问题的理解,你需要计算你指定的给定状态的条件数,我可以给你一些想法。

我提出了一种方法count(Boolean a, Boolean b, Boolean c, Boolean z)

只有一堆ifelse if来比较每个可能的状态与a,b,c和z。如果测试状态等于您的输入,则递增计数器,然后您可以返回该值。对于您的示例,您将调用count(true,true,null,true);

请注意,您不能使用基本类型布尔值,因为它不能保留null。

编辑: 这是我的实施。为简单起见,只有2位状态。可能的状态是(A,B)0,0; 0,1; 1,0; 1,1。我试着计算多少A = 1;

public static void main(String[] args) {
    boolean[][] possibleStates = {{false,false},{false,true},{true,false},{true,true}};
    int result = count(true,null,possibleStates);
    System.out.println(result);
}
public static int count(Boolean a,Boolean b,boolean[][] possibleStates) {
    int counter = 0;
    Boolean oldA = a;
    Boolean oldB = b;
    for(boolean[] state : possibleStates) {
        a = oldA;
        b = oldB;
        if(a == null) 
            a = state[0];
        if(b == null) 
            b = state[1];
        if(state[0] == a && state[1] == b)
            counter++;
    }
    return counter;
}

输出2