字典树数组实现「建议收藏」

字典树数组实现「建议收藏」字典树是一种很实用也相对好理解的数据

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

   

字典树又称单词查找树,Trie树,是一种树形结构。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较。

之前在网上找的都是些用指针实现的,代码看起来很难懂,今天学习了一种用数组实现的。学习起来简单易懂


int ch[200010][27];  //节点编号   
int sz;        //字典树节点个数
int val[200010];   //节点的值
void init()
{
    sz=1;
    memset(ch,0,sizeof(ch));
    memset(val,0,sizeof(val));
}
void insert(char *s)
{
    int u=0,c;
    for(int i=0;i<strlen(s);i++)
    {
        c=s[i]-'a';
        if(!ch[u][c])
            ch[u][c]=sz++;
        u=ch[u][c];
        val[u]++;        //!!!
    }
}
int query(char *s)
{
    int u=0,c;
    for(int i=0;i<strlen(s);i++)
    {
        c=s[i]-'a';
        if(!ch[u][c])
            return 0;
        u=ch[u][c];
    }
    return  val[u];
}

说明一下代码中注释的部分,这个语句放在for循环外面有时也是很方便的,当遇到一些特殊的标记,比如1或-1,就代表着字符串的结束,而字符串的中间部分默认都为0。这在有些题中使用是很方便的。


这个数组实现和指针的版本也是有些区别的,数组的版本并不怎么直观,因为在数组中实现的树没有“层”的概念。代替的是节点的“编号”,通过这个编号可以向“下一层”去找节点,也可以通过编号获得字符串的一些其他信息,很多题都需要在结构体或是数组中记录或保存信息,当然这个下标利用的就是“编号”。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197523.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm配置pytorch的坑以及解决方案「建议收藏」

    pycharm配置pytorch的坑以及解决方案「建议收藏」1.好像不支持python3.8。直接从setting里面安装时不行的,按其它教程(https://blog.csdn.net/lyz21/article/details/104295042)从官网https://pytorch.org/get-started/locally/,拷贝链接用pip下载,一直报找不到版本。后来发现,python3.8的原因,改成python3.7可以了,但会一直连接超时。2.发现要下载的其实是这两个文件:点开下面的两个链接,用下载软件下载了,我下到了e盘,直接pip

    2025年6月10日
    1
  • 无聊日常——对QQ邮箱盗号邮件的垃圾账号填充

    无聊日常——对QQ邮箱盗号邮件的垃圾账号填充本篇关键字:QQ盗号,域名分析,目录扫描,垃圾信息倾倒最近收到一封诡异的邮件,如下图:好奇的我扫码进去看到了qqmail的登录界面,直觉告诉我这是个假粉丝!(重庆腔)咳…是假的网站,进一步发现它的地址为:http://dhdjfekljjf.jcikiybk.lsdhdjeicgj.com.cn/mail1/嗯…下面就开始搞事了。(咦?自动变绿?)首先1、猜它的所有目录首先解析域…

    2022年7月26日
    9
  • python基础(9)增强型赋值与使用普通赋值的区别

    python基础(9)增强型赋值与使用普通赋值的区别前言增强型赋值语句是经常被使用到的,因为从各种学习渠道中,我们能够得知i+=1的效率往往要比i=i+1更高一些(这里以+=为例,实际上增强型赋值语句不仅限于此)。所以我们会乐此不

    2022年7月28日
    4
  • JUC多线程:创建线程的四种方式

    JUC多线程:创建线程的四种方式

    2021年10月5日
    41
  • 明翰英语教学系列之雅思常见词汇与固定搭配篇V1.0(持续更新)「建议收藏」

    明翰英语教学系列之雅思常见词汇与固定搭配篇V1.0(持续更新)「建议收藏」按场景记忆是最高效的,这里给出的音标全部是英氏。跟你没有相关性的表达你也要记下来,不仅可以用在听力、阅读、写作,还因为在雅思口语PART3中可能会问一些分类讨论的话题,不仅仅只说自己的情况。

    2022年6月10日
    343
  • modelsim破解

    modelsim破解http://wenku.baidu.com/link?url=sinFpZ6VwBO7O0U1Zecq0LjtoVuHt-xZLOBRkeeOFOpqlWAj-tX8EF_H2blOFVidMU8n9IPzVockc0usI5t5Hgp1Ou54ZBbpFRv8gGRXZVKmodelsim破解版教程说找不到什么文件,可能就是属性设置为已读下面是加入xilinx的破…

    2022年5月24日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号