freeCodeCamp/guide/arabic/miscellaneous/data-structure-trie/index.md

6.5 KiB

title localeTitle
Data Structure Trie هيكل البيانات تري

مقدمة في تري

كلمة trie هي عبارة عن inflix لكلمة "re trie val" ، لأن trie يمكنه العثور على كلمة واحدة في قاموس يحتوي على بادئة الكلمة فقط.
Trie هي بنية بيانات استرجاع البيانات الفعالة ، باستخدام trie ، يمكن إدخال تعقيدات البحث إلى الحد الأمثل ، أي طول السلسلة.
إنه هيكل شجرة متعدد الاتجاهات مفيد لتخزين السلاسل على الأبجدية ، عندما نقوم بتخزينها.
وقد تم استخدامه لتخزين قواميس كبيرة من اللغة الإنجليزية ، على سبيل المثال ، الكلمات في برامج التدقيق الإملائي.
ومع ذلك ، فإن عقوبة على tries هي متطلبات التخزين.

ما هو تري؟

إن trie عبارة عن شجرة تشبه بنية البيانات التي تخزن السلاسل ، وتساعدك في العثور على البيانات المرتبطة بهذه السلسلة باستخدام بادئة السلسلة.
على سبيل المثال ، لنفترض أنك تخطط لإنشاء قاموس لتخزين السلاسل مع معانيها. يجب أن تتساءل لماذا لا يمكنني ببساطة استخدام جدول تجزئة ، للحصول على المعلومات.
نعم ، من الواضح أنك تستطيع الحصول على معلومات باستخدام جدول تجزئة ، لكن جداول التجزئة لا يمكنها العثور إلا على البيانات التي تتطابق فيها السلسلة تمامًا مع تلك التي أضفناها. ولكن تري يعطينا القدرة على العثور على سلاسل مع البادئات المشتركة ، حرف مفقود في وقت أقل ، بالمقارنة مع جدول تجزئة.
تريلي عادة ، يبدو شيء من هذا القبيل ،

حاكموا

هذه صورة لتري ، الذي يخزن الكلمات {assoc، algo، all، also، tree، trie}.

كيفية تنفيذ تري؟

دعونا تنفيذ trie في python ، لتخزين الكلمات مع معانيها من القاموس الإنجليزي.

`ALPHABET_SIZE = 26 # For English

class TrieNode: def init(self): self.edges = [None]*(ALPHABET_SIZE) # Each index respective to each character. self.meaning = None # Meaning of the word. self.ends_here = False # Tells us if the word ends here. `

وكما ترى ، يبلغ طول الحواف 26 حرفًا ، حيث يشير كل مؤشر إلى كل حرف في الأبجدية. 'A' المقابلة لـ 0 ، 'B' to 1 ، 'C' to 2… 'Z' to 25th index. إذا كان الحرف الذي تبحث عنه يشير إلى None ، فهذا يعني أن الكلمة غير موجودة في trie.

يجب على Trie نموذجية تنفيذ هاتين الوظيفتين على الأقل:

  • add_word(word,meaning)
  • search_word(word)
  • delete_word(word)

بالإضافة إلى ذلك ، يمكن للمرء أيضا إضافة شيء من هذا القبيل

  • get_all_words()
  • get_all_words_with_prefix(prefix)

مضيفا كلمة إلى تري

` def add_word(self,word,meaning): if len(word)==0: self.ends_here = True # Because we have reached the end of the word self.meaning = meaning # Adding the meaning to that node return ch = word[0] # First character # ASCII value of the first character (minus) the ASCII value of 'a'-> the first character of our ALPHABET gives us the index of the edge we have to look up. index = ord(ch) - ord('a') if self.edges[index] == None: # This implies that there's no prefix with this character yet. new_node = TrieNode() self.edges[index] = new_node

    self.edges[index].add(word[1:],meaning) #Adding the remaining word 

`

استرجاع البيانات

def search_word(self,word): if len(word)==0: if self.ends_here: return True else: return "Word doesn't exist in the Trie" ch = word[0] index = ord(ch)-ord('a') if self.edge[index]== None: return False else: return self.edge[index].search_word(word[1:])

search_word الدالة search_word ما إذا كانت الكلمة موجودة في Trie أم لا. بما أن قاموسنا هو قاموس ، فنحن بحاجة إلى جلب المعنى أيضًا ، والآن دعونا نعلن عن وظيفة للقيام بذلك.

def get_meaning(self,word): if len(word)==0 : if self.ends_here: return self.meaning else: return "Word doesn't exist in the Trie" ch = word[0] index = ord(ch) - ord('a') if self.edges[index] == None: return "Word doesn't exist in the Trie" else: return self.edges[index].get_meaning(word[1:])

حذف البيانات

بحذف البيانات ، تحتاج فقط إلى تغيير المتغير ends_here إلى False . فعل ذلك لا يغير البادئات ، لكن اللقطات تحذف معنى ووجود الكلمة من trie.

def delete_word(self,word): if len(word)==0: if self.ends_here: self.ends_here = False self.meaning = None return "Deleted" else: return "Word doesn't exist in the Trie" ch = word[0] index = ord(ch) - ord('a') if self.edges[index] == None: return "Word doesn't exist in the Trie" else: return self.edges[index].delete_word(word[1:])

:rocket: تشغيل الكود

مصادر

  • لمزيد من القراءة ، يمكنك تجربة هذا البرنامج التعليمي Topcoder .
  • أيضا ، تعليمي من geeksforgeeks