تنفيذ بنية بيانات Trie في Go. فهو يوفر ميزات أكثر من البحث المعتاد عن بادئة Trie، ومن المفترض استخدامه للإكمال التلقائي.
يمكن تجربة العرض التوضيحي لـ WebAssembly على shivamMg.github.io/trie.
المفاتيح هي []string
بدلاً من string
، وبالتالي تدعم المزيد من حالات الاستخدام - على سبيل المثال، يمكن أن تكون []string{the Quick brown fox} مفتاحًا حيث ستكون كل كلمة بمثابة عقدة في Trie
دعم وضع المفتاح ومفتاح الحذف
دعم البحث عن البادئة - على سبيل المثال، قد يؤدي البحث عن أمة إلى إرجاع أمة ، أو قومية ، أو قومية ، أو قومية ، وما إلى ذلك.
دعم تحرير البحث عن بعد (المعروف أيضًا باسم مسافة Levenshtein) - على سبيل المثال، قد يؤدي البحث عن القمح إلى ظهور كلمات مشابهة مثل القمح ، والغش ، والحرارة ، وما ، وما إلى ذلك.
ترتيب نتائج البحث أمر حتمي. ويتبع ترتيب الإدراج.
tri := trie.New()// ضع المفاتيح ([]سلسلة) والقيم (أي)tri.Put([]string{"the"}, 1)tri.Put([]string{"the"، " Quick"، "brown"، "fox"}، 2)tri.Put([]string{"the"، "quick"، "sports"، "car"}، 3)tri.Put([]string{" ال"، "أخضر"، "شجرة"}، 4)tri.Put([]string{"an"، "apple"، "tree"}، 5)tri.Put([]string{"an"، "umbrella"}, 6)tri.Root(). Print()// الإخراج (محاولة كاملة مع المحطات الطرفية التي تنتهي بـ ($)):// ^// ├─ the ($)// │ ├─ سريع// │ │ ├─ بني// │ │ │ └─ ثعلب ($)// │ │ └─ رياضة// │ │ └─ سيارة ($)// │ └─ أخضر // │ └─ شجرة ($)// └─ و// ├─ apple// │ └─ شجرة ($)// └─ مظلة ($)results := tri.Search([]string{"the", "quick"})for _, res := نتائج النطاق.النتائج { fmt.Println(res.Key، res.Value) }// الإخراج (بحث يعتمد على البادئة):// [الثعلب البني السريع] 2// [السيارة الرياضية السريعة] 3key := []string{"the"، "tree"}results = tri.Search(key , trie.WithMaxEditDistance(2), // يمكن إدراج التعديل أو حذفه أو استبداله.WithEditOps())for _, res := range results.Results { fmt.Println(res.Key, res.EditDistance) // EditDistance هو عدد التعديلات اللازمة للتحويل إلى [الشجرة]}// الإخراج (النتائج لا تبعد أكثر من تعديلين عن [الشجرة]):// [the ] 1// [الشجرة الخضراء] 1// [شجرة تفاح] 2// [مظلة] 2النتيجة := results.Results[2]fmt.Printf("To converter %v إلى %v:n"، result.Key، key)printEditOps(result.EditOps)// الإخراج (عمليات التحرير اللازمة لإخفاء النتيجة إلى [الشجرة] ):// لتحويل [شجرة تفاح] إلى [الشجرة]:// - احذف "an"// - استبدل "apple" بـ "the"// - لا تقم بتحرير نتائج "tree" = tri.Search(key, trie.WithMaxEditDistance(2), trie.WithTopKLeastEdited(), trie.WithMaxResults(2))for _, res := range results.Results { fmt.Println(res.Key, res.Value, res مسافة التحرير) }// الإخراج (أعلى نتيجتين أقل تحريرًا):// [the] 1 1// [الشجرة الخضراء] 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