首页 > 其他分享 >【数据结构】 字典树trie详解

【数据结构】 字典树trie详解

时间:2024-12-03 20:32:46浏览次数:9  
标签:ch trie tag int 详解 字符串 数据结构 节点 字典

定义:

将多个字符串以树的方式存储即为字典树,如图,\(1,4,3,12\) 表示 \(cca\) ,我么用 \(ch[i][j]\) 来表示第 \(i\) 个节点的 \(j\) 字符所指向的下一个节点,\(tag[u]\) 表示节点 \(u\) 是否代表一个字符串的结尾,如果是的话,\(tag[u]=1\)。

模板CODE

添加字符串

//n表示即将要向字典树插入n个字符串
const N 100005;
scanf("%d",&n);
    for (int i=1;i<=n;i++){
        char s[N];
        scanf("%s",s+1);
        int u=1;
        for (int j=1;s[j];j++){
            int c=s[j]-'a';
            if (!ch[u][c]) ch[u][c]=++tot;
            u=ch[u][c];
        }
        tag[u]=1;
    }

字符串查找

//查看字符串s是否在字典树当中,如果在输出OK,否则输出WRONG
char s[N];
scanf("%s",s+1);
        int u=1;
        for (int i=1;s[i];i++){
            int c=s[i]-'a';
            u=ch[u][c];
            if (!u) break;
        }
        if (tag[u]==1){
            puts("OK");
            continue;
        }
        else {
            puts("WRONG");
            continue;
        }

例题

(P2580 于是他错误的点名开始了)[https://www.luogu.com.cn/problem/P2580]

维护异或极值

待补充

标签:ch,trie,tag,int,详解,字符串,数据结构,节点,字典
From: https://www.cnblogs.com/ZYStream/p/18584985

相关文章

  • 镜像私有仓库的搭建步骤详解
    一、安装Docker首先,你需要在服务器上安装Docker。安装步骤因操作系统而异,但通常可以从Docker官方网站下载适用于你的操作系统的安装包,并按照官方文档的指引进行安装。二、配置Docker信任地址(可选)如果你的镜像仓库地址不在Docker的默认信任列表中,你需要在Docker配置文件中......
  • 数据结构与算法
    一、引言数据结构与算法是计算机科学中的基础概念,它们相互依存,共同构成了计算机程序设计和问题解决的基础。数据结构定义了数据的组织方式,而算法则是解决问题的步骤。选择合适的数据结构可以提高算法的效率,而高效的算法则需要合适的数据结构来支撑。本文将详细介绍数据结构与......
  • ChannelPipeline和ChannelHandle详解
    本文主要讲解ChannelPipeline和ChannelHandle的作用ChannelPipeline和ChannelHandle的定义当有一个客户端连接SocketChannl的时候初始化的时候,Netty会为他准备一个ChannelPipelin。在ChannelPipelin有由ChannelHandleContext构成的双向链表,每个ChannelHandleContext内部持有一......
  • Android系统资源管理与电池优化策略详解
    Android系统作为全球最流行的移动操作系统之一,其性能优化一直是开发者和用户关注的焦点。在有限的硬件资源下,如何高效地管理资源并延长电池续航,是提升用户体验的关键。本文将聚焦于Android系统的资源管理策略,特别是内存管理、进程管理,以及电池优化方面,进行深入探讨。资源管理策略......
  • Stable Diffusion-提示语用法详解
    1.文生图提示词在SD里面,最基本的出图功能,就是“文生图”,而这里“文”指的提示词(Prompt)。Prompt是指用户输入的文本或图像信息,目的是指导模型根据一些特定需求生成艺术作品。stablediffusion整合包以及提示词插件可以扫描下方,免费获取2.提示词-规则\1.只接受......
  • 【初阶数据结构与算法】二叉树顺序结构---堆的应用之堆排、Top-K问题
    文章目录一、堆排引入之使用堆排序数组二、真正的堆排1.向上调整算法建堆2.向下调整算法建堆3.向上和向下调整算法建堆时间复杂度比较4.建堆后的排序4.堆排序和冒泡排序时间复杂度以及性能比较三、Top-K问题一、堆排引入之使用堆排序数组   在了解真正的堆排之......
  • Java中集合的的多字段排序(链式排序)详解
    链式排序(ChainedSorting)详解链式排序(ChainedSorting)是指通过多个比较条件,依次对数据进行排序的方法。它是一种在一个排序规则的基础上,利用第二排序规则、第三排序规则等,来细化排序过程的技术。在Java中,Comparator接口提供了非常便捷的方式来实现链式排序,通常应用于复......
  • ResourceBundle详解:Java中的国际化与资源管理
    ResourceBundle详解:Java中的国际化与资源管理在开发多语言支持(国际化,i18n)或需要动态加载资源的应用程序时,ResourceBundle是Java提供的核心类之一。它能够根据用户的语言和地区加载对应的资源文件,从而实现应用的本地化和灵活的配置管理。本文将深入探讨ResourceBundle的使用......
  • Java 类加载、类加载器及双亲委派机制详解
    Java类加载、类加载器及双亲委派机制详解在Java中,类加载是JVM运行的重要环节,而类加载器则是负责将.class文件加载到内存中的核心组件。本文详细介绍类加载的过程、类加载器的工作机制及双亲委派机制,同时比较OracleJDK8与JDK9及之后版本在类加载器上的变化。1.类的加载类......
  • Linux常用命令之wget命令详解
    wget命令详解wget是一个在命令行中使用的工具,它用于从网络上下载文件。这个工具支持多种协议,包括HTTP、HTTPS和FTP,并且提供了丰富的选项来控制下载过程。wget的强大之处在于它的非交互性,这意味着它可以在用户没有登录的情况下运行,非常适合自动化脚本使用。以下是wget......