字典樹差不多長這樣
核心就是利用了公共字首儲存出現過的單詞。
例如,這棵樹的左半部分就記錄了三個單詞
ogday
ogdfra
ogdftq
他們有共同的字首ogd
**:
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
typedef
long
long ll;
const
int maxn=
1e6;
string str[maxn]
,c;int tot=
1,tire[maxn][27
],cnt[maxn]
;void
insert
(string s,
int k)
cnt[p]
=k;//字串結束,最後的編號
}int
find
(string s)
return cnt[p]
;//找到該字串,返回編號
}int main (
)for
(int i=
0;i)}
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
typedef
long
long ll;
const
int maxn=
1e6;
string str[maxn]
,c;int tot=
1,tire[maxn][27
],cnt[maxn]
;void
insert
(char
*s)}
intfind
(char
*s)return cnt[p]
;//找到該字串,返回編號
}int main (
)while(1
)}
還有 01 字典樹,可以解決找乙個陣列中,異或和最大的兩個數的問題。
01 字典樹和普通的字典樹類似,只不過把 字元換成了 0和 1;
再來一道模板題 (hdu 4825 xor sum)
鏈結**
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
typedef
long
long ll;
const
int maxn=
3e6;
int tot=
1,tire[maxn][2
],cnt[maxn]
;void
insert
(ll x)
cnt[p]
=x;}
ll find
(ll x)
return cnt[p];}
int main (
) printf (
"case #%lld:\n"
,casek++);
while
(q--)}
}
再記錄一道很好的題有部落格 字典樹學習總結
解決問題 主要應對多次查詢,典例就是字典,字典樹就是一本字典,字典的最大好處就是能快速查詢 主要原理 我們在查某乙個單詞時總會先索引第乙個字母,然後在查第二個字母,以此類推直到查到此單詞為止,那麼字典樹的查詢過程也是如此,先查第乙個字母的節點位置,然後在該節點的子節點之中查詢第二個字母的位置,以此類...
學習之旅 字典樹
對於字串s1和s2,當s1的前 s2 個字元和s2相同時,那麼s2是s1的字首 s2 表示字串s2的長度 現在小zc有n個串,我們定義正確的字首s 在這n個串中有不超過5個串以s為字首。我們定義最短正確字首s s是乙個正確字首,並且s的所有字首 不包括s 都不是正確字首。現在小zc想要知道在這n個串...
字典樹學習總結
字串的多模匹配,kmp,字典樹,ac自動機,現在學習字典樹 字典樹又稱為單詞查詢樹,用於統計,排序和儲存大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻的統計。優點是利用字串的公共字首來減少查詢時間,最大限度減少無畏字串比較,查詢效率比雜湊樹高。其實字典樹就是dfa!每層是乙個狀態,只...