مرجع
آخر الزيارات

كومة ثنائية

284 كلمة•0 مشاهدة•🗒️ منذ 4 أيام
باختصار: الكومة الثنائية هي بنية بيانات كومة تتخذ شكل شجرة ثنائية. تجد هنا «عمليات الكومة»، «إدراج» و«استخراج».
المحتويات
  1. عمليات الكومة
  2. إدراج
  3. استخراج
كومة ثنائية

بدايةً، الكومة الثنائية هي بنية بيانات كومة تتخذ شكل شجرة ثنائية. تُعد الكومات الثنائية طريقة شائعة لتنفيذ رتل الأولوية. قدّم جون ويليامز الكومة الثنائية عام 1964 كبنية بيانات لتنفيذ فرز الكومة. وفيما يلي تفاصيل أوسع عن ذلك.

كذلك، تُعرَّف الكومة الثنائية بأنها شجرة ثنائية ذات قيدين إضافيين:

إضافةً إلى ذلك، خاصية الشكل: الكومة الثنائية هي شجرة ثنائية كاملة؛ أي أن جميع مستويات الشجرة، باستثناء الأخير (الأعمق)، تكون ممتلئة بالكامل، وإذا لم يكن المستوى الأخير من الشجرة مكتملًا، تُملأ عقد ذلك المستوى من اليسار إلى اليمين.

من جهة ثانية، خاصية الكومة: المفتاح المخزن في كل عقدة يكون إما أكبر من أو يساوي (≥) أو أصغر من أو يساوي (≤) المفاتيح في العقد الأصغر، بحسب ترتيب إجمالي معين.

عمليات الكومة

وفي هذا السياق، تُعدِّل كلٌّ من عمليتي الإدراج والإزالة الكومة للحفاظ على خاصية الشكل أولًا، وذلك بإضافة أو إزالة من نهايتها. ثم تُستعاد خاصية الكومة بالتنقل لأعلى أو لأسفل الكومة. تستغرق كلتا العمليتين وقتًا قدره O(log n).

إدراج

وعلى صعيد آخر، إذا لم يكن كذلك، يُبدل العنصر بعنصره الأصلي، ثم العودة مجدداً إلى الخطوة السابقة.

  • لإدراج عنصر في كومة، يُتبع الخطوات التالية:
  • إضافة العنصر إلى المستوى السفلي من الكومة في أقصى اليسار.
  • مقارنة العنصر المضاف بعنصره الأصلي؛ والتوثق في حال كان الترتيب صحيحًا.

من جهة ثانية، يعتمد عدد العمليات المطلوبة فقط على عدد المستويات التي يجب أن يصل إليها العنصر الجديد لتلبية خاصية الكومة. وبالتالي، فإن عملية الإدراج لها تعقيد زمني في أسوأ الحالات يساوي O(log n). في الكومة العشوائية، وفي عمليات الإدراج المتكررة، يكون متوسط تعقيد عملية الإدراج O(1).

استخراج

استبدال جذر الكومة بالعنصر الأخير في المستوى الأخير.

وعلى صعيد آخر، إجراء حذف الجذر من الكومة (استخراج العنصر الأقصى في الكومة القصوى أو العنصر الأدنى في الكومة الدنيا) مع الاحتفاظ بخاصية الكومة هو كما يلي:

في هذا الإطار، مفارنة الجذر الجديد بعناصره الفرعية؛ التوقف في حال كانت بالترتيب الصحيح.

ومن ناحية أخرى، إذا لم يكن كذلك، تبديل العنصر بأحد عناصره الفرعية، ثم العودة إلى الخطوة السابقة.

ما رأيك في هذه المقالة؟

📝 هل في هذه المقالة خطأ؟

إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.