docs: @Reference(authors = "L. Hubert, P. Arabie", //
        title = "Comparing partitions", //
        booktitle = "Journal of Classification 2(193)", //
        url = "https://doi.org/10.1007/BF01908075", //
        bibkey = "doi:10.1007/BF01908075")
    public double adjustedRandIndex() {
      double d = FastMath.sqrt(pairconfuse[0] + pairconfuse[1] + pairconfuse[2] + pairconfuse[3]);
      // Note: avoid (a+b)*(a+c) as this will cause long overflows easily
      // Because we have O(N^2) pairs, and thus this value is temporarily O(N^4)
      double exp = (pairconfuse[0] + pairconfuse[1]) / d * (pairconfuse[0] + pairconfuse[2]) / d;
      double opt = pairconfuse[0] + 0.5 * (pairconfuse[1] + pairconfuse[2]);
      return (pairconfuse[0] - exp) / (opt - exp);
    }