單詞查詢樹的實現

2021-06-27 10:23:48 字數 1173 閱讀 1403

單詞查詢樹,即trie樹,又叫字典樹或字首樹,是一種樹型結構。用於統計,排序,儲存大量的字串,效率較高,主要是以空間換時間。

但我們遇到大量的字串要進行儲存,並且要在其中查詢某些字串時,如果用一般陣列儲存從頭到尾掃一遍要o(n)的時間效率,顯然這不夠好,因為我們多比較了許多無用的字串, 如果我們能根據字串字首排除一些字串,又可以節省許多時間,這就需要單詞查詢樹。

單詞查詢樹思想類似於英文本典,根據單詞第乙個字元進行分類,放在不同的子樹中,在根據下乙個字元進行分類,放在不同子樹中......這就相當於形成了乙個二十六叉樹,當我們查詢某個字串時從根節點(無字元)出發,如果子樹中有該字串的這一位字元,則查該子樹,直到查到葉節點,看是否與待查字串對應,然後根據結果輸出即可,時間效率為o(length(s)),length(s)為字串長度。

增加節點操作

procedure done(var x:longint);

var i,j:longint;

begin

len:=len+1; x:=len; g[len]:=false;

end;

插入

procedure put(s:string);

var i,p,c:longint;

begin

p:=1;

for i:=1 to length(s) do

begin

c:=ord(s[i])-96;

if trie[p,c]=0 then done(trie[p,c]);

p:=trie[p,c];

end;

v[p]:=v[p]+1;

end;

查詢

function get(s:string):longint;

var i,p,c:longint;

begin

p:=1;

for i:=1 to length(s) do

begin

c:=ord(s[i])-96;

p:=trie[p,c];

if p=0 then begin break; end;

end;

if (p>0)and(g[p]=false) then get:=v[p];

end;

單詞查詢樹

兩種方法 給出一些列號碼,若果任乙個號碼不在另乙個中充當字首,那麼這系列號碼是合理的輸出yes,否則輸出no 思路 標頭檔案中find函式的使用,按長度從小到大排列,那麼能當另乙個號碼字首的只能是前乙個當後乙個的字首,所以乙個乙個找 時間複雜度 o n include include include...

單詞查詢樹

一 概念 從上面的圖中,我們或多或少的可以發現一些好玩的特性。第一 根節點不包含字元,除根節點外的每乙個子節點都包含乙個字元。第二 從根節點到某一節點,路徑上經過的字元連線起來,就是該節點對應的字串。第三 每個單詞的公共字首作為乙個字元節點儲存。二 使用範圍 既然學trie樹,我們肯定要知道這玩意是...

單詞查詢樹

在進行文法分析的時候,通常需要檢測乙個單詞是否在我們的單詞列表裡。為了提高查詢和定位的速度,通常都畫出與單詞列表所對應的單詞查詢樹,其特點如下 1 根結點不包含字母,除根結點外每乙個結點都僅包含乙個大寫英文本母 2 從根結點到某一結點,路徑上經過的字母依次連起來所構成的字母序列,稱為該結點對應的單詞...