@Override public void merge(int i, int j) { float nij = n[i] + n[j]; for (int k = 0; k < i; k++) { proximity[index(i, k)] = (d(i, k) * n[i] + d(j, k) * n[j] - d(j, i) * n[i] * n[j] / nij) / nij; } for (int k = i+1; k < j; k++) { proximity[index(k, i)] = (d(k, i) * n[i] + d(j, k) * n[j] - d(j, i) * n[i] * n[j] / nij) / nij; } for (int k = j+1; k < size; k++) { proximity[index(k, i)] = (d(k, i) * n[i] + d(k, j) * n[j] - d(j, i) * n[i] * n[j] / nij) / nij; } n[i] += n[j]; } }