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

陋居

淡薄名利,修身養(yǎng)性

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  31 Posts :: 1 Stories :: 4 Comments :: 0 Trackbacks

常用鏈接

留言簿

我參與的團(tuán)隊(duì)

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

文章作者:yx_th000 文章來源:Cherish_yimi (http://www.cnblogs.com/cherish_yimi/) 轉(zhuǎn)載請注明,謝謝合作。
關(guān)鍵詞:trie trie樹 數(shù)據(jù)結(jié)構(gòu)

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

l        Trie原理

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

l        Trie性質(zhì)

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

1.    字符的種數(shù)決定每個節(jié)點(diǎn)的出度,即branch數(shù)組(空間換時(shí)間思想)

2.    branch數(shù)組的下標(biāo)代表字符相對于a的相對位置

3.    采用標(biāo)記的方法確定是否為字符串。

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

l        Trie的示意圖

如圖所示,該trie樹存有abc、d、da、dda四個字符串,如果是字符串會在節(jié)點(diǎn)的尾部進(jìn)行標(biāo)記。沒有后續(xù)字符的branch分支指向NULL





l       
Trie
Trie的優(yōu)點(diǎn)舉例

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

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

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

3.    使 用trie:因?yàn)楫?dāng)查詢?nèi)缱址產(chǎn)bc是否為某個字符串的前綴時(shí),顯然以b,c,d....等不是以a開頭的字符串就不用查找了。所以建立trie的復(fù)雜 度為O(n*len),而建立+查詢在trie中是可以同時(shí)執(zhí)行的,建立的過程也就可以成為查詢的過程,hash就不能實(shí)現(xiàn)這個功能。所以總的復(fù)雜度為 O(n*len),實(shí)際查詢的復(fù)雜度只是O(len)。


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

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

l        Trie的簡單實(shí)現(xiàn)(插入、查詢)


 1
 2#include <iostream>
 3using namespace std;
 4
 5const int branchNum = 26//聲明常量 
 6int i;
 7
 8struct Trie_node
 9{
10    bool isStr; //記錄此處是否構(gòu)成一個串。
11    Trie_node *next[branchNum];//指向各個子樹的指針,下標(biāo)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']; //每插入一步,相當(dāng)于有一個新串經(jīng)過,指針要向下移動
45        word++;
46    }

47    location->isStr = true//到達(dá)尾部,標(biāo)記一個串
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}

posted on 2010-11-26 09:48 eircQ 閱讀(323) 評論(0)  編輯 收藏 引用 所屬分類: Arithmetic
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            91久久在线播放| 亚洲一区二区三区午夜| 亚洲国产日本| 在线电影国产精品| 国产女主播在线一区二区| 国产精品婷婷| 国产精品老牛| 国产日韩精品一区二区三区| 国产精品日韩在线播放| 国产精品美女久久久久久久| 欧美精品在线视频| 欧美日韩在线视频一区| 国产精品日本精品| 国内精品国产成人| 国产一区二区福利| 91久久久精品| 亚洲欧美自拍偷拍| 久热爱精品视频线路一| 亚洲成人在线网| 亚洲三级免费| 欧美一级在线亚洲天堂| 欧美国产极速在线| 国产亚洲欧美日韩一区二区| 在线看国产一区| 亚洲一区二区三区免费视频| 开心色5月久久精品| 91久久精品日日躁夜夜躁国产| 亚洲视频www| 久久综合国产精品| 国产精品福利在线| 亚洲人人精品| 久久综合狠狠综合久久激情| 91久久午夜| 久久成人免费日本黄色| 欧美va亚洲va国产综合| 亚洲大片免费看| 亚洲精品午夜精品| 欧美在线观看一区| 欧美精品一卡二卡| 国产一区欧美| 亚洲在线国产日韩欧美| 国产亚洲精品一区二区| 亚洲人线精品午夜| 久久久亚洲人| 日韩亚洲一区二区| 久久国产精品久久久久久电车| 欧美a级一区| 一区二区在线观看视频在线观看| 日韩系列在线| 欧美~级网站不卡| 欧美专区18| 国产手机视频精品| 欧美一区二区三区视频在线 | 国内精品久久久久久久果冻传媒 | 欧美三区美女| 今天的高清视频免费播放成人| 亚洲天堂av在线免费| 欧美成人自拍视频| 欧美在线一二三四区| 欧美午夜视频在线观看| 亚洲国产美女精品久久久久∴| 久久精品人人做人人爽| 亚洲一二三区精品| 欧美视频免费在线| 亚洲午夜激情免费视频| 亚洲精品乱码久久久久久按摩观| 免费不卡中文字幕视频| 亚洲福利视频在线| 毛片一区二区三区| 久久爱www久久做| 亚洲国产精品久久久久秋霞不卡| 久久国内精品视频| 国语精品一区| 麻豆精品91| 另类尿喷潮videofree| 狠狠久久亚洲欧美专区| 牛牛精品成人免费视频| 久久野战av| 在线观看欧美黄色| 亚洲第一网站免费视频| 免费在线看一区| 亚洲私人影院| 校园春色综合网| 黑人巨大精品欧美黑白配亚洲| 久久天天综合| 欧美激情综合五月色丁香小说| 亚洲免费在线视频一区 二区| 亚洲欧美日本视频在线观看| 精品不卡一区| 亚洲精品少妇30p| 亚洲精品中文字幕有码专区| 美女黄色成人网| 免费日韩成人| 一区二区三区久久| 欧美在线一级视频| 99热免费精品在线观看| 香蕉久久夜色精品| 亚洲开发第一视频在线播放| 亚洲一区不卡| 亚洲日本电影| 欧美亚洲尤物久久| 99视频精品在线| 久久成人精品| 午夜在线精品| 欧美福利视频网站| 欧美专区18| 欧美精品一区二| 久久午夜激情| 国产精品每日更新在线播放网址| 欧美激情一区二区三区全黄| 国产精品稀缺呦系列在线| 欧美激情a∨在线视频播放| 国产精品视频久久| 亚洲国产日韩在线| 国产综合欧美| 亚洲欧美怡红院| 亚洲一二三区视频在线观看| 嫩模写真一区二区三区三州| 欧美一区二区三区精品电影| 欧美日韩人人澡狠狠躁视频| 欧美mv日韩mv国产网站app| 国产精品夜夜夜| 亚洲人体偷拍| 亚洲欧洲在线一区| 久久久国产一区二区三区| 亚洲视频高清| 欧美精品在线观看播放| 你懂的国产精品| 永久免费视频成人| 欧美在线国产精品| 性欧美暴力猛交另类hd| 欧美日韩精品在线| 最新亚洲一区| 91久久极品少妇xxxxⅹ软件| 久久久欧美一区二区| 免播放器亚洲| 在线播放视频一区| 欧美一区二区三区的| 欧美一区二区性| 国产精品永久入口久久久| 一区二区三区波多野结衣在线观看| 亚洲欧洲午夜| 欧美精品久久久久久久久老牛影院| 免费av成人在线| 亚洲国产视频一区二区| 久久在线视频在线| 欧美激情视频一区二区三区免费| 玉米视频成人免费看| 久久综合99re88久久爱| 亚洲高清视频在线观看| 日韩亚洲不卡在线| 欧美日韩一区二区免费视频| 中文日韩欧美| 欧美一区二区在线播放| 一区二区自拍| 欧美大片免费观看| 亚洲欧美国产三级| 欧美日韩国产精品一卡| 亚洲精品一区二区三区av| 99re这里只有精品6| 欧美激情一二三区| 中国日韩欧美久久久久久久久| 亚洲无线视频| 国产精品永久免费在线| 久久久久国产一区二区三区四区| 麻豆免费精品视频| 亚洲三级观看| 国产精品亚洲人在线观看| 久久成人精品视频| 亚洲激情视频| 午夜日韩av| 在线观看日韩www视频免费| 欧美成人国产va精品日本一级| 一本色道久久综合亚洲精品高清| 新狼窝色av性久久久久久| 一色屋精品视频在线观看网站| 欧美国产日本韩| 亚洲综合精品| 欧美韩国日本综合| 性色av一区二区三区在线观看 | 在线看不卡av| 欧美日韩精品中文字幕| 午夜精品av| 亚洲韩国日本中文字幕| 欧美一区久久| 亚洲老板91色精品久久| 国产视频一区免费看| 欧美精品日韩三级| 亚洲欧美日韩天堂| 亚洲国产视频一区| 久久久精品免费视频| 亚洲午夜电影网| 日韩亚洲精品视频| 黄色综合网站| 国产精品在线看| 欧美日本中文字幕| 乱码第一页成人| 久久精品国产96久久久香蕉| 一区二区三区久久网| 亚洲国产精品国自产拍av秋霞 |