docs: private long[] determinePreferenceVectorByMaxIntersection(ModifiableDBIDs[] neighborIDs, StringBuilder msg) {
      int dimensionality = neighborIDs.length;
      long[] preferenceVector = BitsUtil.zero(dimensionality);
  
      Map<Integer, ModifiableDBIDs> candidates = new HashMap<>(dimensionality);
      for(int i = 0; i < dimensionality; i++) {
        ModifiableDBIDs s_i = neighborIDs[i];
        if(s_i.size() > minpts) {
          candidates.put(i, s_i);
        }
      }
      if(msg != null) {
        msg.append("\n candidates ").append(candidates.keySet());
      }
  
      if(!candidates.isEmpty()) {
        int i = max(candidates);
        ModifiableDBIDs intersection = candidates.remove(i);
        BitsUtil.setI(preferenceVector, i);
        while(!candidates.isEmpty()) {
          i = maxIntersection(candidates, intersection);
          candidates.remove(i);
          if(intersection.size() < minpts) {
            break;
          }
          BitsUtil.setI(preferenceVector, i);
        }
      }
  
      if(msg != null) {
        msg.append("\n preference ").append(BitsUtil.toStringLow(preferenceVector, dimensionality));
        LOG.debug(msg.toString());
      }
  
      return preferenceVector;
    }