Implementing a Trie
Trie'ni amalga oshirish
Oldingi darsda ko'rgan g'oyani endi Go kodiga aylantiramiz. Har bir tugun — bolalar xaritasi (map[rune]*TrieNode, chunki har bir "bola" muayyan bir harfga mos keladi) va isEnd bayrog'idan iborat bo'ladi.
package main
import "fmt"
type TrieNode struct {
children map[rune]*TrieNode
isEnd bool
}
func newTrieNode() *TrieNode {
return &TrieNode{children: make(map[rune]*TrieNode)}
}
type Trie struct {
root *TrieNode
}
func NewTrie() *Trie {
return &Trie{root: newTrieNode()}
}
func (t *Trie) Insert(word string) {
node := t.root
for _, ch := range word {
if node.children[ch] == nil {
node.children[ch] = newTrieNode()
}
node = node.children[ch]
}
node.isEnd = true
}
func main() {
t := NewTrie()
t.Insert("go")
t.Insert("gopher")
fmt.Println(t.root.children['g'].children['o'].isEnd)
}Insert so'zning har bir harfi (rune) bo'yicha yuradi: agar joriy tugunda shu harf uchun "bola" hali yo'q bo'lsa, yangisini yaratadi; bor bo'lsa, borini ishlatadi. Sikl tugagach (barcha harflar "bosib o'tilgach"), oxirgi tugunga isEnd = true belgilanadi — "aynan shu yergacha bo'lgan yo'l to'liq bir so'z" deb belgilash.
"go" va "gopher" qo'shilgach, g -> o yo'li ikkalasida ham bir xil, umumiy tugunlardan iborat — Trie ularni ikki marta emas, bir marta saqlaydi. Shuning uchun root.children['g'].children['o'].isEnd — true, chunki "go" aynan shu yerda tugaydi (garchi undan keyin ham "gopher" uchun yo'l davom etsa ham).
>_ Exercise
Trie'ga Search va StartsWith metodlarini qo'shing.
- •Search(word string) bool — so'z to'liq mavjudligini tekshiring (isEnd true bo'lishi shart)
- •StartsWith(prefix string) bool — biror so'z shu prefiks bilan boshlanishini tekshiring (isEnd shart emas)
- •"go" va "gopher"ni qo'shib, Search("go"), Search("gop") va StartsWith("gop") natijalarini chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Search va StartsWith bir xil "yo'l bosib o'tish" mantig'iga asoslanadi — farqi faqat oxirida isEnd bayrog'i tekshiriladimi yo'qmi.
NEXT UP
Race Conditions in Data Structures
$ go run main.go
Kodingizni ishga tushiring