code: private double[][] computeDiffs(List<CLIQUESubspace> denseSubspaces, int[] mi, int[] mp) {
      int n = denseSubspaces.size() - 1;
  
      double[] diff_mi = new double[n + 1], diff_mp = new double[n + 1];
      double resultMI = 0, resultMP = 0;
  
      for(int i = 0; i < denseSubspaces.size(); i++) {
        double diffMI = Math.abs(denseSubspaces.get(i).getCoverage() - mi[i]);
        resultMI += log2OrZero(diffMI);
        double diffMP = (i != n) ? Math.abs(denseSubspaces.get(n - i).getCoverage() - mp[n - 1 - i]) : 0;
        resultMP += log2OrZero(diffMP);
        diff_mi[i] = resultMI;
        if(i != n) {
          diff_mp[n - 1 - i] = resultMP;
        }
      }
      return new double[][] { diff_mi, diff_mp };
    }
docs: The specified sorted list of dense subspaces is divided into the selected
  set I and the pruned set P. For each set the difference from the specified
  mean values is computed.
  
  @param denseSubspaces denseSubspaces the dense subspaces in reverse order
  by their coverage
  @param mi the mean of the selected sets I
  @param mp the mean of the pruned sets P
  @return the difference from the specified mean values, the first value is
  the difference from the mean of the selected set I, the second
  value is the difference from the mean of the pruned set P.