一、將基於含有r個字元的字母表的單詞查詢樹稱為r向單詞查詢樹。(p479)
1、基於單詞查詢樹的符號表
//基於單詞查詢樹的符號表
public class triest
public value get(string key)
private node get(node x, string key, int d)
public void put(string key, value val)
private node put(node x, string key, value val, int d)
char c = key.charat(d);
x.next[c] = put(x.next[c], key, val, d + 1);
return x;
}}
2、查詢所有鍵
public iterablekeys()
public iterablekeyswithprefixof(string pre)
private void collect(node x, string pre, queueq)
}
3、萬用字元匹配
//萬用字元匹配
public iterablekeysthatmatch(string pat)
private void collect(node x, stringpre, string pat, queueq)
4、最長字首
//最長字首(找到給定字串的最長鍵字首)
publicstring longestprefixof(string s)
privateint search(node x, string s, int d, int length)
5、刪除操作
//刪除操作
publicvoid delete(string key)
privatenode delete(node x, string key, int d)
if(x.val != null) return x;
for(char c = 0; c < r; c++)
if(x.next[c] != null) return x;
returnnull;
}二、單詞查詢樹的性質:
1、單詞查詢樹的鍊錶結構和鍵的插入刪除順序無關。
2、在單詞查詢樹中查詢或插入乙個鍵時,訪問陣列的次數最多為鍵的長度加1。
3、字母表的大小為r,在一棵由n個隨機鍵構成的單詞查詢樹中,未命中平均所需檢查的節點數為lognr.
4、一棵單詞查詢樹的鏈結總數在nr到nrw之間,w為鍵的平均長度。
//基於三向單詞查詢樹的符號表
public class tst
publicvalue get(string key)
privatenode get(node x, string key, int d)
publicvoid put(string key, value val)
privatenode put(node x, string key, value val, int d)
if(c < x.c) x.left = put(x.left, key, val, d);
elseif (c > x.c) x.right = put(x.right, key, val, d);
elseif (d < key.length() - 1) x.mid = put(x.mid, key, val, d+1);
el***.val = val;
returnx;}}
四、三向單詞查詢樹的性質:
1、單詞查詢樹的形狀取決於插入的順序。
2、由n個平均長度為w的字串構造的三向單詞查詢樹中的鏈結總數為3n到3nw之間。
3、在一棵由n個隨機字串構造的三向單詞查詢樹中,查詢未命中平均需要比較字元~lnn次,除~lnn次外,一次插入或命中的查詢會比較一次被查詢的鍵中的每個字元。
4、r向單詞查詢樹在不考慮空間的時候是最快的,適用於較短的鍵和較小的字母表,三向單詞查詢樹適用於非隨機的鍵。
單詞查詢樹
兩種方法 給出一些列號碼,若果任乙個號碼不在另乙個中充當字首,那麼這系列號碼是合理的輸出yes,否則輸出no 思路 標頭檔案中find函式的使用,按長度從小到大排列,那麼能當另乙個號碼字首的只能是前乙個當後乙個的字首,所以乙個乙個找 時間複雜度 o n include include include...
單詞查詢樹
一 概念 從上面的圖中,我們或多或少的可以發現一些好玩的特性。第一 根節點不包含字元,除根節點外的每乙個子節點都包含乙個字元。第二 從根節點到某一節點,路徑上經過的字元連線起來,就是該節點對應的字串。第三 每個單詞的公共字首作為乙個字元節點儲存。二 使用範圍 既然學trie樹,我們肯定要知道這玩意是...
單詞查詢樹
在進行文法分析的時候,通常需要檢測乙個單詞是否在我們的單詞列表裡。為了提高查詢和定位的速度,通常都畫出與單詞列表所對應的單詞查詢樹,其特點如下 1 根結點不包含字母,除根結點外每乙個結點都僅包含乙個大寫英文本母 2 從根結點到某一結點,路徑上經過的字母依次連起來所構成的字母序列,稱為該結點對應的單詞...