double findMinimalSimilarity(@NotNull UsageCluster usageCluster, @NotNull Bag newUsageFeatures) {
    double min = MAXIMUM_SIMILARITY;
    double max = MINIMUM_SIMILARITY;
    for (SimilarUsage usage : usageCluster.getUsages()) {
      final double similarity = jaccardSimilarityWithThreshold(usage.getFeatures(), newUsageFeatures, myThreshold);
      if (lessThen(similarity, min)) {
        min = similarity;
      }
      if (lessThen(max, similarity)) {
        max = similarity;
      }
      if (isCompleteMatch(max)) {
        return MAXIMUM_SIMILARITY;
      }
      if (lessThen(min, myThreshold)) {
        return MINIMUM_SIMILARITY;
      }
    }
    return min;
  }
double findMinimalSimilarity(@NotNull UsageCluster usageCluster, @NotNull Bag newUsageFeatures)