protected void runDBSCAN(Relation<O> relation,RangeQuery<O> rangeQuery){
  final int size=relation.size();
  FiniteProgress objprog=LOG.isVerbose() ? new FiniteProgress("Processing objects",size,LOG) : null;
  IndefiniteProgress clusprog=LOG.isVerbose() ? new IndefiniteProgress("Number of clusters",LOG) : null;
  processedIDs=DBIDUtil.newHashSet(size);
  ArrayModifiableDBIDs seeds=DBIDUtil.newArray();
  for (DBIDIter iditer=relation.iterDBIDs(); iditer.valid(); iditer.advance()) {
    if (!processedIDs.contains(iditer)) {
      expandCluster(relation,rangeQuery,iditer,seeds,objprog,clusprog);
    }
    if (objprog != null && clusprog != null) {
      objprog.setProcessed(processedIDs.size(),LOG);
      clusprog.setProcessed(resultList.size(),LOG);
    }
    if (processedIDs.size() == size) {
      break;
    }
  }
  LOG.ensureCompleted(objprog);
  LOG.setCompleted(clusprog);
}

protected void runDBSCAN ( Relation < O > relation , RangeQuery < O > rangeQuery ) { final int size = relation . size ( ) ; FiniteProgress objprog = LOG . isVerbose ( ) ? new FiniteProgress ( "Processing objects" , size , LOG ) : null ; IndefiniteProgress clusprog = LOG . isVerbose ( ) ? new IndefiniteProgress ( "Number of clusters" , LOG ) : null ; processedIDs = DBIDUtil . newHashSet ( size ) ; ArrayModifiableDBIDs seeds = DBIDUtil . newArray ( ) ; for ( DBIDIter iditer = relation . iterDBIDs ( ) ; iditer . valid ( ) ; iditer . advance ( ) ) { if ( ! processedIDs . contains ( iditer ) ) { expandCluster ( relation , rangeQuery , iditer , seeds , objprog , clusprog ) ; } if ( objprog != null && clusprog != null ) { objprog . setProcessed ( processedIDs . size ( ) , LOG ) ; clusprog . setProcessed ( resultList . size ( ) , LOG ) ; } if ( processedIDs . size ( ) == size ) { break ; } } LOG . ensureCompleted ( objprog ) ; LOG . setCompleted ( clusprog ) ; }
run the dbscan algorithm
