docs: @Override
  	public Clustering getClusteringResult() {
  		List<double[]> microClustering;
  		// If the buffer phase is active then the buffer (without duplicates) is
  		// equal to the micro clustering
  		if (this.bufferPhase) {
  			microClustering = new ArrayList<double[]>(this.buffer.size());
  			for (double[] pointA : this.buffer) {
  				// Searches for a duplicate of the current point
  				boolean duplicate = false;
  				for (double[] pointB : microClustering) {
  					int i;
  					for (i = 0; i < pointA.length; i++) {
  						if (pointA[i] != pointB[i + 1]) {
  							break;
  						}
  					}
  					if (i == pointA.length) {
  						duplicate = true;
  						pointB[0] += 1;
  						break;
  					}
  				}
  
  				if (!duplicate) {
  					// Copies the point to an array with the weight in the first
  					// element
  					double[] pointWeighted = new double[pointA.length + 1];
  					pointWeighted[0] = 1;
  					System.arraycopy(pointA, 0, pointWeighted, 1, pointA.length);
  					microClustering.add(pointWeighted);
  				}
  			}
  		} else {
  			// Collects all nodes as arrays with the weight in the first element
  			microClustering = this.root
  					.addToClusteringCenters(new ArrayList<double[]>(this.rootCount));
  		}
  		// Runs the k-means algorithm five times on the micro clustering
  		List<double[]> result = null;
  		double minValue = Double.POSITIVE_INFINITY;
  		for (int i = 0; i < 5; i++) {
  			// Creates the starting centroids
  			List<double[]> newResult = CoresetKMeans
  					.generatekMeansPlusPlusCentroids(this.numClusters,
  							microClustering, this.clustererRandom);
  			// Runs the k-means algorithm with changing the starting centroids
  			double newValue = CoresetKMeans.kMeans(newResult, microClustering);
  			// Selects the result with minimum costs
  			if (newValue < minValue) {
  				result = newResult;
  				minValue = newValue;
  			}
  		}
  
  		// Prepares the points for the clustering result
  		AutoExpandVector<Cluster> resultClustering = new AutoExpandVector<Cluster>(
  				result.size());
  		for (double[] point : result) {
  			resultClustering.add(new SphereCluster(point, 0.0));
  		}
  		return new Clustering(resultClustering);
  	}