تخطَّ إلى المحتوى

Trie

الشجرة اللاحقة (Trie) Trie

Trie شجرة تخزّن النصوص حرفًا بحرف، بحيث تتشارك الكلمات ذات البادئات المشتركة نفس الفروع — إدراج وبحث بتعقيد O(طول الكلمة)، مثالية للإكمال التلقائي.

كل عقدة تمثّل حرفًا، والمسار من الجذر لأي عقدة يمثّل بادئة. علامة 'نهاية كلمة' على كل عقدة تُميّز أين تنتهي كلمة كاملة فعليًا (بعكس مجرد بادئة لكلمة أطول). بخلاف جدول التجزئة، تدعم Trie طبيعيًا الاستعلامات القائمة على البادئة.

الصياغة

class TrieNode:
    def __init__(self):
        self.children = {}
        self.is_end_of_word = False

📄 مثال

class TrieNode:
    def __init__(self):
        self.children = {}
        self.is_end_of_word = False

class Trie:
    def __init__(self):
        self.root = TrieNode()

    def insert(self, word):
        node = self.root
        for char in word:
            node = node.children.setdefault(char, TrieNode())
        node.is_end_of_word = True

    def search(self, word):
        node = self.root
        for char in word:
            if char not in node.children:
                return False
            node = node.children[char]
        return node.is_end_of_word

trie = Trie()
trie.insert("برمجة")
print(trie.search("برمجة"))  # True
print(trie.search("برم"))    # False

أهم النقاط

النقطةالوظيفة
التعقيد الزمنيO(L) للإدراج والبحث والبحث بالبادئة، حيث L طول الكلمة — مستقلّ عن عدد الكلمات المخزَّنة
التعقيد المكانيأعلى من جدول التجزئة عادةً — كل عقدة قد تحتفظ بعدة مؤشرات لأبناء محتملين
ميزتها الفريدةبحث بالبادئة طبيعي ومباشر، وطباعة الكلمات مرتّبة أبجديًا بسهولة (DFS على الشجرة)

💡 نصائح عملية

  • استخدم Trie تحديدًا عندما تحتاج استعلامات بادئة (اقتراحات إكمال تلقائي) — لمجرد 'هل الكلمة موجودة بالضبط؟' فجدول التجزئة أبسط وأقل ذاكرة

⚠️ أخطاء شائعة

  • نسيان فحص علامة is_end_of_word عند البحث — يجعل الدالة تعتبر أي بادئة صالحة كلمة كاملة موجودة، وهذا خطأ منطقي شائع

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار DSA الكامل بالعربي.