關於這個字串的資料結構我就不多說什麼了,不知道的可以戳這裡.
trie樹在oi中應用廣泛,時間優秀,缺點就是空間占用大。
(下文中我們將字符集大小稱為
k,模式串長度為p)
trie支援o(
np)建樹,o(
p)插入,查詢,刪除。
可是如果二維陣列儲存的話,就要耗費kn
的空間,基本無法承受。
空間上我們可以用指標動態分配記憶體來優化,減少記憶體的浪費。
trie樹還有一點好處,就是極易編寫,極易除錯,寫暴力很好用。
不過,一般還是不用trie樹的。
上一道模板題:
這題水到爆,最慢的點100ms(笑),所以是模板題。
code:
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
using
namespace
std;
int ch[500001][26];
int tot;
int val[500001];
int cnt[500001];
void insert(char *p)
u=ch[u][c];
}val[u]=1;
}int cmp(char *t)
u=ch[u][c];
}if(!val[u])
if(!cnt[u])
else
}int n,m;
int main()
scanf("%d",&m);
for(int i=1;i<=m;i++)
else
if(num==1)
else
}return
0;}
字串 Trie字典樹
目錄 trie字典樹 例題 1.什麼是字典樹?2.字典樹的作用及性質 3.建樹 code 效果圖 4.查詢 code 5.優勢 6.回到例題 code 7.結束語 8.練習 給出n個字串,以及m個詢問。每次詢問讀入乙個字串,求該字串是多少個字串的字首 每個字串長度小於10 2,n和m小於10 5。樣...
Trie樹 字典樹(字串排序)
有時,我們會碰到對字串的排序,若採用一些經典的排序演算法,則時間複雜度一般為o n lgn 但若採用trie樹,則時間複雜度僅為o n trie樹又名字典樹,從字面意思即可理解,這種樹的結構像英文本典一樣,相鄰的單詞一般字首相同,之所以時間複雜度低,是因為其採用了以空間換取時間的策略。下圖為乙個針對...
Trie樹 字典樹 字串排序
有時,我們會碰到對字串的排序,若採用一些經典的排序演算法,則時間複雜度一般為o n lgn 但若採用trie樹,則時間複雜度僅為o n trie樹又名字典樹,從字面意思即可理解,這種樹的結構像英文本典一樣,相鄰的單詞一般字首相同,之所以時間複雜度低,是因為其採用了以空間換取時間的策略。下圖為乙個針對...