プレフィックス ツリー (トライ) は、主に文字列の保存と照合に使用されるデータ構造です。この記事では、Golangを使ってプレフィックスツリーを実装する方法を紹介します。
プレフィックス ツリー (辞書ツリーとも呼ばれる) は、文字列コレクションを格納するために使用されるツリー状のデータ構造で、主に大量のテキストの中から特定の文字列を効率的に見つけるために使用されます。ハッシュ テーブルなどの他のデータ構造と比較すると、プレフィックス ツリーの時間計算量は O(k) です。ここで、k は検索する文字列の長さを表します。
プレフィックス ツリーの中心概念は「ノード」であり、各ノードには次の情報が含まれます:
#次の図は、4 つの文字列 (apple、apply、app、banana) を含むプレフィックス ツリーの例です。
type Trie struct { children map[byte]*Trie isLeaf bool } func NewTrie() *Trie { return &Trie{children: make(map[byte]*Trie)} } func (t *Trie) Insert(word string) { curr := t for i := 0; i < len(word); i++ { c := word[i] if _, ok := curr.children[c]; !ok { curr.children[c] = NewTrie() } curr = curr.children[c] } curr.isLeaf = true } func (t *Trie) Search(word string) bool { curr := t for i := 0; i < len(word); i++ { c := word[i] if _, ok := curr.children[c]; !ok { return false } curr = curr.children[c] } return curr.isLeaf } func (t *Trie) Delete(word string) { nodes := make([]*Trie, 0) curr := t for i := 0; i < len(word); i++ { c := word[i] if _, ok := curr.children[c]; !ok { return } nodes = append(nodes, curr) curr = curr.children[c] } curr.isLeaf = false if len(curr.children) > 0 { return } for i := len(nodes) - 1; i >= 0; i-- { node := nodes[i] delete(node.children, word[i]) if len(node.children) > 0 || node.isLeaf { return } } }コードでは、NewTrie() 関数を使用して新しいプレフィックス ツリー ノードを作成し、Insert() 関数を使用して文字列を挿入します。プレフィックス ツリー; Search() 関数はプレフィックス ツリーに文字列が存在するかどうかを検索するために使用され、Delete() 関数は文字列を削除するために使用されます。
以上がプレフィックスツリーの golang 実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。