日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

trie树--详解

發(fā)布時間:2023/12/1 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 trie树--详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

?

文章作者: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é)點實在是少見,故在此不做詳解。

l????????Trie原理

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

l????????Trie性質(zhì)

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

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

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

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

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

l????????Trie的示意圖

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





l????????
Trie
Trie的優(yōu)點舉例

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


解釋一下hash為什么不能將建立與查詢同時執(zhí)行,例如有串:911,911456輸入,如果要同時執(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時,當(dāng)指針指向最后一個1時,程序會發(fā)現(xiàn)這個1已經(jīng)存在,說明911必定是某個字符串的前綴,該思想是我在做pku上的3630中發(fā)現(xiàn)的,詳見本文配套的“入門練習(xí)”。

l????????Trie的簡單實現(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;?//到達尾部,標(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}

?

轉(zhuǎn)載于:https://www.cnblogs.com/MiYu/archive/2010/10/23/1859515.html

總結(jié)

以上是生活随笔為你收集整理的trie树--详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品亚洲成在人线 | 欧美日韩国产精品一区二区 | 日韩中文字幕网站 | gogo人体做爰大胆视频 | 福利资源在线 | 99在线精品免费视频 | 成人在线网 | 91超碰在线免费观看 | 日本网站在线看 | 亚洲色图一区二区三区 | 成人手机看片 | 亚洲国产一区视频 | 亚洲av无码一区二区三区在线观看 | 国产又色又爽又黄 | 亚欧在线| 亚洲一区网 | 羞羞的视频在线观看 | 国产丝袜第一页 | 成年人黄色片网站 | 午夜精品美女久久久久av福利 | 久草美女| 豆豆色成人网 | 国产真实在线 | 色网网站 | 夜夜操狠狠干 | 福利视频99 | 国产成人综合视频 | 日本亚洲欧洲色 | 免费av影视| 日本草草视频 | 久久成年 | 欧美日韩一二三 | 成人午夜网 | 成人国产亚洲 | 免费观看日本 | 97精品超碰一区二区三区 | 精品久久久无码中文字幕边打电话 | 色欧美日韩 | 丰满人妻翻云覆雨呻吟视频 | 九九热8| 欧美老司机 | 亚洲精品日产精品乱码不卡 | 欧美抠逼视频 | 总裁边开会边做小娇妻h | 欧美国产大片 | 在线观看免费黄色小视频 | 欧美一区二区免费 | 亚洲精品偷拍视频 | 欧美激情一区二区三级高清视频 | 国产又粗又黄又爽视频 | 久久精品tv | 中文字幕在线观看亚洲 | 亚洲精品久 | 欧美极品少妇xxxxⅹ裸体艺术 | 日韩精品国产AV | 日韩在线资源 | 另类欧美亚洲 | 日日夜夜免费精品视频 | 黄色成年人 | 日韩国产一级 | 国产又粗又猛又黄视频 | 中出一区二区 | 日p免费视频| 超碰97国产在线 | 久久久无码18禁高潮喷水 | 自拍视频在线观看 | wwwwww国产| 色播五月激情五月 | 性网站在线观看 | 麻豆影视在线免费观看 | 午夜剧场成人 | 中文字幕av片 | 91在线网| 色老头一区二区三区 | 亚洲作爱网 | 自拍偷拍亚洲天堂 | 亲子乱aⅴ一区二区三区 | 无码人妻精品一区二区三区66 | 日韩和欧美的一区二区 | av大片网址 | 大色网小色网 | 久青草影院 | 男人吃奶视频 | 久久精品亚洲精品国产欧美 | 一区不卡av | 亚洲字幕在线观看 | 香蕉视频网站 | 国产婷婷色一区二区三区 | 国产乱码精品一区二区三区五月婷 | 极品销魂美女一区二区 | 97精品人妻一区二区三区 | 加勒比在线一区 | 美日韩在线 | 超碰97在线看| 小泽玛利亚在线 | 操亚洲女人| 国产啪视频 | 少妇被狂c下部羞羞漫画 | 2019毛片|