docs: public PointerPrototypeHierarchyRepresentationResult run(Database db, Relation<O> relation) {
      DistanceQuery<O> dq = DatabaseUtil.precomputedDistanceQuery(db, relation, getDistanceFunction(), LOG);
      final DBIDs ids = relation.getDBIDs();
  
      // Initialize space for result:
      PointerHierarchyRepresentationBuilder builder = new PointerHierarchyRepresentationBuilder(ids, dq.getDistanceFunction().isSquared());
      Int2ObjectOpenHashMap<ModifiableDBIDs> clusters = new Int2ObjectOpenHashMap<>(ids.size());
  
      MatrixParadigm mat = new MatrixParadigm(ids);
      ArrayModifiableDBIDs prots = DBIDUtil.newArray(MatrixParadigm.triangleSize(ids.size()));
  
      MiniMax.initializeMatrices(mat, prots, dq);
  
      nnChainCore(mat, prots.iter(), dq, builder, clusters);
  
      return (PointerPrototypeHierarchyRepresentationResult) builder.complete();
    }