字串1 字首樹的使用

2021-09-13 21:57:14 字數 2355 閱讀 7122

字首樹:trie樹,又稱字典樹、字首樹,是一種樹形結構,是雜湊樹的變種,是一種用於快速檢索的多叉樹結構。

典型應用是用於統計和排序大量的字串(但不僅限於字串),所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是:最大限度地減少無謂的字串比較,查詢效率比雜湊表高。

trie的核心思想是空間換時間。利用字串的公共字首來降低查詢時間的開銷以達到提高效率的目的。

trie樹也有它的缺點,trie樹的記憶體消耗非常大。

怎麼樣建立乙個字首樹?首先我們定義乙個字串『abc』 ,那麼它是怎麼建立的呢

我們再新增乙個字串『bce』,在樹上怎麼新增呢,會在這棵樹上看頭結點的下面乙個有沒有是以b開頭的,沒有就開過一條路,有就直接拿來復用。

真正的用處:

我們可以在每個節點新增兩個資料項,乙個end表示字串是以這個節點為結尾的,乙個path表示這個節點被經過多少次。字首樹一般用於字串的增刪改查等這些功能。

**:

public

class

code_01_trietree

}public

static

class

trie

//插入字串

public

void

insert

(string word)

char

chs = word.

tochararray()

;//把字串轉換為陣列

trienode node = root;

int index =0;

for(

int i =

0; i < chs.length; i++

) node = node.nexts[index]

;//跳到下面的那個節點依次檢視

node.path++

;//經過的次數+1

} node.end++

;//一直到最後那個,end+1

}//刪除這個字串

public

void

delete

(string word)

node = node.nexts[index];}

node.end--;}

}//查詢是否有這個字串

public

intsearch

(string word)

char

chs = word.

tochararray()

; trienode node = root;

int index =0;

for(

int i =

0; i < chs.length; i++

) node = node.nexts[index];}

return node.end;

}//查詢有多少是以這個字串為字首的

public

intprefixnumber

(string pre)

char

chs = pre.

tochararray()

; trienode node = root;

int index =0;

for(

int i =

0; i < chs.length; i++

) node = node.nexts[index];}

return node.path;}}

public

static

void

main

(string[

] args)

}

**裡面的方法解析:

插入和查詢就不細說了,可以看**的註解。重點說一下這裡面的刪除操作。刪除操作裡面有乙個情況。

例如我要刪除字串kgftw,這裡面當我遍歷到f的時候我們會發現這裡的path已經為0了 ,所以我們 可以直接把後面的那些刪除。

查詢有多少是以這個字串為字首的思想,一樣我們遍歷到這個字串的最後乙個字元,看它的path就可以知道它被當成了多少次字首。

字串 字首樹 字典樹 Trie樹的實現

關鍵點 1 節點類的構建,通過乙個陣列記錄下乙個節點及路徑 2 注意path 0 end 0的含義 字典樹 字首樹的實現 是一種樹形結構,優點是利用字串的公共字首來節約儲存空間 class trienode class trie 新增word,可重複新增 public void insert str...

字串的使用(1)

1 字串定義 用單引號或者雙引號括起來的任意字串行 2 字串的特點 有序集合型別 支援索引訪問 不可變資料型別,元素不能直接修改 3 str a str 11,22 組成 普通字元,特殊字元 轉義字元 n 4 字串的運算 str index 索引訪問,但不能修改 str start end 切片 o...

Python 字串字首

該部落格主要記錄下python字串的字首,讓後續的使用更加方便 後面字串以 unicode 格式 進行編碼,一般用在中文字串前面,防止因為原始碼儲存格式問題,導致再次使用時出現亂碼。作用 去掉反斜槓的轉移機制。特殊字元 即那些,反斜槓加上對應字母,表示對應的特殊含義的,比如最常見的 n 表示換行,t...