การใช้โครงสร้างข้อมูล Trie ใน Go มันมีคุณสมบัติมากกว่าการค้นหาคำนำหน้า Trie ปกติ และมีวัตถุประสงค์เพื่อใช้สำหรับการเติมข้อความอัตโนมัติ
สามารถทดลองใช้การสาธิต WebAssembly ได้ที่ shivamMg.github.io/trie
คีย์คือ []string
แทนที่จะเป็น string
ดังนั้นจึงรองรับกรณีการใช้งานได้มากขึ้น - เช่น []string{the quick brown fox} สามารถเป็นคีย์ที่แต่ละคำจะเป็นโหนดใน Trie
รองรับปุ่ม Put และปุ่ม Delete
รองรับการค้นหาคำนำหน้า - เช่น การค้นหา ชาติ อาจส่งคืน ชาติ , ชาติ , ชาตินิยม , ชาตินิยม ฯลฯ
รองรับการแก้ไขการค้นหาระยะทาง (หรือที่เรียกว่าระยะทาง Levenshtein) - เช่น การค้นหา ข้าวสาลี อาจให้คำที่ดูคล้ายกัน เช่น ข้าวสาลี , โกง , ความร้อน , อะไร ฯลฯ
ลำดับของผลการค้นหาถูกกำหนดไว้แล้ว มันเป็นไปตามลำดับการแทรก
tri := trie.New()// ใส่คีย์ ([]string) และค่า (ใดๆ)tri.Put([]string{"the"}, 1)tri.Put([]string{"the", " รวดเร็ว", "สีน้ำตาล", "จิ้งจอก"}, 2)tri.Put([]string{"the", "quick", "sports", "car"}, 3)tri.Put([]string{" ที่", "green", "tree"}, 4)tri.Put([]string{"an", "apple", "tree"}, 5)tri.Put([]string{"an", "umbrella"} , 6)tri.Root().Print()// Output (trie เต็มพร้อมเทอร์มินัลที่ลงท้ายด้วย ($)):// ^// ├─ the ($)// │ ├─ quick// │ │ ├─ สีน้ำตาล// │ │ │ └─ สุนัขจิ้งจอก ($)// │ │ └─ กีฬา// │ │ └─ รถยนต์ ($)// │ └─ สีเขียว// │ └─ ต้นไม้ ($)// └ ─ an// ├─ แอปเปิ้ล// │ └─ tree ($)// └─ ร่ม ($) ผลลัพธ์ := tri.Search([]string{"the", "quick"})for _, res := range results.Results { fmt.Println(res .Key, res.Value) }// เอาต์พุต (การค้นหาตามคำนำหน้า):// [the quick brown fox] 2// [the quick sports car] 3key := []string{"the", "tree"}results = tri.Search(key , trie.WithMaxEditDistance(2), // การแก้ไขสามารถแทรก, ลบ, แทนที่trie.WithEditOps()) สำหรับ _, res := range results.Results { fmt.Println(res.Key, res.EditDistance) // EditDistance คือจำนวนการแก้ไขที่จำเป็นในการแปลงเป็น [the tree]}// Output (ผลลัพธ์ไม่เกิน 2 การแก้ไขจาก [the tree]):// [the] 1// [the green tree ] 1// [ต้นแอปเปิล] 2// [ร่ม] 2ผลลัพธ์ := results.Results[2]fmt.Printf("ในการแปลง %v เป็น %v:n", result.Key, key)printEditOps(result.EditOps)// เอาต์พุต (การดำเนินการแก้ไขที่จำเป็นเพื่อแปลงผลลัพธ์เป็น [ทรี]):// หากต้องการแปลง [ต้นแอปเปิ้ล] เป็น [ต้นไม้]:// - ลบ "an"// - แทนที่ "apple" ด้วย "the"// - อย่าแก้ไข "tree"results = tri.Search(key, trie.WithMaxEditDistance(2), trie.WithTopKLeastEdited(), trie.WithMaxResults(2)) สำหรับ _, res := range results.Results { fmt.Println(res.Key, res.Value, res.EditDistance) }// เอาต์พุต (ผลลัพธ์ที่มีการแก้ไขน้อยที่สุด 2 อันดับแรก):// [the] 1 1// [the green tree] 4 1
https://en.wikipedia.org/wiki/Levenshtein_distance#Iterative_with_full_matrix
http://stevehanov.ca/blog/?id=114
https://gist.github.com/jlherren/d97839b1276b9bd7faa930f74711a4b6