【问题标题】:Trie implementation - Inserting elements into a trieTrie 实现 - 将元素插入到 trie 中
【发布时间】:2021-05-27 22:33:39
【问题描述】:

我正在开发一个Trie 数据结构,其中每个节点代表一个单词。所以单词ststackstackoverflowoverflow将被排列为

root
--st
---stack
-----stackoverflow
--overflow

我的 Trie 在内部使用 HashTable,因此所有节点查找都需要固定时间。以下是我想出的将一个项目插入到 trie 中的算法。

  1. 检查树中是否存在项目。如果存在则返回,否则转至第二步。
  2. 迭代key 中的每个字符并检查单词是否存在。这样做直到我们得到一个可以将新值添加为子节点的节点。如果没有找到节点,则将其添加到根节点下。
  3. 插入后,重新排列新节点所在节点的兄弟节点。这将遍历所有兄弟节点并与新插入的节点进行比较。如果任何节点以与新节点相同的字符开头,它将从那里移动并添加为新节点的子节点。

我不确定这是实现 trie 的正确方法。欢迎提出任何建议或改进。

使用语言:C++

【问题讨论】:

  • @Vladimir:我的意思是Trie 不是Tree。我回滚了你的更改。
  • 我在这个答案中有一个 Python trie 实现:stackoverflow.com/questions/55210/…
  • 我有一个疑问,现在如果我想在建议框中检索或显示单词堆栈,trie 将如何区分堆栈和 stackoverflow?请帮忙。

标签: algorithm data-structures trie


【解决方案1】:

trie 应该是这样的

                      ROOT
             overflow/    \st
                    O      O
                            \ack
                             O
                              \overflow
                               O

通常你不需要使用哈希表作为 trie 的一部分; trie 本身已经是一种高效的索引数据结构。当然可以。

但无论如何,您的步骤 (2) 实际上应该在搜索期间下降 trie,而不仅仅是查询哈希函数。通过这种方式,您可以轻松找到插入点,而无需稍后单独进行搜索。

我认为步骤 (3) 是错误的,您不需要重新排列 trie,事实上您不应该这样做,因为它只是您需要的 附加 字符串片段存储在树中;见上图。

【讨论】:

  • 谢谢。我知道标准trie 看起来像你解释的那样。但我需要每个节点代表一个完整的单词,而不仅仅是后缀。下降尝试找到要插入的位置似乎是一个不错的主意。再次感谢。
  • 听起来你想要的是一个 HAT-trie。查一下。
  • @Appu:如果您的节点有父链接,即使路径仅包含“后缀”,您也始终可以获得完整的单词包
【解决方案2】:

下面是插入算法的java代码。

public void insert(String s){
  Node current = root; 
  if(s.length()==0) //For an empty character
   current.marker=true;
  for(int i=0;i<s.length();i++){
   Node child = current.subNode(s.charAt(i));
   if(child!=null){ 
    current = child;
   }
   else{
    current.child.add(new Node(s.charAt(i)));
    current = current.subNode(s.charAt(i));
   }
   // Set marker to indicate end of the word
   if(i==s.length()-1)
    current.marker = true;
  } 
 } 

如需更详细的教程,请参考here

【讨论】:

    猜你喜欢
    • 2023-02-02
    • 1970-01-01
    • 2017-12-02
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多