Pokok awalan (Trie) ialah struktur data yang digunakan terutamanya untuk penyimpanan dan pemadanan rentetan. Dalam artikel ini, kami akan memperkenalkan cara melaksanakan pokok awalan menggunakan Golang.
Pokok awalan, juga dipanggil pokok kamus, ialah struktur data berbentuk pepohon yang digunakan untuk menyimpan koleksi rentetan, terutamanya digunakan untuk mencari rentetan tertentu dengan cekap dalam sejumlah besar teks. Berbanding dengan struktur data lain seperti jadual cincang, kerumitan masa pokok awalan ialah O(k), dengan k mewakili panjang rentetan yang akan ditemui.
Konsep teras pepohon awalan ialah "Nod", setiap nod mengandungi maklumat berikut:
Rajah berikut ialah contoh pokok awalan yang mengandungi empat rentetan (epal, terapkan, aplikasi, pisang):
Operasi asas pepohon awalan termasuk sisipan, carian dan pemadaman:
2.1 Sisipan
Apabila memasukkan rentetan ke dalam pepohon awalan, kami perlu mula merentasi dari nod akar.
Langkah khusus adalah seperti berikut:
Cari rentetan aksara, kita perlu mula merentasi dari nod akar.
Langkah-langkah khusus adalah seperti berikut:
Mulakan nod semasa sebagai nod punca; nod anak nod semasa , ini bermakna rentetan tidak wujud dalam pepohon awalan Jika aksara semasa berada dalam nod anak nod semasa, pindah ke nod itu; 🎜>Selepas melintasi rentetan, jika Jika tanda isLeaf nod semasa adalah benar, ini bermakna rentetan itu wujud dalam pepohon awalan jika tidak, ia bermakna awalan wujud dalam pepohon awalan, tetapi rentetan itu tidak wujud dalam pokok awalan.Berikut ialah contoh pemadaman rentetan "epal" dan proses pelaksanaannya:
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 } } }
Ringkasan
Atas ialah kandungan terperinci Perlaksanaan golang pokok awalan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!