zoukankan      html  css  js  c++  java
  • 字典树

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

    ----摘自必应

    其建立过程类似链表的生成,顾名思义,每次我们查询、插入一个单词,都从单词首字母开始,查看本节点内是否存在指向下一字母的指针,依次向后查找字典树。在结构体里还可以存放其他变量,使得查找到单词时可以输出和单词对应的数据。

    插入、查找过程见代码详解。

    注意:G++提交字典树题目容易MLE,请用C++提交。

    模板

     1 #include <iostream>
     2 #include <string>
     3 using namespace std;
     4 struct Node
     5 {
     6     Node *ap[26];//保存指向下一节点的指针
     7     //---
     8     //存放每个单词的一些属性,数据类型根据需求自定,或者使用结构体保存
     9     int num;//保存出现次数
    10     //---
    11     void ini()//生成新节点时调用对其初始化
    12     {
    13         num=0;
    14         for(int i=0;i<26;i++)
    15             ap[i]=NULL;
    16     }
    17 }*head;//申明头指针用于指向字典树
    18 void Insert(string str)
    19 {
    20     Node *now=head,*makeNode;//now指针用于指向当前位置,makeNode用于生成新节点,再让now->ap[odx]指向新生成的节点
    21     for(int i=0;i<str.length();i++)
    22     {
    23         int odx=str[i]-'a';
    24         if(now->ap[odx]==NULL)//如果为空说明字典树没有后续的内容,就建立新节点
    25         {
    26             makeNode=new Node;
    27             makeNode->ini();
    28             now->ap[odx]=makeNode;
    29         }
    30         now=now->ap[odx];//迭代now指针,使其转移到下一位置
    31     }
    32     now->num++;
    33 }
    34 bool Find(string str)//返回值根据要求而定
    35 {
    36     int counter=0;
    37     Node *now=head;
    38     for(int i=0;i<str.length();i++)//迭代过程类似插入
    39     {
    40         int odx=str[i]-'a';
    41         counter=now->num;
    42         if(now->ap[odx]==NULL)
    43             return false;
    44         now=now->ap[odx];
    45     }
    46     return true;
    47 }
    48 void del(Node *root)
    49 {
    50     if(root==NULL)
    51         return;
    52     for(int i=0;i<26;i++)
    53         del(root->ap[i]);
    54     delete root;
    55 }
  • 相关阅读:
    Spark记录-SparkSQL远程操作MySQL和ORACLE
    Spark记录-Spark on Yarn框架
    Linux记录-重启后磁盘丢失问题解决方案
    Spark记录-阿里巴巴开源工具DataX数据同步工具使用
    Spark记录-SparkSql官方文档中文翻译(部分转载)
    Spark记录-SparkSQL一些操作
    Spark记录-Spark-Shell客户端操作读取Hive数据
    Spark记录-SparkSQL相关学习
    Spark记录-Scala程序例子(函数/List/match/option/泛型/隐式转换)
    CM记录-升级Spark版本到2.x(转载)
  • 原文地址:https://www.cnblogs.com/LukeStepByStep/p/5779036.html
Copyright © 2011-2022 走看看