كومة فيبوناتشي صارمة
في علم الحاسوب ، تُعدّ كومة فيبوناتشي الصارمة بنية بيانات قائمة انتظار ذات أولوية ، تتميز بحدود زمنية منخفضة في أسوأ الحالات . وهي تُطابق الحدود الزمنية المُعدّلة لكومة فيبوناتشي في أسوأ الحالات. ولتحقيق هذه الحدود الزمنية، تحافظ أكوام فيبوناتشي الصارمة على عدة ثوابت من خلال إجراء تحويلات استعادة بعد كل عملية. ويمكن إجراء هذه التحويلات في وقت ثابت باستخدام هياكل بيانات مساعدة لتتبع انتهاكات الثوابت، ويضمن مبدأ التوزيع إمكانية إصلاح هذه الانتهاكات. وقد طُوّرت أكوام فيبوناتشي الصارمة في عام 2012 على يد جيرث إس. برودال ، وجورج لاغوجيانيس، وروبرت إي. تارجان ، مع تحديث لها في عام 2025. [ 1 ]
إلى جانب طوابير برودال ، تنتمي أكوام فيبوناتشي الصارمة إلى فئة من هياكل البيانات المثلى تقاربياً لطوابير الأولوية. [ 2 ] جميع العمليات على أكوام فيبوناتشي الصارمة تُنفذ في أسوأ الحالات بزمن ثابت باستثناء عملية حذف أصغر عنصر ، والتي تستغرق بالضرورة زمناً لوغاريتمياً. وهذا هو الأمثل، لأنه يمكن استخدام أي طابور أولوية لفرز قائمة منالعناصر من خلال أداءعمليات الإدخال وعمليات حذف الحد الأدنى . [ 3 ] ومع ذلك، فإن أكوام فيبوناتشي الصارمة أبسط من طوابير برودال، التي تستخدم المصفوفات الديناميكية والعدادات الزائدة، [ 4 ] في حين أن كومة فيبوناتشي الصارمة تعتمد على المؤشرات فقط.
بناء

كومة فيبوناتشي الصارمة هي شجرة واحدة تحقق خاصية الكومة الدنيا . أي أن مفتاح أي عقدة يكون دائمًا أصغر من أو يساوي مفتاح أبنائها. ونتيجةً لذلك، تقع العقدة ذات المفتاح الأدنى دائمًا في الجذر.
كما هو الحال في أكوام فيبوناتشي العادية، [ 5 ] تمتلك أكوام فيبوناتشي الصارمة بنى فرعية مشابهة لأكوام ذات الحدين . ولتحديد هذه البنى، نصنف كل عقدة إلى أحد نوعين. وعليه، نقدم التعريفات والقواعد التالية:
- جميع العقد إما نشطة (ملونة باللون الأبيض ) أو سلبية (ملونة باللون الأحمر ) .
- الجذر النشط هو عقدة نشطة ذات أصل سلبي.
- العقدة السلبية القابلة للربط هي عقدة سلبية حيث تكون جميع فروعها سلبية (تعتبر العقدة السلبية التي ليس لها أبناء قابلة للربط).
- رتبة العقدة النشطة هي عدد الأبناء النشطين الذين تمتلكهم .
- إن فقدان عقدة نشطة هو عدد الأبناء النشطين الذين فقدتهم.
- بالنسبة لأي عقدة، تقع العقد الفرعية النشطة على يسار العقد الفرعية السلبية.
- الجذر النشط لا يفقد أي شيء.
- الجذر مبني للمجهول.
- تقع الأبناء السلبية القابلة للربط من الجذر على يمين الأبناء السلبية غير القابلة للربط.
الثوابت
- الثابت 1: البنية
- الالطفل الأكثر نشاطًا على اليمينيفي شرط العقدة النشطة بما يلي:.
وبالتالي، يمكن اعتبار فقدان عقدة نشطة تعميمًا لـ "علامات" كومة فيبوناتشي . على سبيل المثال، الشجرة الفرعية التي تتكون فقط من عقد نشطة بفقدان صفري هي شجرة ذات حدين .
بالإضافة إلى ذلك، توجد عدة ثوابت تفرض حدودًا لوغاريتمية على ثلاث كميات رئيسية: عدد الجذور النشطة، والخسارة الكلية، ودرجات العقد. وهذا على عكس كومة فيبوناتشي العادية، التي تتميز بمرونة أكبر وتسمح بنمو الانتهاكات الهيكلية إلى رتبةسيتم تنظيفها لاحقًا، لأنها بنية بيانات كسولة .
للمساعدة في الحفاظ على درجات العقد لوغاريتمية، تشارك كل عقدة غير جذرية أيضًا في قائمة انتظار.في القسم التالي، وفي بقية هذه المقالة، سنعرّف العدد الحقيقي، أينيمثل عدد العقد في الكومة، ويرمز إلى اللوغاريتم الثنائي .
- الثابت الثاني: الجذور النشطة
- يبلغ العدد الإجمالي للجذور النشطة على الأكثر.
- الثابت 3: الخسارة الكاملة
- إجمالي الخسارة في الكومة هو على الأكثر.
- الثابت الرابع: درجة الجذر
- درجة الجذر هي على الأكثر.
- الثابت 5: الدرجات غير الجذرية
- بالنسبة للعقدة النشطة ذات الخسارة الصفرية، تكون الدرجة على الأكثر، أينموقعها في(مع اعتبار 1 العنصر الأول). أما بالنسبة لجميع العقد الأخرى غير الجذرية، فإن الدرجة تكون على الأكثر.
- النتيجة 1: الدرجة القصوى
- درجة أي عقدة غير جذرية هي على الأكثر.
- دليل :
- ويترتب على ذلك مباشرة من الثابت 5. بوضعلدينا
- اللمة 1: أعلى رتبة
- إذا تحققت الخاصية 1، فإن الرتبة القصوىأو أن أي عقدة نشطة تكون على الأكثر، أينهي الخسارة الكاملة. [ 6 ]
- دليل :
- نعتمد على التناقض. ليكنكن عقدة نشطة ذات رتبة قصوىفي كومة معالعقد والخسارة الكليةوافترض أن، أينهو أصغر عدد صحيح بحيثهدفنا هو إثبات أن الشجرة الفرعيةمتجذرة فييتضمنالعقد، وهذا تناقض لأنه لا يوجد سوىالعقد في الكومة.
- احذف جميع الأشجار الفرعية المتفرعة من العقد السلبية منوبذلك، تبقى العقد نشطة فقط. اقطع جميع أحفادالتي تحتوي أشجارها الفرعية على أي عقدة ذات خسارة موجبة، وزيادة خسارة أبناءوبناءً على ذلك، مرة واحدة عن كل حفيد مفقود. الكميةلم يطرأ أي تغيير على العقد المتبقية، مما يحافظ على الثابت 1. علاوة على ذلك، لا تزال الخسارة الإجمالية في حدود 1..
- أطفاليتكون الآن من أشجار فرعية خالية من الخسائر وعقد طرفية ذات خسارة موجبة. حاليًا،يرضيلـالطفل الأيمنلنجعل هذا مساواة تامة عن طريق تقليل خسارة كل منها أولاًوتقليم أي أحفاد إذا لزم الأمر. بعد ذلك،بالضبط. جميع أحفاد الآخرين منكما يتم تحويلها إلى أشجار فرعية ثنائية عن طريق تقليم الأبناء حسب الضرورة.
- نحاول الآن إعادة بناء نسخة مصغرة منبالبدء بشجرة ذات حدين من الدرجة، يحتويالعقد النشطة. نرغب في زيادة الخسارة إلىلكن احتفظ برتبةمثلوعدد العقد أقل ما يمكن. بالنسبة لشجرة ذات حدين من الدرجةيوجد طفل واحد من كل درجة منلوبالتالي، هناكأحفاد النظامإذا قمنا بإلغاء جميع الأحفاد الحاصلين على شهاداتهمثم قمنا بالقطعالأحفاد، وهو ما يكفي لرفع الخسارة إلىجميع الأحفاد حاصلون على شهادات جامعيةابقَ على قيد الحياة. دعها تنجو.أن يكون ابنمع درجة علميةوالخسارة صفر. بافتراض ذلك،، وهي شجرة ذات حدين كاملة، لذا فهي تحتوي على الأقلالعقد. لأن هذا يعنيلديه على الأقلعند العقد، وصلنا إلى تناقض، وبالتاليمع ملاحظة أن، نحصل.
- النتيجة الثانية: أعلى رتبة
- إذا تحققت الثابتتان 1 و3 معًا، فإن أعلى رتبة هي.
- دليل :
- انطلاقاً من الثابت 3، لديناوباستبدال هذا في اللمة 1، نحسب كما يلي:
التحولات
تُعيد التحويلات التالية الثوابت المذكورة أعلاه بعد تنفيذ عملية قائمة الانتظار ذات الأولوية. هناك ثلاث كميات رئيسية نرغب في تقليلها: عدد الجذور النشطة، والخسارة الكلية في الكومة، ودرجة الجذر. يمكن تنفيذ جميع التحويلات فيالوقت، وهو أمر ممكن من خلال الحفاظ على هياكل بيانات مساعدة لتتبع العقد المرشحة (الموصوفة في قسم التنفيذ). [ 6 ]
تقليل الجذور النشط
يتركوأن تكون جذورًا نشطة ذات رتبة متساويةوافترض. وصلةباعتباره الطفل الأيسر منورفع رتبة1. إذا كان الطفل الأيمنلسلبي، رابطإلى الجذر.
نتيجة ل،لم يعد الجذر نشطًا، لذا ينخفض عدد الجذور النشطة بمقدار 1. ومع ذلك، قد تزداد درجة عقدة الجذر بمقدار 1.
منذيصبحالطفل الأيمن من، ولديه رتبة، يتم الحفاظ على الثابت 1.
- الفرضية 2: توافر تقليل الجذر النشط
- إذا تم انتهاك الثابت 2، ولكن الثابتين 1 و3 صحيحان، فإن اختزال الجذر النشط ممكن.
- دليل :
- بسبب كسر الثابت 2، يوجد أكثر منتوجد جذور نشطة. من النتيجة 2، فإن أعلى رتبة للعقدة هي. وفقًا لمبدأ خانة الحمام ، يوجد زوج من الجذور النشطة من نفس الرتبة.
الحد من الخسائر
تقليل الخسائر في عقدة واحدة
يتركأن يكون مستخدمًا نشطًا غير مُجذّر مع فقدان لا يقل عن 2. رابطإلى الجذر، مما يحوله إلى جذر نشط، ويعيد ضبط خسارته إلى 0. دع الأصل الأصلي لـيكون.يجب أن يكون نشطًا، وإلاكانت ستكون في السابق جذرًا نشطًا، وبالتالي لا يمكن أن يكون لها خسارة إيجابية. رتبةيتم إنقاصها بمقدار 1. إذاإذا لم يكن جذرًا نشطًا، فقم بزيادة خسارته بمقدار 1.
بشكل عام، ينخفض إجمالي الخسارة بمقدار 1 أو 2. وكأثر جانبي، تزداد درجة الجذر وعدد الجذور النشطة بمقدار 1، مما يجعلها أقل تفضيلاً من تقليل الخسارة بعقدتين، ولكنها لا تزال عملية ضرورية.
تقليل الخسارة بعقدتين
يترك و أن تكون عقدًا نشطة ذات رتبة متساوية والخسارة تساوي 1، ولتكنكن والدًا لـدون الإخلال بعمومية المسألة ، افترض أنافصلمن، والرابطلزيادة رتبةبمقدار 1 وإعادة ضبط خسارةومن 1 إلى 0.
يجب أن يكون نشطًا، لأنكان لديه خسارة إيجابية، وبالتالي لم يكن من الممكن أن يكون جذرًا نشطًا. ومن ثم، فإن رتبةيتم إنقاصها بمقدار 1. إذاإذا لم يكن جذرًا نشطًا، فقم بزيادة خسارته بمقدار 1.
بشكل عام، ينخفض إجمالي الخسارة بمقدار 1 أو 2، دون أي آثار جانبية.
- اللمة 3: توافر تقليل الخسائر
- إذا تم انتهاك الثابت 3 بواسطة 1، ولكن الثابت 2 صحيح، فإن تقليل الخسارة ممكن.
- البرهان : نطبق مبدأ خانة الحمام مرة أخرى. إذا تم انتهاك الثابت 3 بواسطة 1، فإن الخسارة الكلية هييمكن إعادة صياغة اللمة 1 لتعمل أيضًا معوبالتالي، فإن النتيجة الثانية صحيحة. بما أن الرتبة القصوى هيإما أن يكون هناك زوج من العقد النشطة ذات رتبة متساوية وخسارة 1، أو عقدة نشطة ذات. كلا الحالتين توفران فرصة للحد من الخسائر.
اختزال درجة الجذر

يترك،، ولِتُكن العناصر الثلاثة الأخيرة من العنصر الجذر قابلة للربط السلبي. افصلها جميعًا عن العنصر الجذر ورتبها بحيث . يتغيروأن تكون نشطًا. رابطل، وصلةل، والرابطباعتباره الابن الأيسر للجذر. ونتيجة لذلك،يصبح جذرًا نشطًا برتبة 1 وخسارة 0. رتبة وخسارةتم ضبطه على 0.
التغيير الصافي لهذا التحويل هو أن درجة العقدة الجذرية تنخفض بمقدار 2. وكأثر جانبي، يزداد عدد الجذور النشطة بمقدار 1.
- اللمة 4: إمكانية اختزال درجة الجذر
- إذا تم انتهاك الثابت 4، ولكن الثابت 2 صحيح، فإن تقليل درجة الجذر ممكن.
- دليل :
- إذا تم كسر الثابت 4، فإن درجة الجذر تكون على الأقلتنقسم فروع الجذر إلى ثلاث فئات: الجذور النشطة، والعقد غير القابلة للربط، والعقد غير القابلة للربط. كل عقدة غير قابلة للربط تحتوي على جذر نشط، لأن شجرتها الفرعية تضم عقدة نشطة واحدة على الأقل. ولأن عدد الجذور النشطة لا يتجاوزلذلك، يجب أن تكون العناصر الثلاثة الأخيرة من الجذر قابلة للربط السلبي.
ملخص
يلخص الجدول التالي تأثير كل تحويل على الكميات الثلاث المهمة. قد يُخلّ كل تحويل على حدة بالثوابت، لكننا مهتمون فقط ببعض تركيبات التحويلات التي لا تزيد أيًا من هذه الكميات.
| الجذور النشطة | خسارة كاملة | الدرجة الجذرية | |
|---|---|---|---|
| تقليل الجذور النشط | |||
| اختزال درجة الجذر | |||
| تقليل الخسائر في عقدة واحدة | |||
| تقليل الخسارة بعقدتين |
عند تحديد التحويلات التي يجب إجراؤها، نأخذ في الاعتبار أسوأ تأثير محتمل لهذه العمليات فقط، تبسيطًا للأمر. كما نعتبر نوعي تقليل الخسائر عملية واحدة. وبناءً على ذلك، نُعرّف "إجراء تقليل الخسائر" بأنه محاولة كل نوع من أنواع تقليل الخسائر على حدة.
| الجذور النشطة | خسارة كاملة | الدرجة الجذرية | |
|---|---|---|---|
| تقليل الجذور النشط | |||
| اختزال درجة الجذر | |||
| الحد من الخسائر |
تطبيق
عقد الربط
لضمان وجود العقد النشطة على يسار العقد الخاملة، والحفاظ على الثابت الأول، يجب أن تضع عملية الربط العقد النشطة على اليسار والعقد الخاملة على اليمين. من الضروري وجود العقد النشطة والخاملة في نفس القائمة، لأن عملية الدمج تُحوّل جميع العقد في الكومة الأصغر إلى عقد خاملة. إذا وُجدت في قائمتين منفصلتين، فسيتعين دمج القائمتين، وهو أمر لا يمكن إنجازه في وقت ثابت لجميع العقد.
بالنسبة للعقدة الجذرية، نشترط أيضًا أن تقع العقد الفرعية القابلة للربط السلبي على يمين العقد الفرعية غير القابلة للربط السلبي. ولأننا نرغب في ربط العقد بالعقدة الجذرية في وقت ثابت، يجب الاحتفاظ بمؤشر إلى أول عقدة فرعية قابلة للربط السلبي للعقدة الجذرية.
إيجاد العقد المرشحة
تعتمد التحويلات الثابتة المُستعادة على القدرة على إيجاد العقد المرشحة فيالوقت. هذا يعني أنه يجب علينا تتبع الجذور النشطة ذات الرتبة نفسها، والعقد ذات الخسارة 1 من الرتبة نفسها، والعقد ذات الخسارة 2 على الأقل.
وصفت الورقة الأصلية التي كتبها برودال وآخرون قائمة ثابتة وقائمة ترتيب كطريقة لتتبع العقد المرشحة. [ 6 ]
قائمة الإصلاحات

تنقسم قائمة الإصلاحات إلى أربعة أجزاء:
- الجذور النشطة جاهزة لتقليص الجذور النشطة - الجذور النشطة التي لها شريك من نفس الرتبة. يتم الاحتفاظ بالعقد ذات الرتبة نفسها متجاورة.
- الجذور النشطة غير جاهزة بعد للاختزال النشط - الجذور النشطة الوحيدة لتلك الرتبة.
- العقد النشطة ذات الخسارة 1 والتي لم تصبح جاهزة بعد لتقليل الخسارة - العقد النشطة الوحيدة ذات الخسارة 1 لهذا الترتيب.
- العقد النشطة الجاهزة لتقليل الخسائر – يشمل ذلك العقد النشطة ذات الخسارة 1 والتي لها شريك من نفس الرتبة، والعقد النشطة ذات الخسارة 2 على الأقل، والتي لا تحتاج إلى تقليل خسائر الشركاء. تُحفظ العقد ذات الرتبة نفسها متجاورة.
للتحقق من إمكانية تقليل الجذر النشط، نتحقق ببساطة مما إذا كان الجزء 1 غير فارغ. إذا كان غير فارغ، يمكن حذف أول عقدتين وتحويلهما. وبالمثل، للتحقق من إمكانية تقليل الخسارة، نتحقق من نهاية الجزء 4. إذا احتوى على عقدة بخسارة لا تقل عن 2، يتم تقليل خسارة عقدة واحدة. وإلا، إذا كانت آخر عقدتين لهما خسارة 1، ولهما نفس الرتبة، يتم تقليل خسارة عقدتين.
قائمة التصنيف
قائمة الرتب هي قائمة مرتبطة بشكل مزدوج تحتوي على معلومات حول كل رتبة، للسماح بربط العقد من نفس الرتبة معًا في قائمة الثبات.
لكل عقدة تمثل رتبةفي قائمة الترتيب، نحافظ على ما يلي:
- مؤشر إلى أول جذر نشط في قائمة الإصلاحات ذات الرتبةإذا لم تكن هذه العقدة موجودة، فإن هذا يكون فارغًا (NULL).
- مؤشر إلى أول عقدة نشطة في قائمة الإصلاح ذات الرتبةوالخسارة 1. إذا لم تكن هذه العقدة موجودة، فهذا يعني أنها فارغة (NULL).
- مؤشر إلى العقدة التي تمثل الرتبةو، لتسهيل زيادة الرتب ونقصانها.
تتطلب قائمة الإصلاح وقائمة الترتيب عمليات حفظ سجلات مكثفة، والتي يجب القيام بها كلما ظهرت عقدة نشطة جديدة، أو عند تغيير رتبة العقدة أو فقدانها.
العلم المشترك

تُحوّل عملية الدمج جميع العُقد النشطة في الكومة الأصغر إلى عُقد غير نشطة. ويمكن القيام بذلك فييتم ذلك عن طريق إضافة مستوى من التوجيه غير المباشر. [ 6 ] فبدلاً من استخدام علامة منطقية، تحتوي كل عقدة نشطة على مؤشر يشير إلى كائن علامة نشطة يحتوي على قيمة منطقية. بالنسبة للعقد غير النشطة، لا يهم أي كائن علامة نشطة تشير إليه، طالما أن كائن العلامة مضبوط على حالة سلبية، لأنه ليس من الضروري تحويل العديد من العقد غير النشطة إلى عقد نشطة في وقت واحد.

تخزين المفاتيح
تتطلب عملية تقليل المفتاح مرجعًا إلى العقدة التي نرغب في تقليل مفتاحها. ومع ذلك، فإن عملية تقليل المفتاح نفسها قد تبدل أحيانًا مفتاح العقدة مع مفتاح الجذر.
لنفترض أن عملية الإدراج تُرجع مرجعًا مبهمًا يمكننا استدعاء دالة `reduce-key` عليه، كجزء من واجهة برمجة التطبيقات العامة. إذا كانت هذه المراجع عبارة عن عُقد كومة داخلية، فإن تبديل المفاتيح يُغير هذه المراجع، مما يؤدي إلى أن تصبح مراجع أخرى غير مُعرّفة. لضمان بقاء المفتاح دائمًا مع نفس المرجع، من الضروري "تغليف" المفتاح. تحتوي كل عقدة كومة الآن على مؤشر إلى صندوق يحتوي على المفتاح، ويحتوي الصندوق أيضًا على مؤشر إلى عقدة الكومة. عند إدراج عنصر، نقوم بإنشاء صندوق لتخزين المفتاح فيه، ونربط عقدة الكومة بالصندوق في كلا الاتجاهين، ونُعيد كائن الصندوق. [ 6 ] لتبديل المفاتيح بين عقدتين، نعيد ربط المؤشرات بين الصناديق والعقد.
العمليات
دمج
يتركوكوّن أكوام فيبوناتشي صارمة. إذا كان أي منهما فارغًا، فأرجع الآخر. وإلا، دعهولنفترض أن أحجامها المقابلة. وبدون فقدان للعمومية، افترض أنبما أن أحجام قائمة التثبيت وقائمة الترتيب لكل كومة تتناسب لوغاريتميًا مع حجم الكومة، فإنه لا يمكن دمج هذه البنى المساعدة في وقت ثابت. بدلاً من ذلك، نتخلص من بنية الكومة الأصغر.عن طريق حذف قائمة الإصلاح وقائمة الترتيب، وتحويل جميع عُقدها إلى عُقد سلبية. [ 6 ] يمكن القيام بذلك في وقت ثابت، باستخدام علامة مشتركة، كما هو موضح أعلاه. رابطو، مما يجعل الجذر ذو المفتاح الأصغر هو الأصل للآخر.وكن طوابير منوعلى التوالي. يتم تعيين قائمة انتظار الكومة الناتجة إلى، أينهو الجذر ذو المفتاح الأكبر.
الانتهاك البنيوي الوحيد المحتمل هو درجة الجذر. ويتم حل هذه المشكلة بإجراء عملية اختزال جذر نشطة واحدة، وعملية اختزال درجة جذر واحدة، إذا كان كل تحويل ممكنًا.
| الجذور النشطة | خسارة كاملة | الدرجة الجذرية | |
|---|---|---|---|
| الولاية بعد الدمج | |||
| تقليل الجذور النشط | |||
| اختزال درجة الجذر | |||
| المجموع |
إثبات صحة النتائج
تتحقق الثوابت 1 و2 و3 تلقائيًا، نظرًا لتجاهل بنية الكومة. وكما حُسب أعلاه، تُحل أي انتهاكات للثابت 4 عن طريق تحويل اختزال درجة الجذر.
للتحقق من الثابت 5، نأخذ في الاعتبار المواضع النهائية للعقد فيلكل عقدة درجة محدودة بـأو.
للكومة الأصغرالمناصب فيلم تتغير. ومع ذلك، فإن جميع العقد فيأصبحت الآن سلبية، مما يعني أن قيدها قد يتغير منالقضية إلىفي هذه الحالة. ولكن مع ملاحظة ذلكالحجم الناتجهو ضعف على الأقلوهذا يؤدي إلى زيادة لا تقل عن 1 في كل قيد، مما يزيل القلق السابق.
الجذر ذو المفتاح الأكبر بينويصبح غير جذري، ويتم وضعه بينوفي هذا المنصبوبحسب الثابت 4، فإن درجته كانت محدودة إماأو، وذلك بحسب الكومة التي أتت منها. من السهل ملاحظة أن هذا أقل منعلى أي حال.
بالنسبة للكومة الأكبر، تزداد المواضع بمقدارلكن بما أن الحجم الناتج هو، القيمةبل إنها تزيد، مما يضعف القيد.
أدخل
يمكن اعتبار عملية الإضافة حالة خاصة من عملية الدمج. لإضافة مفتاح واحد، يتم إنشاء كومة جديدة تحتوي على عقدة سلبية واحدة وقائمة انتظار فارغة، ثم يتم دمجها مع الكومة الرئيسية.
البحث عن الحد الأدنى
بسبب خاصية الكومة الدنيا، فإن العقدة ذات المفتاح الأدنى تكون دائمًا في الجذر، إن وجدت.
حذف الحد الأدنى

إذا كانت العقدة الجذرية هي العقدة الوحيدة في الكومة، فإننا ننتهي ببساطة عن طريق إزالتها. وإلا، نبحث في أبناء العقدة الجذرية للعثور على العقدة.باستخدام مفتاح أدنى، وتعيين الجذر الجديد إلى. لوإذا كان نشطًا، فاجعله سلبيًا، مما يؤدي إلى حدوث خطأ في جميع الأبناء النشطين لـلتصبح جذورًا نشطة ضمنيًا. اربط أبناء الجذر القديم بـ. منذالآن هو الجذر، انقل جميع العناصر الفرعية المرتبطة به بشكل سلبي إلى اليمين، ثم قم بإزالتهمن.
تتضاعف درجة الجذر تقريبًا، لأننا ربطنا جميع أبناء الجذر القديم بـنقوم بإجراء التحولات الترميمية التالية:
- كرر مرتين: قم بالتدويرعن طريق تحريك الرأسلإلى الخلف، وقم بربط الطفلين السلبيين الموجودين في أقصى اليمين منإلى الجذر.
- إذا كان من الممكن تقليل الخسائر، فقم بذلك.
- قم بإجراء عمليات تقليل الجذور النشطة وتقليل درجة الجذر حتى يصبح أي منهما غير ممكن.
لمعرفة كيف أن الخطوة 3 محدودة، انظر إلى الحالة بعد الخطوة 3:
| الجذور النشطة | خسارة كاملة | الدرجة الجذرية | |
|---|---|---|---|
| الحالة بعد حذف الحد الأدنى | |||
| تدوير قائمة الانتظار | |||
| الحد من الخسائر | |||
| المجموع |
لاحظ أن 3 عمليات تقليل للجذور النشطة وعمليات تقليل الجذور 2 تقلل من درجة الجذر والجذور النشطة بمقدار 1:
| الجذور النشطة | خسارة كاملة | الدرجة الجذرية | |
|---|---|---|---|
| تقليل الجذور النشط | |||
| اختزال درجة الجذر | |||
| المجموع |
منذ، الخطوة 3 لا تنفذ أبدًا أكثر منمرات.
إثبات صحة النتائج
يتحقق الثابت 1 بشكل بديهي، حيث لا يتم إنشاء أي جذور فعالة.
حجم الكومةينقص بمقدار واحد، مما يؤدي إلىيتناقص بمقدار واحد على الأكثر. وبالتالي، فإن الثابت 3 لا يُنتهك إلا بمقدار واحد على الأكثر. وبحسب اللمة 3، فإن تقليل الخسارة ممكن، وقد تم ذلك في الخطوة 2.
أصبحت الثابتتان 1 و3 محققتين الآن. إذا استمر انتهاك الثابتتين 2 و4 بعد الخطوة 3، فسيكون من الممكن تطبيق اختزال الجذر الفعال واختزال درجة الجذر، وفقًا لللمتين 2 و4. ومع ذلك، فقد تم تطبيق اختزال الجذر الفعال واختزال درجة الجذر بشكل كامل. لذلك، تظل الثابتتان 2 و4 محققتين أيضًا.
لإثبات أن الشرط 5 مُحقق، نلاحظ أولاً أن حجم الكومةانخفضت بمقدار 1. لأن أول عقدتين فييتم إزالة العناصر في الخطوة 1، ومواقع العناصر الأخرى فيتنخفض بمقدار 2. لذلك، قيود الدرجةوتبقى هذه العقد ثابتة. العقدتان اللتان تم إزالتهما سابقًا كانتا في الموضعين 1 و2 فيوالآن يشغلون مناصبوعلى التوالي. والنتيجة هي أن قيود الدرجة الخاصة بهم قد تم تعزيزها بمقدار 2، ومع ذلك، قمنا بحذف اثنين من الأبناء السلبيين لكل من هذه العقد، وهو ما يكفي لتلبية القيد مرة أخرى.
مفتاح التناقص

يترككن العقدة التي تم تقليل مفتاحها. إذاإذا كان هذا هو الجذر، فقد انتهينا. وإلا، فافصل الشجرة الفرعية التي جذرها عند، واربطه بالجذر. إذا كان مفتاحإذا كان المفتاح أصغر من مفتاح الجذر، فقم بتبديل مفاتيحهم.
قد يكون قد حدث ما يصل إلى ثلاثة انتهاكات هيكلية. ما لمإذا كان بالفعل ابنًا للجذر، فإن درجة الجذر تزداد بمقدار 1. عندماانفصل عن أصله الأصليلدينا الحالات التالية:
- لوإذا كان الفعل سلبياً، فلا توجد انتهاكات إضافية.
- لوكان سابقًا جذرًا نشطًا معسلبي، ثم متحركمن كونه طفلاًلا يؤدي إنشاء فرع من الجذر إلى إنشاء أي جذور نشطة إضافية، كما أنه لا يزيد من فقدان أي عقدة.
- إذا كان كلاهماوإذا كانت نشطة، فإن فقدانيزداد بمقدار 1، ويتم إنشاء جذر نشط إضافي (عن طريق الربط)(إلى الجذر).
في أسوأ الأحوال، تزداد جميع الكميات الثلاث (درجة الجذر، إجمالي الخسارة، الجذور النشطة) بمقدار 1.
بعد إجراء عملية تقليل الخسارة مرة واحدة، تظل أسوأ نتيجة هي زيادة درجة الجذر وعدد الجذور النشطة بمقدار 2. ولإصلاح هذه المخالفات، نستخدم حقيقة أن 3 عمليات تقليل للجذور النشطة وعمليتي تقليل للجذور تقللان كلتا الكميتين بمقدار 1. وبالتالي، فإن تطبيق هذه التحويلات 6 و4 مرات على التوالي يكفي للقضاء على جميع المخالفات.
| الجذور النشطة | خسارة كاملة | الدرجة الجذرية | |
|---|---|---|---|
| الحالة بعد مفتاح التناقص | |||
| الحد من الخسائر | |||
| تقليل الجذور النشط | |||
| اختزال درجة الجذر | |||
| المجموع |
إثبات صحة النتائج
العقد التي كانت سابقًا الأشقاء اليساريين لـالتحرك لسد الفجوة التي خلفهامما يؤدي إلى تقليل مؤشرها. وبما أن قيدها قد ضعف، فإن الثابت 1 لا يتأثر. ويتحقق الثابت 5 بشكل بديهي كما يلي:لم يتغير.
تضمن اللمات 2 و3 و4 إمكانية تقليل الجذر النشط، وتقليل الخسارة، وتقليل درجة الجذر. لذلك، فإن الثوابت 2 و3 و4 صحيحة.
أداء
على الرغم من كونها مثالية نظريًا، إلا أن أكوام فيبوناتشي الصارمة غير مفيدة في التطبيقات العملية. فهي معقدة للغاية في التنفيذ، وتتطلب إدارة أكثر من 10 مؤشرات لكل عقدة. [ 6 ] [ 7 ] بينما تُنفذ معظم العمليات فيمع مرور الوقت، قد تكون العوامل الثابتة عالية جدًا، مما يجعلها أبطأ بما يصل إلى 20 مرة من نظيراتها الأكثر شيوعًا مثل أكوام البيانات الثنائية أو أكوام الاقتران . [ 8 ] على الرغم من بساطتها النسبية، تُظهر التجارب أن كومة فيبوناتشي الصارمة تعمل عمليًا بشكل أبطأ من طابور برودال. [ 9 ]
ملخص أوقات التشغيل
فيما يلي تعقيدات زمنية [ 10 ] لهياكل بيانات الكومة المختلفة. يشير الاختصار am. إلى أن التعقيد المذكور هو التعقيد المُستهلك، وإلا فهو تعقيد أسوأ حالة. لمعرفة معنى " O ( f )" و" Θ ( f )"، راجع ترميز Big O. تفترض أسماء العمليات وجود كومة دنيا.
| عملية | البحث عن الحد الأدنى | حذف الحد الأدنى | مفتاح التناقص | أدخل | اندماج | make-heap [ a ] |
|---|---|---|---|---|---|---|
| ثنائي [ 10 ] | Θ (1) | Θ (log n ) | Θ (log n ) | Θ (log n ) | Θ ( n ) | Θ ( n ) |
| الانحراف [ 11 ] | Θ (1) | O (log n ) am. | O (log n ) am. | O (log n ) am. | O (log n ) am. | Θ ( n ) am. |
| يساري [ 12 ] | Θ (1) | Θ (log n ) | Θ (log n ) | Θ (log n ) | Θ (log n ) | Θ ( n ) |
| ذات الحدين [ 10 ] [ 14 ] | Θ (1) | Θ (log n ) | Θ (log n ) | Θ (1) صباحًا. | Θ (log n ) [ b ] | Θ ( n ) |
| التوزيع الثنائي المائل [ 15 ] | Θ (1) | Θ (log n ) | Θ (log n ) | Θ (1) | Θ (log n ) [ b ] | Θ ( n ) |
| 2-3 كومة [ 17 ] | Θ (1) | O (log n ) am. | Θ (1) | Θ (1) صباحًا. | O (log n ) [ b ] | Θ ( n ) |
| الانحراف من الأسفل إلى الأعلى [ 11 ] | Θ (1) | O (log n ) am. | O (log n ) am. | Θ (1) صباحًا. | Θ (1) صباحًا. | Θ ( n ) am. |
| الاقتران [ 18 ] | Θ (1) | O (log n ) am. | o (log n ) am. [ c ] | Θ (1) | Θ (1) | Θ ( n ) |
| الاقتران بالرتب [ 21 ] | Θ (1) | O (log n ) am. | Θ (1) صباحًا. | Θ (1) | Θ (1) | Θ ( n ) |
| فيبوناتشي [ 10 ] [ 22 ] | Θ (1) | O (log n ) am. | Θ (1) صباحًا. | Θ (1) | Θ (1) | Θ ( n ) |
| فيبوناتشي الصارم [ 23 ] [ د ] | Θ (1) | Θ (log n ) | Θ (1) | Θ (1) | Θ (1) | Θ ( n ) |
| برودال [ 24 ] [ د ] | Θ (1) | Θ (log n ) | Θ (1) | Θ (1) | Θ (1) | Θ ( n ) [ 25 ] |
- ↑ عملية بناء الكومة هي عملية إنشاء كومة من سلسلة من n عنصرًا غير مُرتبة. يمكن إنجازها فيزمن Θ ( n ) بينما تعمل خوارزمية دمج العناصر في زمن O (log n ) (حيث يمكن توزيع كلا التعقيدين). [ 11 ] [ 12 ] وتحقق خوارزمية أخرى زمن Θ ( n ) للكومات الثنائية. [ 13 ]
- بالنسبة للأكوام المستمرة (التي لا تدعم تقليل المفتاح )، يُقلل تحويل عام تكلفة دمج العناصر إلى تكلفة إدراجها ، بينما تكون التكلفة الجديدة لحذف الحد الأدنى هي مجموع التكاليف القديمة لحذف الحد الأدنى ودمج العناصر . [ 16 ] هنا، يجعل هذا التحويل دمج العناصر يعمل في زمن Θ (1) (مُستهلك، إذا كانت تكلفة الإدراج كذلك)، بينما لا يزال حذف الحد الأدنى يعمل في زمن O (log n ). عند تطبيقه على أكوام ذات توزيع ثنائي منحرف، ينتج عنه طوابير برودال-أوكاساكي، وهي أكوام مستمرة ذات تعقيدات مثلى في أسوأ الحالات. [ 15 ]
- ↑ الحد الأدنى لـ[ 19 ] الحد الأعلى لـ[ 20 ]
- تُحقق طوابير برودال وأكوام فيبوناتشي الصارمة أفضل تعقيد في أسوأ الحالات للأكوام. وقد وُصفت في البداية بأنها هياكل بيانات إجرائية. أما طابور برودال-أوكاساكي فهو هيكل بيانات مستمر يحقق نفس المستوى الأمثل، باستثناء أنهلا يدعم خاصية تقليل المفتاح .
مراجع
- ^ برودال، جيرث ستولتينج. لاجوجانيس، جورج. تارجان، روبرت إي. (2025). "أكوام فيبوناتشي الصارمة" . المعاملات ACM على الخوارزميات . 21 (2): 1– 18. دوى : 10.1145/3707692 .
- ↑ برودال، جيرث ستولتينغ؛ أوكاساكي، كريس (نوفمبر 1996). "قوائم الانتظار ذات الأولوية الوظيفية البحتة المثلى" . مجلة البرمجة الوظيفية . 6 (6): 839-857 . doi : 10.1017/S095679680000201X . ISSN 0956-7968 .
- ↑ كنوت، دونالد إي. (24 أبريل 1998). فن برمجة الحاسوب: الفرز والبحث، المجلد 3. أديسون-ويسلي بروفيشنال. ISBN 978-0-321-63578-5.
- ↑ برودال، جيرث ستولتينغ (28 يناير 1996). "طوابير الأولوية الفعالة في أسوأ الحالات" . وقائع الندوة السنوية السابعة لجمعية ACM-SIAM حول الخوارزميات المنفصلة . SODA '96. الولايات المتحدة الأمريكية: جمعية الرياضيات الصناعية والتطبيقية: 52-58 . ISBN 978-0-89871-366-4.
- ↑ فريدمان، مايكل ل.؛ تارجان، روبرت إندري (1987-07-01). "أكوام فيبوناتشي واستخداماتها في خوارزميات تحسين الشبكات المحسّنة" . مجلة ACM . 34 (3): 596-615 . doi : 10.1145/28869.28874 . ISSN 0004-5411 .
- 1 2 3 4 5 6 7 برودال، جيرث ستولتينغ؛ لاغوجيانيس، جورج؛ تارجان، روبرت إي. (19 مايو 2012). "أكوام فيبوناتشي الصارمة" . وقائع الندوة السنوية الرابعة والأربعين لجمعية آلات الحوسبة حول نظرية الحوسبة . STOC '12. نيويورك، نيويورك، الولايات المتحدة الأمريكية: جمعية آلات الحوسبة. الصفحات 1177-1184 . doi : 10.1145/2213977.2214082 . ISBN 978-1-4503-1245-5.
- ↑ ماجيريش، فلادان (25-11-2019)، أكوام فيبوناتشي السريعة مع امتدادات أسوأ الحالات ، arXiv : 1911.11637
- ↑ لاركين، دانيال؛ سين، سيدهارتا؛ تارجان، روبرت (2014). "دراسة تجريبية أساسية لقوائم الانتظار ذات الأولوية". وقائع ورشة العمل السادسة عشرة حول هندسة الخوارزميات والتجارب : 61-72 . arXiv : 1403.0252 . Bibcode : 2014arXiv1403.0252L . doi : 10.1137/1.9781611973198.7 . ISBN 978-1-61197-319-8. S2CID 15216766 .
- ↑ مرينا، ميخال؛ سيدلاسيك، بيتر؛ كفاساي، ميروسلاف (يونيو 2019). "التطبيق العملي للتطبيقات المتقدمة لقوائم الانتظار ذات الأولوية في إيجاد أقصر المسارات". المؤتمر الدولي لتقنيات المعلومات والتقنيات الرقمية 2019 (IDT) . جيلينا، سلوفاكيا: IEEE. ص 335-344 . doi : 10.1109/DT.2019.8813457 . ISBN 9781728114019. S2CID 201812705 .
- 1 2 3 4 كورمين، توماس هـ . ليسرسون، تشارلز إي . ريفست، رونالد ل. (1990). مقدمة في الخوارزميات ( الطبعة الأولى). مطبعة معهد ماساتشوستس للتكنولوجيا وماكجرو هيل. رقم ISBN 0-262-03141-8.
- 1 2 3 سليتور، دانيال دومينيك ؛ تارجان، روبرت إندري (فبراير 1986). "الأكوام ذاتية التعديل" . مجلة SIAM للحوسبة . 15 (1): 52-69 . CiteSeerX 10.1.1.93.6678 . doi : 10.1137/0215004 . ISSN 0097-5397 .
- 1 2 تارجان، روبرت (1983). "3.3. أكوام اليسار". هياكل البيانات وخوارزميات الشبكات . ص 38-42 . doi : 10.1137/1.9781611970265 . ISBN 978-0-89871-187-5.
- ↑ هايوارد، رايان؛ ماكديارميد، كولين (1991). "تحليل الحالة المتوسطة لبناء الكومة عن طريق الإدخال المتكرر" (ملف PDF) . مجلة الخوارزميات . 12 : 126-153 . CiteSeerX 10.1.1.353.7888 . doi : 10.1016/0196-6774(91)90027-v . مؤرشف من الأصل (ملف PDF) بتاريخ 2016-02-05 . تم الاطلاع عليه بتاريخ 2016-01-28 .
- ↑ "الكومة ذات الحدين | موسوعة الرياضيات والعلوم الرائعة" . brilliant.org . تم الاطلاع عليه بتاريخ 30-09-2019 .
- 1 2 برودال، جيرث ستولتينغ؛ أوكاساكي، كريس (نوفمبر 1996)، "طوابير الأولوية الوظيفية البحتة المثلى"، مجلة البرمجة الوظيفية ، 6 (6): 839-857 ، doi : 10.1017/s095679680000201x
- ↑ أوكاساكي، كريس (1998). "10.2. التجريد الهيكلي". هياكل البيانات الوظيفية البحتة ( الطبعة الأولى). الصفحات 158-162 . ISBN 9780521631242.
- ↑ تاكاوكا، تاداو (1999)، نظرية الأكوام 2-3 (ملف PDF) ، ص 12
- ↑ إياكونو، جون (2000)، "تحسين الحدود العليا لأكوام الاقتران"، وقائع ورشة العمل الإسكندنافية السابعة حول نظرية الخوارزميات (ملف PDF) ، سلسلة محاضرات في علوم الحاسوب، المجلد 1851، دار نشر سبرينغر، الصفحات 63-77 ، arXiv : 1110.4428 ، CiteSeerX 10.1.1.748.7812 ، doi : 10.1007/3-540-44985-X_5 ، ISBN 3-540-67690-2
- ↑ فريدمان، مايكل لورانس (يوليو 1999). "حول كفاءة أكوام الاقتران وهياكل البيانات ذات الصلة" (ملف PDF) . مجلة رابطة آلات الحوسبة . 46 (4): 473-501 . doi : 10.1145/320211.320214 .
- ↑ بيتي، سيث (2005). نحو تحليل نهائي لأكوام الاقتران (ملف PDF) . وقائع ندوة FOCS '05 السنوية السادسة والأربعين لمؤسسة IEEE حول أسس علوم الحاسوب. الصفحات 174-183 . CiteSeerX 10.1.1.549.471 . doi : 10.1109/SFCS.2005.75 . ISBN 0-7695-2468-0.
- ^ هيوبلر، بيرنهارد. سين، سيدهارتا؛ تارجان ، روبرت إي. (نوفمبر 2011). "أكوام الاقتران بالرتبة" (PDF) . سيام ج. الحوسبة . 40 (6): 1463–1485 . دوى : 10.1137/100785351 .
- ↑ فريدمان، مايكل لورانس ؛ تارجان، روبرت إي. (يوليو 1987). "أكوام فيبوناتشي واستخداماتها في خوارزميات تحسين الشبكات المحسّنة" (ملف PDF) . مجلة رابطة آلات الحوسبة . 34 (3): 596-615 . CiteSeerX 10.1.1.309.8927 . doi : 10.1145/28869.28874 .
- ↑ برودال، جيرث ستولتينغ ؛ لاغوجيانيس، جورج؛ تارجان، روبرت إي. (2012). أكوام فيبوناتشي الصارمة (ملف PDF) . وقائع الندوة الرابعة والأربعين حول نظرية الحوسبة - STOC '12. الصفحات 1177-1184 . CiteSeerX 10.1.1.233.1740 . doi : 10.1145/2213977.2214082 . ISBN 978-1-4503-1245-5.
- ↑ برودال، جيرث س. ( 1996)، "طوابير الأولوية الفعالة في أسوأ الحالات" (ملف PDF) ، وقائع الندوة السنوية السابعة لجمعية ACM-SIAM حول الخوارزميات المنفصلة ، الصفحات 52-58
- ↑ غودريتش، مايكل ت .؛ تاماسيا، روبرتو (2004). "7.3.6. بناء الكومة من الأسفل إلى الأعلى". هياكل البيانات والخوارزميات في جافا ( الطبعة الثالثة). ص 338-341 . ISBN 0-471-46983-1.
روابط خارجية
- أرقام فيبوناتشي
- الأكوام (هياكل البيانات)
