我有以下数据,我想知道计算以下数量的最佳数据结构:
注意:
我为以下所有规则创建表: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) )
然后:
例如: 变量(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
答案 0 :(得分:1)
我不会研究您正在谈论的这个前缀树,也不会费心阅读您提供的论文。但是根据我对你的问题的理解,你需要计算你指定的给定状态的条件数,我可以给你一些想法。
我提出了一种方法count(Boolean a, Boolean b, Boolean c, Boolean z)
。
只有一堆if
和else 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