字典樹學習

2021-10-04 21:26:08 字數 2177 閱讀 5795

字典樹差不多長這樣

核心就是利用了公共字首儲存出現過的單詞。

例如,這棵樹的左半部分就記錄了三個單詞

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!每層是乙個狀態,只...