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

陋居

淡薄名利,修身養性

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

常用鏈接

留言簿

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

文章作者: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}

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>
            久久久蜜桃精品| 亚洲精品欧美日韩| 日韩午夜av| 亚洲国产精品女人久久久| 欧美噜噜久久久xxx| 亚洲裸体视频| 亚洲国产精品一区二区第四页av| 亚洲一级影院| 亚洲欧美国产精品va在线观看| 亚洲第一精品福利| 亚洲第一福利社区| 亚洲欧洲中文日韩久久av乱码| 国产精品久久久免费| 欧美日韩三级在线| 国产精品一区二区在线观看网站| 国产精品日日摸夜夜摸av| 国产色爱av资源综合区| 狠狠干狠狠久久| 日韩一级在线观看| 亚洲欧美日韩网| 久久精品国产免费看久久精品| 久久免费国产精品1| 亚洲国产精品一区二区第一页 | 欧美日韩一二三四五区| 欧美日韩国产一区二区| 国产日韩免费| 中文国产一区| 欧美大学生性色视频| 在线亚洲一区二区| 免费不卡视频| 国产亚洲精品综合一区91| 亚洲国内自拍| 久久综合九色九九| 亚洲国产精品成人综合| 亚洲人成网站色ww在线| 一区二区在线视频播放| 国产一区二区三区网站| 噜噜噜噜噜久久久久久91| 欧美性大战xxxxx久久久| 亚洲国产精品999| 久久综合久久综合这里只有精品| 一本久道久久久| 欧美日韩国产区一| 亚洲美女av黄| 亚洲乱码国产乱码精品精可以看| 欧美freesex8一10精品| 亚洲精品久久久久久久久久久久| 久久综合福利| 欧美激情精品| 亚洲色图自拍| 久久久噜噜噜久久中文字免| 永久免费视频成人| 亚洲日韩欧美视频一区| 欧美视频国产精品| 久久av二区| 免费在线观看日韩欧美| 亚洲永久精品大片| 久久看片网站| 亚洲欧美精品一区| 免费成人av资源网| 性欧美大战久久久久久久久| 久久精品导航| 香蕉成人伊视频在线观看 | 亚洲一区二区三区中文字幕| 国产精品videosex极品| 久久精品国产亚洲a| av成人天堂| 亚洲综合激情| 亚洲国产一区二区三区a毛片| 一区二区免费在线观看| 国产乱码精品一区二区三区五月婷 | 亚洲一区观看| 亚洲桃花岛网站| 国内免费精品永久在线视频| 欧美国产精品人人做人人爱| 欧美日韩国产高清视频| 美女精品在线观看| 欧美亚洲在线视频| 久久se精品一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎| 一本色道久久88综合日韩精品| 午夜亚洲影视| 亚洲欧美综合国产精品一区| 欧美成人一品| 久久精品人人爽| 国产欧美日韩三级| 亚洲天天影视| 一区二区免费看| 亚洲一区二区三区精品动漫| 亚洲主播在线| 欧美午夜免费影院| 在线视频你懂得一区| av不卡免费看| 欧美揉bbbbb揉bbbbb| 91久久精品国产91性色| 亚洲福利视频网站| 亚洲欧美综合精品久久成人| 性色av香蕉一区二区| 国产精品丝袜久久久久久app| 亚洲精品中文字幕女同| 久久久久天天天天| 欧美成人精精品一区二区频| 亚洲国产美国国产综合一区二区| 久久一区二区三区四区| 亚洲综合色婷婷| 欧美高清视频一区二区三区在线观看| 国产欧美精品一区二区三区介绍| 久久成人精品| av成人天堂| 你懂的国产精品永久在线| 亚洲天堂成人在线观看| 久久综合九色综合欧美就去吻 | 欧美伊人久久大香线蕉综合69| 久久久国产午夜精品| 伊人久久av导航| 国产精品v欧美精品v日韩| 久久久福利视频| 亚洲视频狠狠| 亚洲日本在线观看| 欧美在线看片a免费观看| 日韩视频永久免费| 黄色成人在线观看| 国产欧美精品日韩| 欧美日韩专区| 欧美日韩国产综合视频在线观看| 久久九九精品| 久久久久五月天| 亚洲欧美日韩视频二区| 一本色道久久88综合亚洲精品ⅰ | 欧美日韩国产在线播放| 久久只精品国产| 久久久免费av| 欧美国产亚洲视频| 久久久综合激的五月天| 欧美精品三级日韩久久| 久久一综合视频| 欧美制服第一页| 欧美一区在线直播| 久久综合九色综合欧美就去吻| 久热这里只精品99re8久| 亚洲国产精品电影在线观看| 欧美亚洲视频一区二区| 欧美顶级艳妇交换群宴| 亚洲福利在线观看| 亚洲图片欧美一区| 久久精品视频在线免费观看| 老司机一区二区| 国产精品成人国产乱一区| 欧美高清不卡| 亚洲精品一区在线观看| 亚洲欧美清纯在线制服| 免费成人激情视频| 亚洲天堂免费观看| 久久午夜av| 国产在线播精品第三| 亚洲一区二区三区在线看| 亚洲最新中文字幕| 91久久在线播放| 亚洲成人自拍视频| 国产日韩一区二区三区| 亚洲女爱视频在线| 欧美高清视频www夜色资源网| 国产精品久久久久天堂| 正在播放欧美一区| 欧美成人久久| 久久免费视频一区| 国产一区 二区 三区一级| 亚洲天堂偷拍| 亚洲乱码日产精品bd| 欧美a级一区| 一区二区黄色| 亚洲天堂av高清| 国产亚洲亚洲| 久久久久久穴| 免费日韩成人| 亚洲天堂成人| 久久精品72免费观看| 亚洲高清在线观看一区| 久久久久久久综合| 亚洲一区视频| 久久精品亚洲一区二区| 亚洲激情网站| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美午夜电影一区| 久久精品av麻豆的观看方式| 99精品国产在热久久婷婷| 亚洲电影免费在线| 亚洲精品久久久久久一区二区 | 亚洲国产导航| 国产精品国产一区二区| 久久亚洲国产精品日日av夜夜| 狼狼综合久久久久综合网 | 亚洲免费高清| 欧美理论电影网| 免费看av成人| 日韩五码在线| 欧美sm重口味系列视频在线观看| 久久不射中文字幕| 国产精品xvideos88| 亚洲美女毛片|