PriorsClassParentSon[i][j][k]=m_CondiCounts[i][pIndex+j][sIndex+k]/m_NumInstances;
PriorsClassParentSon[i][j][k]=m_ClassAttAttCounts[i][pIndex+j][sIndex+k]/m_NumInstances;
  private double conditionalMutualInfo(int son, int parent)throws Exception{    double CondiMutualInfo=0;    int sIndex=m_StartAttIndex[son];    int pIndex=m_StartAttIndex[parent];    double[] PriorsClass = new double[m_NumClasses];    double[][] PriorsClassSon=new double[m_NumClasses][m_NumAttValues[son]];    double[][] PriorsClassParent=new double[m_NumClasses][m_NumAttValues[parent]];    double[][][] PriorsClassParentSon=new double[m_NumClasses][m_NumAttValues[parent]][m_NumAttValues[son]];    for(int i=0;i<m_NumClasses;i++){      PriorsClass[i]=m_ClassCounts[i]/m_NumInstances;    }    for(int i=0;i<m_NumClasses;i++){      for(int j=0;j<m_NumAttValues[son];j++){        PriorsClassSon[i][j]=m_CondiCounts[i][sIndex+j][sIndex+j]/m_NumInstances;      }    }    for(int i=0;i<m_NumClasses;i++){      for(int j=0;j<m_NumAttValues[parent];j++){        PriorsClassParent[i][j]=m_CondiCounts[i][pIndex+j][pIndex+j]/m_NumInstances;      }    }    for(int i=0;i<m_NumClasses;i++){      for(int j=0;j<m_NumAttValues[parent];j++){        for(int k=0;k<m_NumAttValues[son];k++){          PriorsClassParentSon[i][j][k]=m_CondiCounts[i][pIndex+j][sIndex+k]/m_NumInstances;        }      }    }    for(int i=0;i<m_NumClasses;i++){      for(int j=0;j<m_NumAttValues[parent];j++){        for(int k=0;k<m_NumAttValues[son];k++){          CondiMutualInfo+=PriorsClassParentSon[i][j][k]*log2(PriorsClassParentSon[i][j][k]*PriorsClass[i],PriorsClassParent[i][j]*PriorsClassSon[i][k]);        }      }    }    return CondiMutualInfo;  }