"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تنفيذ جدول تجزئة فعال ثنائي الاتجاه في بايثون؟

كيفية تنفيذ جدول تجزئة فعال ثنائي الاتجاه في بايثون؟

تم النشر بتاريخ 2024-11-17
تصفح:356

How to Implement an Efficient Bidirectional Hash Table in Python?

تنفيذ جدول تجزئة فعال ثنائي الاتجاه

يسمح جدول التجزئة ثنائي الاتجاه بإجراء عمليات البحث من المفتاح إلى القيمة ومن القيمة إلى المفتاح. على الرغم من أن بنية بيانات الإملاء المضمنة في لغة بايثون تتفوق في عمليات البحث من مفتاح إلى قيمة، إلا أنها لا تقدم عمليات استرجاع فعالة من قيمة إلى مفتاح.

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

تنفيذ الكود:

class bidict(dict):
    def __init__(self, *args, **kwargs):
        super(bidict, self).__init__(*args, **kwargs)
        self.inverse = {}
        for key, value in self.items():
            self.inverse.setdefault(value, []).append(key) 

    def __setitem__(self, key, value):
        if key in self:
            self.inverse[self[key]].remove(key) 
        super(bidict, self).__setitem__(key, value)
        self.inverse.setdefault(value, []).append(key)        

    def __delitem__(self, key):
        self.inverse.setdefault(self[key], []).remove(key)
        if self[key] in self.inverse and not self.inverse[self[key]]: 
            del self.inverse[self[key]]
        super(bidict, self).__delitem__(key)

الميزات الرئيسية:

    الدليل العكسي (bd.inverse) هو قاموس يقوم بتعيين القيم إلى قائمة المفاتيح بهذه القيمة.
  • يتم تحديث الدليل العكسي تلقائيًا عند تعديل عرض الأسعار.
  • على عكس بعض تطبيقات العطاء، تسمح هذه الفئة مفاتيح متعددة لها نفس القيمة.

مثال الاستخدام:

bd = bidict({'a': 1, 'b': 2 )) طباعة (دينار بحريني) # {'أ': 1، 'ب': 2} طباعة (bd.inverse) # {1: ['a']، 2: ['b']} bd['c'] = 1 # الآن هناك مفتاحان لهما نفس القيمة (= 1) طباعة (دينار بحريني) # {'أ': 1، 'ج': 1، 'ب': 2} print(bd.inverse) # {1: ['a', 'c'], 2: ['b']} ديل دينار بحريني ['ج'] طباعة (دينار بحريني) # {'أ': 1، 'ب': 2} طباعة (bd.inverse) # {1: ['a']، 2: ['b']} ديل دينار بحريني['أ'] طباعة (دينار بحريني) # {'ب': 2} طباعة (bd.inverse) # {2: ['b']} دينار بحريني ['ب'] = 3 طباعة (دينار بحريني) # {'ب': 3} طباعة(bd.inverse) # {2: []، 3: ['b']}
            
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3