1 .1字典树
优点:利用字符串公共前缀来减少查询时间,最大限度减少无谓字符串的比较
算法思路
(1)字典树creat ;
将所有的字符串插入字典树中(可以采用数组和链表储存)
算法代码
void insert(string s)
{//将字符串s擦汗如字典树中//
int len = s.length(),p =1;
for(int i= 0;i<len ;i++)
{
int ch = s[i]-'a';//转换为数字
if(!trie[p]ch]
trie[p][ch] = ++tot;
p = trie [p][ch];
}
end[p] = true;//标记单词结束
}
算法分析
单词总长度N,字符种类K,插入字符串长度n;
Trie复杂度O(N) 空间复杂度O(NK)
(2)字典树的查找
在字典树中查找是否存在,首先转换成数字,在字典树中查找,若查找的位置为0,则说明不存在,否则继续向下查找
算法代码
bool search(string s)
{
int len =s.length(),p = 1;
for(int i = 0; i < len ; i++)
{
p = trie[p][s[i] - 'a'];
if(!p)
return false;
}
return end[p];
}
算法分析
查找一个关键字的时间与树中包含的节点数无关,若查找的字符串长度为n;
则查找的时间复杂度为O(n)