当前位置: 首页 > 知识库问答 >
问题:

trie实现中的字计数

呼延子安
2023-03-14

我正在实现一个植入拼写词典的trie。trie的基本元素是一个trienode,它由一个字母部分(char)、一个标志(这个char是否是单词的最后一个char)和一个由26个指针组成的数组组成。

TrieNode类的私有部分包括:

ItemType item;//char
bool isEnd;//flag
typedef TrieNode* TrieNodePtr;
TrieNodePtr myNode;
TrieNodePtr array[26];//array of pointers

这是测试调用的一部分:

Trie t4 = Trie();
t4.insert("for");
t4.insert("fork");
t4.insert("top");
t4.insert("tops");
t4.insert("topsy");
t4.insert("toss");
t4.print();
cout << t4.wordCount() << endl;

现在,我正在尝试遍历trie以计算有多少单词(有多少标志被设置为true)。

size_t TrieNode::wordCount() const{
    for (size_t i = 0; i < 26; i++){
        if (array[i] == nullptr){
            return 0;
        }
        if (array[i]->isEnd && array[i] != nullptr){
            cout << "I'm here" << endl;
            return 1 + array[i]->wordCount();
        }
        else if(!array[i]->isEnd && array[i]!=nullptr){
            cout << "I'm there" << endl;
            return 0 + array[i]->wordCount();
        }
        else{
            // do nothing
        }
    }
}

每次函数返回0。我知道这是因为当数组中的第一个元素为null时,函数就会退出,所以计数总是0。但我不知道如何避免这一点,因为每次我都从第一个指针开始。我还得到一个警告:不是所有的控制路径都返回一个值。我不确定这是从哪里来的。如果当前指针为空,如何使函数继续到数组中的下一个指针?有没有更有效的方法来数词呢?谢谢!

共有1个答案

秦滨海
2023-03-14

这里有一个简单明了的方法(使用深度优先搜索):

size_t TrieNode::wordCount() const {
    size_t result = isEnd ? 1 : 0;
    for (size_t i = 0; i < 26; i++){
        if (array[i] != null)
            result += array[i]->wordCount();
    return result;
}
 类似资料:
  • 问题内容: 我试图实现一个帕特里夏特里结构的方法,以及作为一种手段来存储大字典中的字进行快速检索(包括前缀搜索)的。我已经阅读了这些概念,但是并没有明确说明它们的实现。我想知道(用Java或Python代码)如何实现Trie,特别是节点(或者我应该递归实现)。我看到一个人用将26个子节点设置为null / None来实现它。有没有更好的策略(例如将字母当作位),您将如何实现呢? 问题答案: 有人问

  • 在本教程之后,我遇到了Trie数据结构。因为最近我一直在用PHP编程,所以我试图用它来解决讲座中的问题。我能够获得正确的答案,但只适用于较小的输入(输入#10是一个2,82 MB的文件)。显然,我的算法缩放不好。它还超过了PHP默认的128 MB内存限制。 Trie中存储了一个根节点。每个节点都有一个“子”成员。我使用标准PHP数组来存储子对象。子键表示一个字符(目前我正在为每个字符创建一个新节点

  • 本文向大家介绍Trie树(字典树)的介绍及Java实现,包括了Trie树(字典树)的介绍及Java实现的使用技巧和注意事项,需要的朋友参考一下 简介 Trie树,又称为前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。 它的主

  • 我目前正在开发一个trie实现: 从文本文件中读取单词 逐个字符迭代该单词 将字符的按字母顺序排列的索引号附加到新节点并附加到根节点 我在第三步遇到了麻烦。 你看,我在第三步尝试做的是: null 对于第3步,我已经做了: 它设置root以便它现在是下一个节点 我在这些陈述中犯了什么逻辑错误吗?

  • 我目前正在哈佛大学做CS50,目标是以最快的方式将字典加载到任何数据结构中。对于这个习题集,我用的是trie。 我的代码背后的逻辑如下: null 但问题是,它在我的其他一些实现中有效,只有在这个实现中,它突然停止工作,并在第一个单词后给了我一个切分错误。正如我所说,我是一个初学者在编码,所以请启发我和批评我的实现!多谢了。 编辑: 我的另一个问题是,为什么在我当前的代码中,它不能检测空终止符\0

  • 本文向大家介绍PHP字典树(Trie树)定义与实现方法示例,包括了PHP字典树(Trie树)定义与实现方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP字典树(Trie树)定义与实现方法。分享给大家供大家参考,具体如下: Trie树的概念(百度的解释):字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字