日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
一篇學(xué)好如何實現(xiàn)Trie

本文轉(zhuǎn)載自微信公眾號「我好困啊」,作者mengxin。轉(zhuǎn)載本文請聯(lián)系我好困啊公眾號。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),藍(lán)山企業(yè)網(wǎng)站建設(shè),藍(lán)山品牌網(wǎng)站建設(shè),網(wǎng)站定制,藍(lán)山網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,藍(lán)山網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

Trie又稱為字典樹,主要用于單詞的查找得名。如將一個單詞 Hello存放在字典樹中的數(shù)據(jù)結(jié)構(gòu)為:

當(dāng)再次加入help時,此時的字典樹為:

當(dāng)添加hero時,此時的字典樹為:

可以看到樹以每個單詞的字符為一個節(jié)點,直到字符添加完畢后設(shè)置上flag,標(biāo)記當(dāng)前節(jié)點結(jié)束為一個單詞(即從根節(jié)點到當(dāng)前節(jié)點為一個單詞)。

當(dāng)有新的單詞進(jìn)來時,只需要添加到樹中即可,查找時,從根節(jié)點出發(fā),遍歷整棵樹(其實總是遍歷樹的某個分支)。如果其中一個字符不在樹中,則說明查找失敗,否則所有的word按每個字符的順序都能查找到,最后判斷結(jié)束節(jié)點是否為一個單詞,是,則查找成功。

代碼實現(xiàn)

 
 
 
 
  1. //葉子節(jié)點 
  2. type Node struct { 
  3.     isWord bool   //是否為一個單詞 
  4.     next map[uint8]*Node //葉子節(jié)點對應(yīng)的單個字符及其next指針 
  5.  
  6. type Trie struct { 
  7.     root *Node 
  8.     size int64 
  9.  
  10. func Constructor() Trie { 
  11.     return Trie{&Node{ 
  12.         isWord: false, 
  13.         next:  make(map[uint8]*Node), 
  14.     },0} 
  15.  
  16. /** 添加單詞到字典中 */ 
  17. func (this *Trie) Insert(word string)  { 
  18.     if  word ==""{ 
  19.         return 
  20.     } 
  21.     cur := this.root 
  22.  
  23.     for i:= 0;i< len(word);i++ { 
  24.         r := word[i] 
  25.         if  cur.next[r]== nil{ 
  26.             cur.next[r] = &Node{false, make(map[uint8]*Node)} 
  27.         } 
  28.         cur = cur.next[r] 
  29.     } 
  30.     if !cur.isWord { 
  31.         cur.isWord = true 
  32.     } 
  33.  
  34.  
  35.  
  36. /** 查找單詞 */ 
  37. func (this *Trie) Search(word string) bool { 
  38.     if  word ==""{ 
  39.         return false 
  40.     } 
  41.     cur := this.root 
  42.  
  43.     for i:= 0;i< len(word);i++ { 
  44.         r := word[i] 
  45.         if  cur.next[r]== nil{ 
  46.             return false 
  47.         } 
  48.         cur = cur.next[r] 
  49.     } 
  50.     return cur.isWord 
  51.  
  52.  
  53. /**查找對應(yīng)前綴 */ 
  54. func (this *Trie) StartsWith(prefix string) bool { 
  55.     if  prefix ==""{ 
  56.         return false 
  57.     } 
  58.     cur := this.root 
  59.  
  60.     for i:= 0;i< len(prefix);i++ { 
  61.         r := prefix[i] 
  62.         if  cur.next[r]== nil{ 
  63.             return false 
  64.         } 
  65.         cur = cur.next[r] 
  66.     } 
  67.     return true 

文章標(biāo)題:一篇學(xué)好如何實現(xiàn)Trie
本文網(wǎng)址:http://m.5511xx.com/article/cdeeede.html