特里结构建筑在Java [复制](trie building in java [duplicate]

2019-08-20 08:57发布

这个问题已经在这里有一个答案:

  • 特里实现 6个回答

如何构建从文件树? 我希望能够从文件中读取它们,然后添加到适当的水平

Answer 1:

在我看来,你是想实现线索。

看看这里在java中一个很好的实现: http://www.cs.duke.edu/~ola/courses/cps108/fall96/joggle/trie/Trie.java



Answer 2:

如果你有叶子(实际的话)之前,在树中只有两个级别,你可以简单地开始与阵列,28元是和字母转换为指数(即== 1,B == 2等)。 数组的元素可以是某个集合/列表包含完整的话。 您可以懒洋洋地创建数组和列表(即创建根阵,但有零点为其他阵列和单词列表,那么你需要时才/创建阵列/列表)。

我在阅读规则,你应该正确地遵循?

PS我觉得用数组全尺寸各不上空间太浪费以及它应该是非常快的地址

更新:@ user1747976,以及每个阵列需时约28 * 4或28×8比特+ 12个字节的开销 。 希望你使用压缩OPS所以它是28×4 + 12 =每个阵列116bytes。 现在,如果你想成为高效存储或处理效率取决于。 为了高效利用内存,你可以使用某种HashMap中,而不是阵列的,但我不知道的额外开销会小于你的阵列使用的。 处理将是肯定要糟糕的多。 你需要使用一些聪明的环一批取决于树部门要求的时间。 用于插入树一些丑陋的伪代码:

root=new Object[28];
word="something";
pos = root;
wordInd=1;
for (int i=1; i<=TREE_DEPTH ; i++) {
   targetpos = letterInd(letter(wordInd,word));
   if (i==TREE_DEPTH) {
      if (pos[targetpos] == null) pos[targetpos] = new HashSet<String>();
      (Set) pos[targetpos].add(word);
      break;
   } else {
      if (pos[targetpos] == null) pos[targetpos] = new Object[28];
      wordInd++;
      pos = pos[targetpos];
   }
}

类似的循环中,您可以使用检索词。



Answer 3:

添加

在根开始,搜索第一(或电流)的来信。 如果发现那封信,然后移动到该节点并搜索下一个字母。 如果没有找到信,搜索匹配当前信,如果有类似的词,然后添加当前的信作为一个新的节点,并根据移动这两个词一个词,否则加注。

注意:这将导致更多的是为搜索优化,然后在这个例子中所示的树的树。 (金刚烷和适应将在另一个“一”节点被分组)

更新:看看维基百科的文章特里



文章来源: trie building in java [duplicate]
标签: java file insert