zoukankan      html  css  js  c++  java
  • 7月28--字典树

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

    Trie的数据结构定义:

    复制代码
    #define MAX 26
    typedef struct Trie   
    {   
        Trie *next[MAX];   
        int v;   //根据需要变化
    };   
     
    Trie *root;
     
    生成字典树:
    复制代码
    void createTrie(char *str)
    {
        int len = strlen(str);
        Trie *= root, *q;
        for(int i=0; i<len; ++i)
        {
            int id = str[i]-'0';
            if(p->next[id] == NULL)
            {
                q = (Trie *)malloc(sizeof(Trie));
                q->= 1;    //初始v==1
                for(int j=0; j<MAX; ++j)
                    q->next[j] = NULL;
                p->next[id] = q;
                p = p->next[id];
            }
            else
            {
                p->next[id]->v++;
                p = p->next[id];
            }
        }
        p->= -1;   //若为结尾,则将v改成-1表示
    }
    复制代码

    接下来是查找的过程了:

    复制代码
    int findTrie(char *str)
    {
        int len = strlen(str);
        Trie *= root;
        for(int i=0; i<len; ++i)
        {
            int id = str[i]-'0';
            p = p->next[id];
            if(p == NULL)   //若为空集,表示不存以此为前缀的串
                return 0;
            if(p->== -1)   //字符集中已有串是此串的前缀
                return -1;
        }
        return -1;   //此串是字符集中某串的前缀
    }
    复制代码

    对于上述动态字典树,有时会超内存,所以要释放空间。 

    复制代码
    int dealTrie(Trie* T)
    {
        int i;
        if(T==NULL)
            return 0;
        for(i=0;i<MAX;i++)
        {
            if(T->next[i]!=NULL)
                deal(T->next[i]);
        }
        free(T);
        return 0;
    }
  • 相关阅读:
    扩展的局域网
    参数估计
    以太网的 MAC 层
    poj 1523Tarjan算法的含义——求取割点可以分出的连通分量的个数
    tarjan算法--求解无向图的割点和桥
    spfa负环判断
    codeforce 489d bfs分层处理
    并查集优化——压缩路径——秩优化
    SPFA_queue_链式前向星最短路 & HDU2433
    POJ3046选蚂蚁创建集合_线性DP
  • 原文地址:https://www.cnblogs.com/ly---1287/p/3872591.html
Copyright © 2011-2022 走看看