gpt4 book ai didi

Java根据条件计算计数

转载 作者:行者123 更新时间:2023-12-01 11:30:51 25 4
gpt4 key购买 nike

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

enter image description here

注意:

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

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

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

一种方法是使用前缀树(tries),这里的论文对此进行了描述: http://www.sciencedirect.com/science/article/pii/S095070511400152X#

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

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

是的,我尽力了,但我正在寻找更好的想法,谢谢大家。特别感谢@isaac,我真的很需要你的帮助。

我将数据重新排列为这种格式(变量,数组列表对(变量出现的记录号,记录的长度))其中记录长度=变量值的次数=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 频率 =1、B 频率=1、C 频率=1 和 Z 频率=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

最佳答案

我没有研究你正在谈论的这个前缀树,也懒得阅读你给出的论文。但根据我对你的问题的理解,你需要计算你指定的给定状态有多少个条件,我可以给你一些想法。

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

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

请注意,您不能使用原始类型 boolean,因为它不能保存 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

关于Java根据条件计算计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30404044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com