青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

ACM___________________________

______________白白の屋
posts - 182, comments - 102, trackbacks - 0, articles - 0
<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

常用鏈接

留言簿(24)

隨筆分類(332)

隨筆檔案(182)

FRIENDS

搜索

積分與排名

最新隨筆

最新評論

閱讀排行榜

評論排行榜

trie樹--詳解

Posted on 2010-10-23 22:05 MiYu 閱讀(1536) 評論(0)  編輯 收藏 引用 所屬分類: ACM_資料ACM ( 字典樹( TRIE ) )

MiYu原創, 轉帖請注明 : 轉載自 ______________白白の屋    

 

文章作者:yx_th000 文章來源:Cherish_yimi (http://www.cnblogs.com/cherish_yimi/) 轉載請注明,謝謝合作。
關鍵詞:trie trie樹 數據結構

    前幾天學習了并查集和trie樹,這里總結一下trie。
    本文討論一棵最簡單的trie樹,基于英文26個字母組成的字符串,討論插入字符串、判斷前綴是否存在、查找字符串等基本操作;至于trie樹的刪除單個節點實在是少見,故在此不做詳解。

l        Trie原理

Trie的核心思想是空間換時間。利用字符串的公共前綴來降低查詢時間的開銷以達到提高效率的目的。

l        Trie性質

好多人說trie的根節點不包含任何字符信息,我所習慣的trie根節點卻是包含信息的,而且認為這樣也方便,下面說一下它的性質 (基于本文所討論的簡單trie樹)

1.    字符的種數決定每個節點的出度,即branch數組(空間換時間思想)

2.    branch數組的下標代表字符相對于a的相對位置

3.    采用標記的方法確定是否為字符串。

4.    插入、查找的復雜度均為O(len),len為字符串長度

l        Trie的示意圖

如圖所示,該trie樹存有abc、d、da、dda四個字符串,如果是字符串會在節點的尾部進行標記。沒有后續字符的branch分支指向NULL





l        
Trie
Trie的優點舉例

已知n個由小寫字母構成的平均長度為10的單詞,判斷其中是否存在某個串為另一個串的前綴子串。下面對比3種方法:

1.    最容易想到的:即從字符串集中從頭往后搜,看每個字符串是否為字符串集中某個字符串的前綴,復雜度為O(n^2)。

2.    使用hash:我們用hash存下所有字符串的所有的前綴子串。建立存有子串hash的復雜度為O(n*len)。查詢的復雜度為O(n)* O(1)= O(n)。

3.    使用trie:因為當查詢如字符串abc是否為某個字符串的前綴時,顯然以b,c,d....等不是以a開頭的字符串就不用查找了。所以建立trie的復雜度為O(n*len),而建立+查詢在trie中是可以同時執行的,建立的過程也就可以成為查詢的過程,hash就不能實現這個功能。所以總的復雜度為O(n*len),實際查詢的復雜度只是O(len)。


解釋一下hash為什么不能將建立與查詢同時執行,例如有串:911,911456輸入,如果要同時執行建立與查詢,過程就是查詢911,沒有,然后存入9、91、911,查詢911456,沒有然后存入9114、91145、911456,而程序沒有記憶功能,并不知道911在輸入數據中出現過。所以用hash必須先存入所有子串,然后for循環查詢。

而trie樹便可以,存入911后,已經記錄911為出現的字符串,在存入911456的過程中就能發現而輸出答案;倒過來亦可以,先存入911456,在存入911時,當指針指向最后一個1時,程序會發現這個1已經存在,說明911必定是某個字符串的前綴,該思想是我在做pku上的3630中發現的,詳見本文配套的“入門練習”。

l        Trie的簡單實現(插入、查詢)


 1
 2#include <iostream>
 3using namespace std;
 4
 5const int branchNum = 26//聲明常量 
 6int i;
 7
 8struct Trie_node
 9{
10    bool isStr; //記錄此處是否構成一個串。
11    Trie_node *next[branchNum];//指向各個子樹的指針,下標0-25代表26字符
12    Trie_node():isStr(false)
13    {
14        memset(next,NULL,sizeof(next));
15    }

16}
;
17
18class Trie
19{
20public:
21    Trie();
22    void insert(const char* word);
23    bool search(char* word); 
24    void deleteTrie(Trie_node *root);
25private:
26    Trie_node* root;
27}
;
28
29Trie::Trie()
30{
31    root = new Trie_node();
32}

33
34void Trie::insert(const char* word)
35{
36    Trie_node *location = root;
37    while(*word)
38    {
39        if(location->next[*word-'a'== NULL)//不存在則建立
40        {
41            Trie_node *tmp = new Trie_node();
42            location->next[*word-'a'= tmp;
43        }
    
44        location = location->next[*word-'a']; //每插入一步,相當于有一個新串經過,指針要向下移動
45        word++;
46    }

47    location->isStr = true//到達尾部,標記一個串
48}

49
50bool Trie::search(char *word)
51{
52    Trie_node *location = root;
53    while(*word && location)
54    {
55        location = location->next[*word-'a'];
56        word++;
57    }

58    return(location!=NULL && location->isStr);
59}

60
61void Trie::deleteTrie(Trie_node *root)
62{
63    for(i = 0; i < branchNum; i++)
64    {
65        if(root->next[i] != NULL)
66        {
67            deleteTrie(root->next[i]);
68        }

69    }

70    delete root;
71}

72
73void main() //簡單測試
74{
75    Trie t;
76    t.insert("a");         
77    t.insert("abandon");
78    char * c = "abandoned";
79    t.insert(c);
80    t.insert("abashed");
81    if(t.search("abashed"))
82        printf("true\n");
83}

 

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            中文欧美日韩| 久久精品视频在线播放| 国产精品久久婷婷六月丁香| 欧美国产专区| 欧美精品在线免费播放| 欧美日韩亚洲一区二区三区四区| 国产精品99免费看| 国产欧美日韩一区二区三区在线观看| 国产精品尤物| 亚洲国产精品久久久久秋霞不卡| 亚洲精品美女在线观看| 美女脱光内衣内裤视频久久网站| 国内视频精品| 亚洲国产一区二区a毛片| 亚洲理论在线观看| 欧美亚洲日本一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲国产精品精华液网站| 一本大道久久a久久综合婷婷| 午夜国产精品影院在线观看| 久热精品在线| 国产精品视频一二三| 亚洲电影免费观看高清| 中文国产成人精品| 久久香蕉国产线看观看av| 99re热这里只有精品免费视频| 香蕉久久夜色精品国产| 欧美精品一区二区精品网| 国产亚洲欧美一区二区| 中国女人久久久| 美女诱惑黄网站一区| 亚洲性图久久| 欧美日韩精品一二三区| 亚洲国产成人在线播放| 欧美在线影院在线视频| 亚洲乱码国产乱码精品精| 久久久久国产精品人| 国产伦精品一区二区三区照片91| 亚洲老板91色精品久久| 老鸭窝毛片一区二区三区| 亚洲女人天堂av| 欧美性视频网站| 亚洲精品欧美精品| 你懂的视频欧美| 欧美有码在线观看视频| 国产精品国产三级国产| 99国产精品99久久久久久粉嫩| 久久影音先锋| 欧美一区二区三区视频在线观看| 国产精品久久久久久久一区探花| 亚洲精品日日夜夜| 欧美黄污视频| 欧美成人在线影院| 亚洲精品国精品久久99热| 久热成人在线视频| 久久精品日产第一区二区三区| 国产精品视频网| 午夜国产精品视频| 亚洲一区三区视频在线观看| 国产精品久久97| 亚洲欧美成人精品| 亚洲欧美国产精品桃花| 国产一区二区中文| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久狠狠婷婷| 在线精品视频一区二区| 欧美激情中文字幕乱码免费| 老司机免费视频一区二区三区| 亚洲国产二区| 99视频一区| 国产精品美女在线观看| 亚洲精品久久久久久久久久久久 | 欧美一区二区三区喷汁尤物| 国产一区二区三区成人欧美日韩在线观看 | 91久久久久久国产精品| 女仆av观看一区| 欧美国产精品人人做人人爱| av成人毛片| 亚洲中字在线| 狠狠久久综合婷婷不卡| 亚洲第一色中文字幕| 欧美国内亚洲| 亚洲欧美日韩精品久久亚洲区 | 免费成人小视频| 欧美成人精品| 亚洲在线播放电影| 亚洲欧美清纯在线制服| 国产一区日韩一区| 欧美高清视频一区二区三区在线观看| 欧美777四色影视在线| 亚洲在线视频观看| 久久成人精品一区二区三区| 亚洲精品日韩在线观看| 亚洲一区二区三区四区五区黄| 国产午夜精品久久久| 欧美激情综合| 国产九九视频一区二区三区| 免费亚洲婷婷| 国产精品盗摄久久久| 欧美顶级少妇做爰| 国产精品久久福利| 欧美成人午夜影院| 国产精品国产自产拍高清av王其| 久久在线观看视频| 91久久精品国产91性色| 国产欧美视频一区二区三区| 亚洲第一精品电影| 国产一区二区三区黄视频| 亚洲精华国产欧美| 狠狠狠色丁香婷婷综合久久五月| 亚洲三级观看| 136国产福利精品导航| 亚洲免费在线播放| 在线视频亚洲| 欧美aⅴ99久久黑人专区| 久久成人精品一区二区三区| 欧美日韩黄色一区二区| 亚洲一区美女视频在线观看免费| 久久这里有精品15一区二区三区 | 欧美福利网址| 久久久精品性| 欧美日韩在线视频一区| 欧美国产亚洲视频| 国产一区二区日韩| 亚洲自拍另类| 夜夜嗨av色综合久久久综合网| 久久人人爽人人爽| 狼人社综合社区| 国产亚洲成av人在线观看导航| 一区二区三区|亚洲午夜| 最新精品在线| 久久一区亚洲| 久久香蕉国产线看观看av| 国产精品欧美在线| 亚洲天堂男人| 亚洲天堂成人| 欧美色欧美亚洲高清在线视频| 欧美激情精品久久久六区热门| 136国产福利精品导航| 老司机一区二区| 欧美高清视频一区二区三区在线观看| 韩日精品视频| 久久久久在线| 欧美顶级艳妇交换群宴| 亚洲国产第一页| 欧美不卡视频一区发布| 亚洲国产mv| 中文高清一区| 国产精品视区| 久久国产88| 欧美激情一区在线| 中文国产亚洲喷潮| 国产精品每日更新| 欧美一级欧美一级在线播放| 久久久精品一品道一区| 伊人久久久大香线蕉综合直播| 久久这里有精品视频| 亚洲黄色有码视频| 亚洲专区免费| 亚洲高清影视| 欧美日韩免费一区| 亚洲一区日本| 欧美1区视频| 亚洲视频精选在线| 国产日韩精品一区二区三区 | 蜜桃视频一区| 一区二区av| 国产亚洲精品美女| 欧美成人精品激情在线观看| 日韩视频在线一区二区| 欧美伊人久久| 亚洲人永久免费| 国产精品久久久久久av福利软件 | 亚洲影视在线播放| 狠狠色噜噜狠狠色综合久| 欧美成人午夜视频| 亚洲综合视频1区| 欧美成人午夜激情在线| 亚洲一区二区视频| 亚洲免费小视频| 国产欧美一区二区精品忘忧草| 久久精品1区| 亚洲老板91色精品久久| 亚洲人成人一区二区三区| 国产精品久久久久7777婷婷| 久久久久九九视频| 亚洲一级网站| 欧美国产精品va在线观看| 亚洲男人的天堂在线观看 | 国产视频综合在线| 欧美成人r级一区二区三区| 亚洲国产人成综合网站| 久久久91精品| 亚洲中午字幕| 亚洲美洲欧洲综合国产一区| 国产一区二区三区直播精品电影 | 亚洲伊人第一页| 亚洲国产一区二区在线| 久久久噜噜噜久久| 久久精品国产亚洲5555|