單詞查詢樹,即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 從根結點到某一結點,路徑上經過的字母依次連起來所構成的字母序列,稱為該結點對應的單詞...