zoukankan      html  css  js  c++  java
  • Trie

    Trie

    部分资料来自:

    https://blog.csdn.net/zzkksunboy/article/details/61421001

    https://blog.csdn.net/johnny901114/article/details/80711441

    https://blog.csdn.net/qq_36782366/article/details/76152767

    Trie, 又称字典树,是前缀树,它的作用是把许多字符串整合储存,做成一个字符串集合,有时可以达到快速查找的效果。

    特点

    它压缩了所有模式串

    查找速度与它的元素长度相关Ow

    概念

    比如有she,her,hers,his,him这几个单词,我们就可以建立这么一个Trie

    首先,Trie是一颗多叉树

    Trie的一个特性:必有一个根节点(把根节点记为0),也叫虚根

    每条边都有一个权值,权值即各位对应字符

    而红色的节点表示的是某个单词结束的节点,在遍历中如果成功访问,就意味着,对于字符串存在。注意它并不代表访问过程中返回点。

    如果从链表角度来描述的话,一个字符串就是一个链表。每个Node都保存了它的所有子节点。

    构造

    指针版

    各节点:

    struct node
    {
    	node *nxt[26];
    	int flag;
    	node()
    	{
    		for(int i=0;i<26;i++)
    		{
    			nxt[i]=NULL;
    		}
    		flag=0;
    	}
    };
    

    将各模式串存入Trie(当然可以也可以传string)

    void ins (char *s)
    {
    	int len=strlen(s);
    	node *now=root;//指向根节点
    	for(int i=0;i<len;i++)
    	{
    		int to=s[i]-'a';
    		if(now->nxt[to]==NULL)now->nxt[to]=new node();
    		now=now->nxt[to];//now指向新生成的结点
    	}
    	now->flag++;//最后一个叶节点做标记  意思是这个字符串在这个结点结束
    }
    

    标号版

    (写在ac自动机那块)

  • 相关阅读:
    读取xml文件到实体
    dev常用控件的属性
    委托和事件
    GridControl应用
    关于DataTable的处理
    SQL2
    xaml地址写法
    sql临时表的创建及赋值
    wpf 图片缩放
    NIO简介
  • 原文地址:https://www.cnblogs.com/et3-tsy/p/12638703.html
Copyright © 2011-2022 走看看