大道至簡的演算法 字首樹

2021-10-03 17:09:39 字數 1502 閱讀 9601

trie (發音為 「try」) 或字首樹是一種樹資料結構,用於檢索字串資料集中的鍵。這一高效的資料結構有多種應用:

自動補全

拼寫檢查

ip 路由 (最長字首匹配)

t9 (九宮格) 打字**

單詞遊戲

://方法將在下文實現...

};字首樹主要有三個操作:插入、搜尋、字首匹配。

1)插入

描述:向 trie 中插入乙個單詞 word

實現:這個操作和構建鍊錶很像。首先從根結點的子結點開始與 word 第乙個字元進行匹配,一直匹配到字首鏈上沒有對應的字元,這時開始不斷開闢新的結點,直到插入完 word 的最後乙個字元,同時還要將最後乙個結點isend = true;,表示它是乙個單詞的末尾。

2)查詢

描述:查詢 trie 中是否存在單詞 word

實現:從根結點的子結點開始,一直向下匹配即可,如果出現結點值為空就返回false,如果匹配到了最後乙個字元,那我們只需判斷node->isend即可。

3)字首匹配

描述:判斷 trie 中是或有以 prefix 為字首的單詞

實現:和 search 操作類似,只是不需要判斷最後乙個字元結點的isend,因為既然能匹配到最後乙個字元,那後面一定有單詞是以它為字首的。

#include

using

namespace std;

class

trie

;public

:void

insert

(string word)

tempnode-

>isend =

true;}

bool

search

(string word)

return node-

>isend;

}bool

prefix

(string prefix)

return

true;}

};

為什麼說它偉大呢?因為它的思路很簡單卻能大大提高使用者的體驗感,給了我一種大道至簡的感覺。這樣的演算法,光是看,都能讓人醉意十足。

列舉演算法 大道至簡

中國大學mooc 北京交通大學 演算法設計與問題求解 的lucky number 是3,5和7,他愛屋及烏,還把所有質因數只有3,5,7的數字也認定為lucky number,比如9,15,21,25等等。請聰明的你幫忙算一算小於等於x的lucky number有多少個?輸入資料 乙個正整數x,3 ...

看了《大道至簡》

無意間在網上翻到這本書,粗粗的看了一遍,有點感觸。可以研究細節,但不能陷入,可以一時陷入,但不能一世陷入。當然,這對技術狂熱者或許是除外的。如果要解決問題,那麼無論何種程式語言,都是一種工具,要做的是對於當前的問題選擇適合的工具。任何一種工具都是在某個情境下才可以區分孰優孰劣。中國的一些理論,很少放...

讀大道至簡

軟體開發 方法 過程 工程 組織 演算法 結構 方法 面向過程 物件導向 過程 瀑布模型 迭代模型 工程 專案管理 進度 成本 質量 組織 體制 組織結構和制度 是乙個向外擴充套件的過程。方法 分,模組化設計 過程 增量迭代,還是瀑布模型 工程 進度 成本 質量 組織 組織結構 制度 舉乙個做生意的...