Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JAVA中合并位字符串_Java_Arraylist_Merge - Fatal编程技术网

如何在JAVA中合并位字符串

如何在JAVA中合并位字符串,java,arraylist,merge,Java,Arraylist,Merge,我有这个ArrayList 集群:[[1,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,1,1],[1,1,1,0] 对于每个位字符串(内部arrayList),熵的计算和生成如下所示: inner index #0 : [1, 0, 0, 0] = 0.811 inner index #1 : [0, 0, 0, 0] = 0 inner index #2 : [0, 0, 0, 0] = 0 inner index #3 : [0, 0, 1, 1] = 1 inner i

我有这个
ArrayList
集群:
[[1,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,1,1],[1,1,1,0]

对于每个位字符串(内部arrayList),熵的计算和生成如下所示:

inner index #0 : [1, 0, 0, 0] = 0.811
inner index #1 : [0, 0, 0, 0] = 0
inner index #2 : [0, 0, 0, 0] = 0
inner index #3 : [0, 0, 1, 1] = 1
inner index #4 : [1, 1, 1, 0] = 0.811
熵的计算如下:
对于内部索引#0

0的概率为3/4=0.75,1的概率为1/4=0.25。
然后,熵=-((0.75)(log(0.75)/log(2))+(0.25)(log(0.25)/log(2))=0.811

然后,在获得所有位的熵之后,我想合并这两个位,如下所示:

假设#0和#1,那么位将变成:

**Before merge**
inner index #0 : [1,0,0,0]  
inner index #1 : [0,0,0,0]  

**After merge**  
inner index #0 and #1 : [ [1,0], [0,0], [0,0], [0,0] ]
然后在合并之后,我将发现存在
[0,0]
[0,1]
[1,0]
[1,0]
(可能的排列)的概率,以再次计算熵。因此,在上述情况下:

P([0,0]) = 3/4 = 0.75 (because there are 3 [0,0] in outer array of 4)  
P([0,1]) = 0/4 = 0  
P([1,0]) = 1/4 = 0.25 (because there are 1 [1,0] in outer array of 4)    
P([1,1]) = 0/4 = 0
然后用同样的方法计算熵

合并#0和#1之后,假设我想将#0和#1与#3合并,这样它将产生如下结果:

**Before merge**  
#0 and #1 : [ [1,0], [0,0], [0,0], [0,0] ]  
#3 : [0, 0, 1, 1]  

**After merge**  
#0, #1, #3 : [ [1,0,0], [0,0,0], [0,0,1], [0,0,1] ]  
然后计算所有可能排列的概率
[0,0,0]
,…,
[1,1,1]
,并重复计算熵


因此,我如何用java编写代码,以灵活的方式查找概率,因为位可能更长,而查找概率的排列模式可能更长

这是我尝试过的代码,但它只适用于第一个代码,不确定如何合并它并计算合并时的概率:

public static double calculateEntropy(ArrayList<Integer> bitSet){
     double entropy = 0.0;
     double P_C0,P_C1;
     int C0_count = 0, C1_count = 0;
     int bitSize = bitSet.size();

    System.out.println("bitSet to calculate: " + bitSet);
    System.out.println("bitSize = " + bitSize);

    for (int k = 0 ; k < bitSize; k++){
        if (bitSet.get(k) == 0)
            C0_count++;
        else if (bitSet.get(k) == 1)
            C1_count++;
    }

    System.out.println("CO: " + C0_count);
    System.out.println("C1: " + C1_count);

    P_C0 = (double)C0_count/bitSize;
    P_C1 = (double)C1_count/bitSize;

    System.out.println("P_C0: " + P_C0);
    System.out.println("P_C1: " + P_C1);

    entropy = -( (P_C0*(Math.log(P_C0)/Math.log(2))) + (P_C1*(Math.log(P_C1)/Math.log(2))) );

    if(Double.isNaN(entropy)){
        entropy = (double)0.00;

    }

    return entropy;
}    
公共静态双重计算属性(ArrayList位集){
双熵=0.0;
双P_C0,P_C1;
int C0_计数=0,C1_计数=0;
int bitSize=bitSet.size();
System.out.println(“要计算的位集:“+位集”);
System.out.println(“bitSize=“+bitSize”);
for(int k=0;k
您可以先尝试按字面意思应用您的推理,然后看看您最终得到了什么。另外,您是否考虑过使用
位集
,因为您似乎只使用0或1?OP没有显示出任何解决其自身问题的尝试。这个网站的目的不是让其他人做家庭作业。请不要用准备运行的代码回答此类问题。