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

ACM___________________________

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

常用鏈接

留言簿(24)

隨筆分類(332)

隨筆檔案(182)

FRIENDS

搜索

積分與排名

最新隨筆

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

trie樹--詳解

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

MiYu原創(chuàng), 轉(zhuǎn)帖請(qǐng)注明 : 轉(zhuǎn)載自 ______________白白の屋    

 

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

    前幾天學(xué)習(xí)了并查集和trie樹,這里總結(jié)一下trie。
    本文討論一棵最簡單的trie樹,基于英文26個(gè)字母組成的字符串,討論插入字符串、判斷前綴是否存在、查找字符串等基本操作;至于trie樹的刪除單個(gè)節(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ù)決定每個(gè)節(jié)點(diǎn)的出度,即branch數(shù)組(空間換時(shí)間思想)

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

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

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

l        Trie的示意圖

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





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

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

1.    最容易想到的:即從字符串集中從頭往后搜,看每個(gè)字符串是否為字符串集中某個(gè)字符串的前綴,復(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是否為某個(gè)字符串的前綴時(shí),顯然以b,c,d....等不是以a開頭的字符串就不用查找了。所以建立trie的復(fù)雜度為O(n*len),而建立+查詢?cè)趖rie中是可以同時(shí)執(zhí)行的,建立的過程也就可以成為查詢的過程,hash就不能實(shí)現(xiàn)這個(gè)功能。所以總的復(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)指針指向最后一個(gè)1時(shí),程序會(huì)發(fā)現(xiàn)這個(gè)1已經(jīng)存在,說明911必定是某個(gè)字符串的前綴,該思想是我在做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)成一個(gè)串。
11    Trie_node *next[branchNum];//指向各個(gè)子樹的指針,下標(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)于有一個(gè)新串經(jīng)過,指針要向下移動(dòng)
45        word++;
46    }

47    location->isStr = true//到達(dá)尾部,標(biāo)記一個(gè)串
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() //簡單測(cè)試
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>
            久久久精品网| 伊人成人在线视频| 亚洲影院免费观看| 亚洲精品久久久久久下一站| 欧美在线免费观看亚洲| 在线视频亚洲| 亚洲一区bb| 午夜一区在线| 久久久久99| 欧美成人中文字幕在线| 亚洲电影专区| 亚洲图片自拍偷拍| 精品不卡在线| 韩国一区二区三区美女美女秀| 欧美日韩综合视频| 国产精品黄页免费高清在线观看| 欧美日韩一本到| 国产精品入口日韩视频大尺度| 国产精品日韩欧美大师| 国际精品欧美精品| 亚洲三级观看| 鲁大师成人一区二区三区| 蜜桃av综合| 国产精品视频区| 亚洲第一毛片| 欧美在线观看一二区| 欧美大片在线观看| 一区二区三区精品| 欧美成人中文字幕在线| 国产精品久久久久久户外露出| 国自产拍偷拍福利精品免费一| 亚洲欧洲一区二区在线播放| 欧美呦呦网站| 午夜免费久久久久| 国产精品久久福利| 99在线精品视频| 日韩视频在线一区二区三区| 久久一区二区三区超碰国产精品| 国产精品久久久久影院亚瑟| 亚洲三级观看| 最新国产精品拍自在线播放| 久久综合给合| 亚洲精品黄色| 日韩亚洲视频在线| 欧美视频导航| 性欧美8khd高清极品| 亚洲伊人久久综合| 一本一道久久综合狠狠老精东影业| 麻豆精品视频在线观看| 亚洲精品乱码久久久久久黑人 | 欧美精品黄色| 一区二区91| 亚洲一区二区三区视频播放| 国产伦精品一区二区三区免费 | 尹人成人综合网| 亚洲福利在线视频| 亚洲无线观看| 午夜欧美精品久久久久久久| 久久免费黄色| 欧美有码视频| 欧美激情一区二区三区| 快射av在线播放一区| 亚洲三级影院| 亚洲综合99| 亚洲综合不卡| 噜噜爱69成人精品| 国产欧美va欧美va香蕉在| 国产日韩欧美在线| 先锋影音久久久| 一区二区在线免费观看| 亚洲精品乱码久久久久久蜜桃麻豆| 鲁大师影院一区二区三区| 欧美精品一卡二卡| 蜜桃av综合| 国产中文一区| 亚洲天堂免费观看| 亚洲免费高清| 国产一区二区三区无遮挡| 99在线精品观看| 亚洲人体一区| 免费成人av资源网| 亚洲一区免费| 国产日韩欧美二区| 亚洲国产日韩精品| 国产在线不卡精品| 亚洲女人av| 性欧美1819sex性高清| 欧美日韩美女| 亚洲午夜激情免费视频| 亚洲综合好骚| 国内精品久久久久影院 日本资源| 中文在线不卡| 另类春色校园亚洲| 亚洲日本一区二区| 欧美三级视频在线| 亚洲欧美日韩国产一区| 久久人人97超碰国产公开结果 | 亚洲国产高清aⅴ视频| 久久精品主播| 亚洲欧洲日产国产综合网| 亚洲一区二区三区在线观看视频| 欧美三级在线播放| 午夜在线观看免费一区| 欧美www在线| 欧美一级午夜免费电影| 国产女人精品视频| 欧美理论在线| 久久久久久电影| 亚洲视频一区在线| 欧美黄色小视频| 久久精品国产第一区二区三区| 狠狠操狠狠色综合网| 久久久www成人免费毛片麻豆| 亚洲高清三级视频| 国产一区高清视频| 国产精品理论片| 欧美一区二区三区免费观看视频 | 香蕉乱码成人久久天堂爱免费 | 欧美精品综合| 久久精品亚洲一区| 欧美一区二区三区四区在线观看| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 久久亚洲私人国产精品va| 中文欧美日韩| 亚洲一区二区三区在线看| 亚洲人线精品午夜| 亚洲欧洲三级| 99香蕉国产精品偷在线观看| av成人国产| 久久国产主播精品| 欧美1区视频| 欧美色区777第一页| 国产精品日韩精品欧美在线| 国产精品久久久久一区| 国产毛片一区二区| 亚洲国产婷婷香蕉久久久久久99| 亚洲黄色天堂| 亚洲欧美精品suv| 久久国产婷婷国产香蕉| 欧美激情一二三区| 亚洲综合欧美| 欧美激情中文字幕一区二区| 国产精品免费视频xxxx| 国产欧美一区二区三区沐欲| 日韩视频在线一区二区三区| 午夜在线视频观看日韩17c| 美女成人午夜| 经典三级久久| 午夜精品久久99蜜桃的功能介绍| 免费久久精品视频| 性久久久久久| 国产精品综合| 亚洲桃花岛网站| 亚洲精品视频免费在线观看| 久久人体大胆视频| 亚洲国产一区二区三区高清| 亚洲欧美伊人| 午夜精品久久久久久久久久久久久 | 亚洲欧美日韩国产综合| 欧美国产视频日韩| 欧美阿v一级看视频| 最新日韩中文字幕| 香蕉久久一区二区不卡无毒影院| 国产精品视频免费在线观看| 午夜精品久久久久久久蜜桃app | 久久国产视频网| 狠狠色丁香久久综合频道| 欧美成人自拍视频| 欧美三区不卡| 欧美大片免费| 国产精品www994| 噜噜爱69成人精品| 欧美日韩综合不卡| 蜜月aⅴ免费一区二区三区| 免费日韩精品中文字幕视频在线| 99精品热6080yy久久| 欧美一区二区精品久久911| 最新国产乱人伦偷精品免费网站| 国产自产女人91一区在线观看| 一本色道久久综合狠狠躁篇怎么玩| 欧美凹凸一区二区三区视频| 国产乱码精品1区2区3区| 在线综合亚洲| 老色鬼久久亚洲一区二区| 一本在线高清不卡dvd| 亚洲欧美日韩国产成人| 欧美日韩国产一区二区| 国产精品男女猛烈高潮激情| 亚洲黄色成人网| 欧美成人蜜桃| 欧美日韩精品是欧美日韩精品| 国产精品一区二区久久久| 亚洲国产影院| 久久精品色图| 亚洲免费人成在线视频观看| 欧美视频一区二区三区…| 国产三级精品三级| 亚洲无线视频| 欧美一级视频精品观看| 欧美日韩午夜|