字典树(Trie)不懂?看这篇就够了

字典树(Trie)

是一种数据结构。

当出现大量字符串时考虑用字典树或者哈希表。

字典树的实现(C++):

  • 时间复杂度:初始化为 O(1),其余操作为 O(|S|),其中 |S| 是每次插入或查询的字符串的长度。

    空间复杂度:O(∣T∣⋅Σ),其中 |T| 为所有插入字符串的长度之和,Σ 为字符集的大小,一般情况Σ=26。

class Trie {
    private:
    	vector<Trie*>child;	/* 孩子 */
    	boool isEnd;		/* 是否是单词结尾 */
    	/** 返回查找字符串的最后一个字符,可以供seach函数与startswith函数复用*/
    	Trie* seachfix(string prefix) {
            Trie* node = this;
            for(char ch:prefix) {
                if(node->child[ch-'a']==nullptr)
                    return nullptr;
                node = node->child[ch-'a'];
            }
            return node;
        }
    public:
    	/** 构造函数 */
    	Trie() : child(26,nullptr),isEnd(false){}
    
    	/* 插入单词 */
    	void insert(string word) {
            Trie* node = this;
            for(char ch:prefix) {
                if(node->child[ch-'a']==nullptr)
                    node->child[ch-'a']=new Trie();
                node = node->child[ch-'a'];
            }
            node->End = true;
        }
    	
    	/* 搜索字典树中是否存在该字符串 */
    	bool search(string word) {
            Trie* node = this->seachprefix(word);
            return node!=nullpter&&node->isEnd;
        }
    
    	/* 搜索字典树中是否有匹配前缀的字符串 */
    	bool startsWith(string prefix) {
            return this->searchprefix(prefix)!=nullptr;
        }
}

应用:

  • 前缀匹配
  • 词频统计
Tokens:然后按提示生成Token串,那一串东西也就是我们上面出错的地方应该输的密码!不过这里不建议这样远程拉取,我们直接在主页下载压缩包,CV到/Ubuntu22.04/home/user 下,再在vscode里打开:先查看更多版本:找到Fall 2023弄好之后打开vscode, 远程连接上wsl,此时应该是这样的:然后按着主页一步步BUILD:sudo build_support/packages.sh这里不出意外的话会出意外,也是我遇到的第二个拦路虎:这里出错涉及到packages.sh文件的读写权限,感谢我的舍友帮我解决,大家照着图中一步步输入:llll build_supportsudo chmod -R 777 ./然后重新输入:sudo build_support/packages.sh就可以继续按着官网主页顺利完成BUILD环节了!$ mkdir build$ cd build$ cmake ..$ makeIf you want to compile the system in debug mode, pass in the following flag to cmake: Debug mode:$ cmake -DCMAKE_BUILD_TYPE=Debug ..$ make -j`nproc`环境搭建也到此结束。2.TASK 1俗话说得好:”万事配环境难!“现在我们已经搭建好了环境,接下来就摩拳擦掌,正式进行P0的编写在 task1 中我们一共需要用到三个文件:/src/include/primer/trie.h/src/primer/trie.cpptest/primer/trie_test.cpptire.h:头文件,需要我们读懂,并且用到一些变量名tire.cpp:在此文件里写代码tire_test.cpp:给定好的测试文件,用来测试TASK 1是否通过在写代码之前一件很很很重要的事情:代码格式!!!Google C++ Style
最新发布
04-05
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值