数据结构4:Tire树入门

以下来源于百度百科:

在计算机科学中,Trie,又称字典树、单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串)。

特点:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。

核心思想:空间换时间,利用字符串的公共前缀来降低查询时间的开销以达到提高效率。

例如:如给出字符串"abc","ab","bd","dda",根据该字符串序列构建一棵Trie树。则构建的树如下:
 

红色表示一个单词的结束。

Tire的三个基本性质:

1.根节点不包含字符,除根节点外每一个节点都只包含一个字符。

2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。

3.每个节点的所有子节点包含的字符都不相同。

Tire树的实现:

typedef struct TireNode{
    int count;                  // 统计单词前缀出现的次数
    struct TireNode *next[26];  // 用0~25 来表示a~z,存入时 相应的字符减一个'a'就行了。
    bool exist;                 // 记录是不是构成一个单词
}TireNode,*Tire;

TireNode* CreatTireNode()
{
   Tire node = new Tirenode;         //动态分配空间
   node->count=0;
   memset(node->next,0,sizeof(node->next));   
   return node;  
}
int main()
{
    tire root=CreatTireNode();
    
}

插入:

Void InsertTire(Tire root,char* word)
{
    Tire node=root;
    char *p=word;
    while(*p){
         if(node->nexe[*p-'a']==NULL)
         {
            node->next[*p-'a']=createTirenode();
         }
         node=node->next;
         p++;
         node->count+=1;
    }
     node->exist = true;
}

查找:

int TireSearch(Trie root,char*word)
{
    Tire node = root;
    char *p = word;
    int id;
    while(*p)
    {
        id=*p-'a';
        node=node->next[id];
        ++p;
        if(node==NULL)
            return 0;
    }
    return node->count;
}
发布了52 篇原创文章 · 获赞 114 · 访问量 6031

猜你喜欢

转载自blog.csdn.net/GD_ONE/article/details/89508158