/** * Execute the cluster merge. * * @param size Data set size * @param scratch Scratch space. * @param ix First iterator * @param iy Second iterator * @param builder Hierarchy builder * @param mindist Distance that was used for merging * @param x First matrix position * @param y Second matrix position */ protected void merge(int size, double[] scratch, DBIDArrayIter ix, DBIDArrayIter iy, PointerHierarchyRepresentationBuilder builder, double mindist, int x, int y) { // Avoid allocating memory, by reusing existing iterators: ix.seek(x); iy.seek(y); if(LOG.isDebuggingFine()) { LOG.debugFine("Merging: " + DBIDUtil.toString(ix) + " -> " + DBIDUtil.toString(iy) + " " + mindist); } // Perform merge in data structure: x -> y assert(y < x); // Since y < x, prefer keeping y, dropping x. builder.add(ix, mindist, iy); // Update cluster size for y: final int sizex = builder.getSize(ix), sizey = builder.getSize(iy); builder.setSize(iy, sizex + sizey); // Note: this changes iy. updateMatrix(size, scratch, iy, builder, mindist, x, y, sizex, sizey); }
/** * Execute the cluster merge. * * @param end Active set size * @param mat Matrix paradigm * @param builder Hierarchy builder * @param mindist Distance that was used for merging * @param x First matrix position * @param y Second matrix position */ protected void merge(int end, MatrixParadigm mat, PointerHierarchyRepresentationBuilder builder, double mindist, int x, int y) { // Avoid allocating memory, by reusing existing iterators: final DBIDArrayIter ix = mat.ix.seek(x), iy = mat.iy.seek(y); if(LOG.isDebuggingFine()) { LOG.debugFine("Merging: " + DBIDUtil.toString(ix) + " -> " + DBIDUtil.toString(iy) + " " + mindist); } // Perform merge in data structure: x -> y assert (y < x); // Since y < x, prefer keeping y, dropping x. builder.add(ix, linkage.restore(mindist, getDistanceFunction().isSquared()), iy); // Update cluster size for y: final int sizex = builder.getSize(ix), sizey = builder.getSize(iy); builder.setSize(iy, sizex + sizey); updateMatrix(end, mat, builder, mindist, x, y, sizex, sizey); }
builder.add(ix, mindist, iy);
/** * Execute the cluster merge. * * @param end Active set size * @param mat Matrix paradigm * @param builder Hierarchy builder * @param mindist Distance that was used for merging * @param x First matrix position * @param y Second matrix position */ protected void merge(int end, MatrixParadigm mat, PointerHierarchyRepresentationBuilder builder, double mindist, int x, int y) { // Avoid allocating memory, by reusing existing iterators: final DBIDArrayIter ix = mat.ix.seek(x), iy = mat.iy.seek(y); if(LOG.isDebuggingFine()) { LOG.debugFine("Merging: " + DBIDUtil.toString(ix) + " -> " + DBIDUtil.toString(iy) + " " + mindist); } // Perform merge in data structure: x -> y assert (y < x); // Since y < x, prefer keeping y, dropping x. builder.add(ix, linkage.restore(mindist, getDistanceFunction().isSquared()), iy); // Update cluster size for y: final int sizex = builder.getSize(ix), sizey = builder.getSize(iy); builder.setSize(iy, sizex + sizey); updateMatrix(end, mat, builder, mindist, x, y, sizex, sizey); }
builder.add(ix, linkage.restore(mindist, getDistanceFunction().isSquared()), iy);
builder.add(ix, linkage.restore(mindist, getDistanceFunction().isSquared()), iy);
builder.add(ix, distances[offset], iy, prots.seek(offset));
builder.add(ix, distances[offset], iy, prots.seek(offset));
builder.add(ix, distances[offset], iy, prots.seek(offset));
builder.add(ix, distances[offset], iy, prots.seek(offset));