首页 > 其他分享 >学习笔记---Trie树

学习笔记---Trie树

时间:2024-08-21 20:54:47浏览次数:12  
标签:char return Trie res ++ 笔记 son --- int

Trie树

又叫字典树前缀树(Prefix Tree)单词查找树键树,是一种多叉树结构,可以高效存储和查找字符串集合的数据结构.

int son[N][26], cnt[N], idx;
// 0号点既是根节点,又是空节点
// son[][]存储树中每个节点的子节点
// cnt[]存储以每个节点结尾的单词数量

// 插入一个字符串
void insert(char *str)
{
    int p = 0;
    for (int i = 0; str[i]; i ++ )
    {
        int u = str[i] - 'a';
        if (!son[p][u]) son[p][u] = ++ idx;
        p = son[p][u];
    }
    cnt[p] ++ ;
}

// 查询字符串出现的次数
int query(char *str)
{
    int p = 0;
    for (int i = 0; str[i]; i ++ )
    {
        int u = str[i] - 'a';
        if (!son[p][u]) return 0;
        p = son[p][u];
    }
    return cnt[p];
}
//测试实例,Trie字符串统计
#include<iostream>
using namespace std;

const int N = 1e5+10;
int son[N][26],cent[N],idx;
char s[N];

void insert(char s[]){
    int p = 0;
    for(int i = 0;s[i];i++){
        int u = s[i]-'a';
        if(!son[p][u]) son[p][u] = ++idx;
        p = son[p][u];
    }
    cent[p]++;
}

int query(char s[]){
    int p = 0;
    for(int i = 0;s[i];i++){
        int u = s[i]-'a';
        if(!son[p][u]) return 0;
        p = son[p][u];
    }
    return cent[p];
}

int main(){
    int num;
    char c[2];
    scanf("%d",&num);
    
    while(num--){
        scanf("%s%s",c,s);
        if(c[0]=='I') insert(s);
        if(c[0]=='Q') printf("%d\n",query(s));
    }
    
    return 0;
}
//实例测试,最大异或对
#include<iostream>
using namespace std;

const int N = 1e5+10 , M = 31*N;
int a[N];
int s[M][2],idex;

void insert(int x){
    int p = 0;
    for(int i = 30;i>=0;i--){
        int u = x>>i&1;
        if(!s[p][u]) s[p][u]= ++idex;
        p = s[p][u];
    }
}

int query(int x){
    int p = 0,res = 0;
    for(int i = 30;i>=0;i--){
        int u = x>>i&1;
        if(s[p][!u]) {
            p = s[p][!u];
            res = res*2+1;
        }
        else{
            p = s[p][u];
            res = res*2+0;
        }
    }
    return res;
}

int main(){
    int num,temp=0,res=0;
    scanf("%d",&num);
    
    for(int i = 0;i<num;i++){
        scanf("%d",&a[i]);
        insert(a[i]);
        temp = query(a[i]);
        res = res>=temp?res:temp;
    }
    printf("%d",res);
    return 0;
}

vscode整理

在这里插入图片描述

标签:char,return,Trie,res,++,笔记,son,---,int
From: https://blog.csdn.net/DaPeng20020626/article/details/141402792

相关文章

  • 机器学习-过采样(全网最详解)
    相关介绍在逻辑回归中,处理不平衡数据集是一个重要的步骤,因为不平衡的数据集可能导致模型偏向于多数类,而忽略少数类。过采样(Over-sampling)是处理不平衡数据集的一种常用方法,它通过增加少数类样本的数量来平衡数据集。1.过采样的基本概念过采样是指对训练集中的少数类样本......
  • SP368 CSTREET - Cobbled streets 题解
    题意选n−1条道路连接n个城市,且使得其修建的价格最小。分析最小生成树的模板题,可以用kruskal来做。首先,先将所有的边权从小到大排序。然后,取当前没有选过的,且边权最小的边,判断它连接的两个点是否同属一个集合,如果不是就把他们加到同一个集合中,再记录答案。代码很简单,......
  • 刷题篇 - 03
    题目一:203.移除链表元素-力扣(LeetCode)publicListNoderemoveElements(ListNodehead,intval){//1.如果链表为null,直接返回headif(head==null){returnhead;}//2.定义快慢指针ListNodepre......
  • 国内外ChatGPT镜像网站集合【2024-08-21最新】~
     一、GPT4o& &4.0turbo&GPT4omini介绍总有人问我,GPT4o、GPT4.0和GPT3.5有什么区别?国内怎么才能用上,听说很复杂以一张表来表达他们的区别吧GPT3.5、GPT3.5Turbo、GPT4.0均已经被官方放弃维护,也就是说我们其实已经使用不到这几个模型了。目前官方主流开放的模型有GP......
  • 【题解】Solution Set - NOIP2024集训Day12 树上启发式合并
    【题解】SolutionSet-NOIP2024集训Day12树上启发式合并https://www.becoder.com.cn/contest/5472「CF600E」Lomsatgelral直接dsuontree。记录每一个颜色的出现次数。「IOI2011」Race之前是用点分治做的。考虑dsuontree。每个子树内维护到根节点的距离为\(x\)......
  • 汇总国内外ChatGPT镜像网站集合【2024-08最新】可无限制使用~
     一、GPT4o& &4.0turbo&GPT4omini介绍总有人问我,GPT4o、GPT4.0和GPT3.5有什么区别?国内怎么才能用上,听说很复杂以一张表来表达他们的区别吧GPT3.5、GPT3.5Turbo、GPT4.0均已经被官方放弃维护,也就是说我们其实已经使用不到这几个模型了。目前官方主流开放的模型有GP......
  • A Comparative Study of AI-Generated (GPT-4) and Human-crafted MCQs in Programmin
    文章目录题目摘要引言相关工作数据集MCQ生成提示实验设计结果讨论对教学实践的启示有效性的局限性和威胁结论和未来工作题目编程教育中人工智能生成的(GPT-4)和人类编写的MCQ的比较研究论文地址:https://dl.acm.org/doi/10.1145/3636243.3636256摘要    ......
  • 告别 Coding 噩梦-掌握这10个习惯,成为大数据开发高手
    你是否曾在半夜被一个顽固的bug折磨得睡不着觉?是否因为理解不了复杂算法而感到沮丧?别担心,你并不孤单。作为一名经验丰富的大数据开发者,我深知编程之路上的挫折感。但今天,我要和你分享我是如何在这条充满荆棘的道路上找到突破,最终成长为一名得心应手的编程高手的。前......
  • 【RTT-Studio】详细使用教程十三:UART的DMA 接收及轮询发送
    文章目录一、简介二、RTT配置三、使用信号量接收四、使用消息队列接收五、测试验证一、简介  串口是指数据一位一位地顺序传送,其特点是通讯线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速......
  • Blocked aria-hidden on a <input> element because the element that just received fo
    bug查资料找到三种解决方案1.第一种在main.js中加入,然后在报错的组件上加,但我没有解决Vue.directive('removeAriaHidden',{bind(el,binding){letariaEls=el.querySelectorAll('.el-radio__original');ariaEls.forEach((item)=>{item.removeA......