def search(query_string, alpha, measure = @measure)
      feature_set = @feature_extractor.features(query_string)
      feature_set_size = feature_set.size
      matches = []
      min_feature_size_of_matching_string = measure.min_feature_size(@db, feature_set_size, alpha)
      max_feature_size_of_matching_string = measure.max_feature_size(@db, feature_set_size, alpha)
      (min_feature_size_of_matching_string..max_feature_size_of_matching_string).each do |candidate_match_feature_size|
        tau = min_overlap(measure, feature_set_size, candidate_match_feature_size, alpha)
        additional_matches = overlap_join(feature_set, tau, @db, candidate_match_feature_size)
        matches.concat(additional_matches)
      end
      matches
    end
def search(query_string, alpha, measure = @measure)
      feature_set = @feature_extractor.features(query_string)
      feature_set_size = feature_set.size
      matches = []
      min_feature_size_of_matching_string = measure.min_feature_size(@db, feature_set_size, alpha)
      max_feature_size_of_matching_string = measure.max_feature_size(@db, feature_set_size, alpha)
      (min_feature_size_of_matching_string..max_feature_size_of_matching_string).each do |candidate_match_feature_size|
        tau = min_overlap(measure, feature_set_size, candidate_match_feature_size, alpha)
        additional_matches = overlap_join(feature_set, tau, @db, candidate_match_feature_size)
        matches.concat(additional_matches)
      end
      matches
    end
Implements "Algorithm 1: Approximate dictionary matching" described in "Simple and Efficient Algorithm for Approximate Dictionary Matching" (see http://www.aclweb.org/anthology/C10-1096)
 Returns an array of matching strings.
 Example:
   matcher.search("Fooo", 0.5)
   => ["Foo", "Food", "Foot"]