Ejemplo n.º 1
0
 @Test
 public void testSinglePath() {
   Trie trie = new Trie();
   assertTrue(trie.getRoot().hasSinglePath());
   trie.add("abcdef");
   assertTrue(trie.getRoot().hasSinglePath());
   trie.add("abdfg");
   Node rootNode = trie.getRoot();
   assertEquals(2, rootNode.getChildren()[0].getChildren()[0].getChildren().length);
   assertTrue(rootNode.getChildren()[0].getChildren()[0].getChildren()[0].hasSinglePath());
   assertTrue(rootNode.getChildren()[0].getChildren()[0].getChildren()[1].hasSinglePath());
 }
Ejemplo n.º 2
0
  @Test
  public void testGetChildren() {
    Trie trie = new Trie();
    trie.add("aa");
    trie.add("ab");
    trie.add("bb");

    Node rootNode = trie.getRoot();
    assertEquals(2, rootNode.getChildren().length);
    assertEquals(2, rootNode.getChildren()[0].getChildren().length);
    assertEquals(1, rootNode.getChildren()[1].getChildren().length);
  }
Ejemplo n.º 3
0
  @Override
  public void runAlgorithm() throws InterruptedException {
    setHeader("trieinsert", s.substring(0, s.length() - 1));
    if (s.compareTo("$") == 0) {
      addNote("badword");
    }

    TrieNode v = T.getRoot();
    v.mark();
    addNote("trieinsertnote");
    addStep("trierootstart");
    pause();
    v.unmark();
    hw = new TrieWordNode(T, s);
    hw.setColor(NodeColor.INSERT);
    addToScene(hw);
    hw.goNextTo(v);

    while (s.compareTo("$") != 0) {
      final char ch = s.charAt(0);
      hw.setAndGoNextTo(s, v);
      TrieNode w = v.getChildWithCH(ch);
      if (w != null) {
        addStep("trieinsertwch", "" + ch);
      } else {
        addStep("trieinsertwoch", "" + ch);
        w = v.addChild(ch, hw.x, hw.y);
      }
      w.setColor(NodeColor.CACHED);
      T.reposition();
      pause();
      v = w;
      v.setColor(NodeColor.INSERT);
      T.reposition();
      s = s.substring(1);
    }
    hw.setAndGoNextTo(s, v);
    final TrieNode w = v.getChildWithCH('$');
    if (w == null) {
      addStep("trieinserteow");
    } else {
      addStep("trieinsertneow");
    }
    pause();
    v.setColor(NodeColor.NORMAL);
    v = v.addChild('$', hw.x, hw.y);
    T.reposition();
    hw.setAndGoNextTo(s, v);
    beforeReturn();
  }
Ejemplo n.º 4
0
  @Override
  public void run() {
    if (s.compareTo("$") == 0) {
      addNote("badword");
    }

    TrieNode v = T.getRoot();
    v.mark();
    addNote("trieinsertnote");
    addStep("trierootstart");
    mysuspend();
    v.unmark();
    T.hw = new TrieWordNode(T, s);
    T.hw.setColor(NodeColor.INSERT);
    T.hw.goNextTo(v);

    while (s.compareTo("$") != 0) {
      char ch = s.charAt(0);
      T.hw.setAndGoNextTo(s, v);
      TrieNode w = v.getChildWithCH(ch);
      if (w != null) {
        addStep("trieinsertwch", "" + ch);
      } else {
        addStep("trieinsertwoch", "" + ch);
        w = v.addChild(ch, T.hw.x, T.hw.y);
      }
      w.setColor(NodeColor.CACHED);
      T.reposition();
      mysuspend();
      v = w;
      v.setColor(NodeColor.INSERT);
      T.reposition();
      s = s.substring(1);
    }
    T.hw.setAndGoNextTo(s, v);
    TrieNode w = v.getChildWithCH('$');
    if (w == null) {
      addStep("trieinserteow");
    } else {
      addStep("trieinsertneow");
    }
    mysuspend();
    v.setColor(NodeColor.NORMAL);
    v = v.addChild('$', T.hw.x, T.hw.y);
    T.reposition();
    T.hw.setAndGoNextTo(s, v);
    beforeReturn();
  }
Ejemplo n.º 5
0
 @Test
 public void testGetRoot() {
   Trie trie = new Trie();
   Node rootNode = trie.getRoot();
   assertNotNull(rootNode);
 }
Ejemplo n.º 6
0
  public ArrayList<AlternativeString> parseString(String line, Trie trie) {

    char[] charsInLine = line.toCharArray();
    ArrayList<AlternativeString> possibleStrings = new ArrayList<AlternativeString>();
    possibleStrings.add(new AlternativeString(line, 0));
    for (int i = 0; i < charsInLine.length - 1; i++) {
      char[] twoLetters = {charsInLine[i], charsInLine[i + 1]};
      int[] results = getEntries(twoLetters);
      double probOfSpace = results[Const.BETWEEN];
      double sum =
          results[Const.AFTER]
              + results[Const.BEFORE]
              + results[Const.BETWEEN]
              + results[Const.NOSPACE];
      probOfSpace /= sum;

      if (probOfSpace > 0) { // "normalize" with divide with NOSPACE
        char[] before = new char[2];
        int[] resultsBefore = null;
        if (i != 0) {
          before[0] = charsInLine[i - 1];
          before[1] = charsInLine[i];
          resultsBefore = getEntries(before);
        }
        char[] after = new char[2];
        int[] resultsAfter = null;
        if (i != charsInLine.length - 2) {
          after[0] = charsInLine[i + 1];
          after[1] = charsInLine[i + 2];
          resultsAfter = getEntries(after);
        }
        if (resultsBefore != null) {
          double sumBefore =
              resultsBefore[Const.AFTER]
                  + resultsBefore[Const.BEFORE]
                  + resultsBefore[Const.BETWEEN]
                  + resultsBefore[Const.NOSPACE];
          probOfSpace *= (resultsBefore[Const.AFTER] / sumBefore);
        }
        if (resultsAfter != null) {
          double sumAfter =
              resultsAfter[Const.AFTER]
                  + resultsAfter[Const.BEFORE]
                  + resultsAfter[Const.BETWEEN]
                  + resultsAfter[Const.NOSPACE];
          probOfSpace *= (resultsAfter[Const.BEFORE] / sumAfter);
        }

        if (probOfSpace > THRESHOLD) {
          ArrayList<AlternativeString> toAdd = new ArrayList<AlternativeString>();
          for (int j = 0; j < possibleStrings.size(); j++) {
            AlternativeString as = possibleStrings.get(j);
            StringBuilder sb = new StringBuilder();
            sb.append(as.string);
            sb.insert((i + 1) + as.nrOfSpacesInString, ' ');
            String[] words = sb.toString().split(" ");
            String toCheck = words[words.length - 2];
            if (trie.containWord(trie.getRoot(), toCheck))
              toAdd.add(new AlternativeString(sb.toString(), (as.nrOfSpacesInString + 1)));

            // do nuttin
            // toAdd.add(new AlternativeString(sb.toString(), (as.nrOfSpacesInString+1)));

          }
          for (int j = 0; j < toAdd.size(); j++) {
            possibleStrings.add(toAdd.get(j));
          }
        }
      }
    }
    return possibleStrings;
    //		for(int i = 0; i < possibleStrings.size(); i++) {
    //			System.out.println(""+(i+1)+" "+possibleStrings.get(i).string);
    //		}
  }