博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Trie(字典树)
阅读量:5031 次
发布时间:2019-06-12

本文共 1044 字,大约阅读时间需要 3 分钟。

  • Trie树

  Trie树是一种用于实现字符串快速检索的多叉树结构。Trie的每个节点都拥有若干个字符指针,若在插入或检索字符串时扫描到一个字符c,就沿着当前节点的c字符指针,走向该指针指向的节点。

 

  • 初始化

  一棵空Trie仅包含一个根节点,该点的字符指针均指向空。

  • 插入

  当需要插入一个字符串S时,我们令一个指针P起初指向根节点。然后,依次扫描S中的每个字符c:

    1.若P的c字符指针指向一个已经存在的节点Q,则令P = Q。

    2.若P的c字符指针指向空,则新建一个节点Q,令P的c字符指针指向Q,然后令P = Q。

  当S中的字符扫描完毕时,在当前节点P上标记它是一个字符串的末尾。

        

  • 检索

  当需要检索一个字符串S在Trie是否存在时,我们令一个指针P起初指向根节点,然后依次扫描S中的每个字符c:

    1.若P的c字符指针指向空,则说明S没有被插入过字典树,结束检索。

    2.若P的c字符指针指向一个已经存在的节点Q,则令P=Q。

  当S中的字符扫描完毕时,若当前节点P被标记为一个字符串的末尾,则说明S在字典树中存在,否则说明S没有被插入过。

1 int trie[N][26], val[N]; 2 int tot = 1; 3 void Insert(char* s) 4 { 5     int len = strlen(s), p = 1; 6     forn(k, len) 7     { 8         int ch = s[k] - 'a'; 9         if(trie[p][ch]==0)10             trie[p][ch] = ++tot;11         p = trie[p][ch];12     }13     val[p] = true;14 }15 bool Search(char* s)16 {17     int len = strlen(s), p = 1;18     forn(k, len)19     {20         p = trie[p][s[k] - 'a'];21         if(p==0)22             return false;23     }24     return val[p];25 }
View Code

 

转载于:https://www.cnblogs.com/zssst/p/11157803.html

你可能感兴趣的文章
使用自定义端点创建一个巴斯启用桌面应用程序发送通知到您的移动应用程序...
查看>>
抢占旅游移动APP高地
查看>>
ucore lab2
查看>>
[Untiy]贪吃蛇大作战(一)——开始界面
查看>>
网站中集成jquery.imgareaselect实现图片的本地预览和选择截取
查看>>
random(随机)模块
查看>>
1365 - 木杆上的蚂蚁
查看>>
Spire pdf 操作pdf,页眉 页脚 水印 二维码
查看>>
[bzoj3668][Noi2014]起床困难综合症/[洛谷3613]睡觉困难综合症
查看>>
Hibernate案例-------基于xml配置,使用Hibernate实现对员工表的增、删、改、查功能...
查看>>
Web前端面试题目汇总
查看>>
centos 7.0 下安装FFmpeg软件 过程
查看>>
Python oct() 函数
查看>>
【学习总结】GirlsInAI ML-diary day-6-String字符串
查看>>
【问题解决方案】知乎某个答案的链接在哪里的问题
查看>>
VC2005 向窗口的按钮发送单击消息
查看>>
java 中如何连接 oracle 数据库
查看>>
weui button的使用
查看>>
使用TidCookieManager得到cookie
查看>>
faiss学习
查看>>