Esempio n. 1
0
 /**
  * Recursively adds <code>newNode</code> as <code>src</code> node's child.
  *
  * @param src
  * @param newNode
  */
 private void addInternal(BKNode src, BKNode newNode) {
   if (src.equals(newNode)) return;
   int distance = distance(src.name, newNode.name);
   BKNode bkNode = src.childAtDistance(distance);
   if (bkNode == null) {
     src.addChild(distance, newNode);
   } else addInternal(bkNode, newNode);
 }
Esempio n. 2
0
 /**
  * O(log(n)) BK Search
  *
  * @param node
  * @param maxDistance
  * @return
  */
 public List<String> search(String node, int maxDistance) {
   int distance = distance(this.name, node);
   List<String> matches = new LinkedList<String>();
   if (distance <= maxDistance) matches.add(this.name);
   if (children.size() == 0) return matches;
   int i = max(1, distance - maxDistance);
   for (; i <= distance + maxDistance; i++) {
     BKNode child = children.get(i);
     if (child == null) continue;
     matches.addAll(child.search(node, maxDistance));
   }
   return matches;
 }
Esempio n. 3
0
 /**
  * Exact word search, same as {@link search(String, 1)}
  *
  * @param q
  * @return match or empty string.
  */
 public String search(String q) {
   List<String> list = root.search(q, 1);
   return list.isEmpty() ? "" : list.iterator().next();
 }
Esempio n. 4
0
 /**
  * Performs a fuzzy search.
  *
  * @param q
  * @param maxDist
  * @return
  */
 public List<String> search(String q, int maxDist) {
   return root.search(q, maxDist);
 }