code: public void learn(RNNSearch<double[], double[]> range, double[][] samples, double radius, int Nz, double sigma) {
          TrainSample[] training = new TrainSample[samples.length];
          for (int i = 0; i < samples.length; i++) {
              training[i] = new TrainSample();
              training[i].query = samples[i];
              training[i].neighbors = new ArrayList<>();
              ArrayList<Neighbor<double[], double[]>> neighbors = new ArrayList<>();
              range.range(training[i].query, radius, neighbors);
              for (Neighbor<double[], double[]> n : neighbors) {
                  training[i].neighbors.add(keys.get(n.index));
              }
          }
  
          model = new ArrayList<>(hash.size());
          for (int i = 0; i < hash.size(); i++) {
              model.add(new PosterioriModel(hash.get(i), training, Nz, sigma));
          }
      }
docs: Train the posteriori multiple probe algorithm.
  @param range the neighborhood search data structure.
  @param radius the radius for range search.
  @param Nz the number of quantized values.
  @param sigma the Parzen window width.