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 الكامل بالعربي.