شجرة كبش الفداء
في علم الحاسوب ، شجرة كبش الفداء هي شجرة بحث ثنائية متوازنة ذاتيًا ، ابتكرها آرني أندرسون [ 2 ] عام 1989، ثم أعاد إيغال غالبرين ورونالد إل. ريفست ابتكارها عام 1993. [ 1 ] وهي توفر أسوأ الحالاتوقت البحث (مع(باعتبارها عدد المدخلات) ووقت الإدخال والحذف المستهلك .
بخلاف معظم أشجار البحث الثنائية ذاتية التوازن الأخرى التي توفر أيضًا أسوأ حالةفي وقت البحث، لا تتطلب أشجار كبش الفداء أي تكلفة إضافية للذاكرة لكل عقدة مقارنةً بشجرة البحث الثنائية العادية : فبالإضافة إلى المفتاح والقيمة، تخزن العقدة مؤشرين فقط إلى العقد الفرعية. هذا يجعل أشجار كبش الفداء أسهل في التنفيذ، وبفضل محاذاة بنية البيانات ، يمكن تقليل تكلفة العقدة بما يصل إلى الثلث.
بدلاً من عمليات إعادة التوازن التدريجية الصغيرة التي تستخدمها معظم خوارزميات الأشجار المتوازنة، نادراً ما تختار أشجار كبش الفداء "كبش فداء" ولكنها مكلفة، وتعيد بناء الشجرة الفرعية المتجذرة في كبش الفداء بالكامل إلى شجرة ثنائية كاملة. وبالتالي، فإن أشجار كبش الفداءأسوأ أداء للتحديث.
نظرية
يُقال إن شجرة البحث الثنائية متوازنة الأوزان إذا كان نصف العقد على يسار الجذر، والنصف الآخر على يمينه. وتُعرَّف العقدة المتوازنة الأوزان من النوع α بأنها تلك التي تستوفي معيار توازن أوزان مُخفَّف.
size(left) ≤ α*size(node) size(right) ≤ α*size(node)
حيث يمكن تعريف الحجم بشكل متكرر على النحو التالي:
دالة size(node) هي إذا كان node = nil، فأرجع 0 ، وإلا فأرجع size(node->left) + size(node->right) + 1. نهاية الشرط. نهاية الدالة .
حتى الشجرة المنحلة (القائمة المرتبطة) تفي بهذا الشرط إذا كانت α=1، في حين أن α=0.5 لن تتطابق إلا مع الأشجار الثنائية شبه الكاملة .
يجب أن تكون شجرة البحث الثنائية المتوازنة الوزن α متوازنة الارتفاع α أيضًا ، أي
ارتفاع(الشجرة) ≤ الجزء الصحيح من(لوغاريتم 1/α (حجم(الشجرة)))
وبالعكس ، فإن الشجرة التي لا تتمتع بتوازن في الارتفاع α لا تتمتع بتوازن في الوزن α.
لا يُضمن لأشجار كبش الفداء الحفاظ على توازن الوزن ألفا في جميع الأوقات، ولكنها دائمًا ما تكون متوازنة الارتفاع ألفا بشكل فضفاض من حيث ذلك
ارتفاع (شجرة كبش الفداء) ≤ الجزء السفلي (لوغاريتم 1/α (حجم (الشجرة))) + 1.
يمكن اكتشاف انتهاكات شرط توازن الارتفاع هذا في وقت الإدخال، وهذا يعني بالضرورة وجود انتهاك لشرط توازن الوزن.
هذا يجعل أشجار كبش الفداء مشابهة لأشجار الأحمر والأسود من حيث وجود قيود على ارتفاعها. إلا أنها تختلف اختلافًا كبيرًا في كيفية تحديد مواقع عمليات التدوير (أو إعادة التوازن في حالة أشجار كبش الفداء). فبينما تخزن أشجار الأحمر والأسود معلومات "لون" إضافية في كل عقدة لتحديد الموقع، تبحث أشجار كبش الفداء عن كبش فداء غير متوازن الوزن (α-weight) لإجراء عملية إعادة التوازن عليه. وهذا يشبه إلى حد ما أشجار AVL ، حيث تعتمد عمليات التدوير الفعلية على "توازن" العقد، لكن طريقة تحديد التوازن تختلف اختلافًا كبيرًا. فنظرًا لأن أشجار AVL تتحقق من قيمة التوازن عند كل عملية إدراج/حذف، فإنها تُخزن عادةً في كل عقدة؛ بينما تستطيع أشجار كبش الفداء حسابها عند الحاجة فقط، أي عند الحاجة إلى إيجاد كبش فداء.
على عكس معظم أشجار البحث ذاتية التوازن الأخرى، تتميز أشجار كبش الفداء بمرونة تامة فيما يتعلق بالتوازن. فهي تدعم أي قيمة لـ α بحيث تكون 0.5 < α < 1. تؤدي قيمة α العالية إلى عدد أقل من عمليات التوازن، مما يجعل الإضافة أسرع ولكن البحث والحذف أبطأ، والعكس صحيح بالنسبة لقيمة α المنخفضة. لذلك، في التطبيقات العملية، يمكن اختيار قيمة α بناءً على مدى تكرار تنفيذ هذه العمليات.
العمليات
ابحث عن
لم يتم تعديل عملية البحث عن شجرة البحث الثنائية القياسية، ويبلغ وقت أسوأ حالة لها 10 ...وهذا على النقيض من أشجار التفرع التي يكون أسوأ وقت لها هو. يمكن أن يؤدي انخفاض الحمل الزائد لذاكرة العقدة مقارنة بأشجار البحث الثنائية الأخرى ذاتية التوازن إلى تحسين موضع المرجع والتخزين المؤقت بشكل أكبر.
الإدخال
يتم تنفيذ عملية الإدراج بنفس الأفكار الأساسية لشجرة البحث الثنائية غير المتوازنة ، ولكن مع بعض التغييرات الهامة.
عند تحديد نقطة الإدراج، يجب أيضًا تسجيل عمق العقدة الجديدة. يتم ذلك عبر عداد بسيط يُزاد مع كل تكرار لعملية البحث، ما يحسب فعليًا عدد الحواف بين الجذر والعقدة المُدرجة. إذا خالفت هذه العقدة خاصية توازن الارتفاع α (المُعرّفة أعلاه)، يلزم إعادة التوازن.
لإعادة التوازن، تخضع شجرة فرعية كاملة، متجذرة في عقدة مُستَغَلّة، لعملية موازنة. تُعرَّف العقدة المُستَغَلّة بأنها سلف للعقدة المُدرَجة غير متوازنة الوزن (α-weight). سيكون هناك دائمًا سلف واحد على الأقل من هذا النوع. إعادة موازنة أيٍّ منها ستُعيد خاصية التوازن في الارتفاع (α-height-balance).
إحدى طرق إيجاد كبش فداء هي الصعود من العقدة الجديدة إلى الجذر واختيار أول عقدة غير متوازنة الوزن α.
يتطلب الصعود مرة أخرى إلى الجذرمساحة التخزين، التي تُخصص عادةً على المكدس، أو مؤشرات الأصل. يمكن تجنب ذلك فعليًا عن طريق توجيه كل عنصر فرعي إلى أصله أثناء النزول، وإصلاحه أثناء الصعود.
لتحديد ما إذا كانت عقدة محتملة كبش فداء مناسبًا، نحتاج إلى التحقق من خاصية توازن وزنها α. وللقيام بذلك، يمكننا الرجوع إلى التعريف:
size(left) ≤ α*size(node) size(right) ≤ α*size(node)
ومع ذلك، يمكن تحقيق تحسين كبير من خلال إدراك أننا نعرف بالفعل اثنين من الأحجام الثلاثة، مما يترك الحجم الثالث فقط ليتم حسابه.
لنأخذ المثال التالي لتوضيح ذلك. بافتراض أننا نصعد عائدين إلى الجذر:
حجم (الأصل) = حجم (العقدة) + حجم (الشقيق) + 1
لكن كما يلي:
حجم (العقدة المُدرجة) = 1.
يمكن اختزال القضية إلى ما يلي:
الحجم[س+1] = الحجم[س] + حجم(الشقيق) + 1
حيث x = هذه العقدة، x + 1 = الأصل وحجم (الشقيق) هو استدعاء الدالة الوحيد المطلوب فعليًا.
بمجرد العثور على كبش الفداء، يُعاد بناء الشجرة الفرعية المتفرعة منه بالكامل لتكون متوازنة تمامًا. [ 1 ] يمكن القيام بذلك فييتم حساب الوقت عن طريق اجتياز عقد الشجرة الفرعية للعثور على قيمها بترتيب تصاعدي واختيار الوسيط بشكل متكرر كجذر للشجرة الفرعية.
مع بدء عمليات إعادة التوازنيعتمد وقت الإدخال (على عدد عقد الشجرة الفرعية)، ويبلغ أسوأ أداء له في الحالات التالية:مع ذلك، ونظرًا لأن أسوأ السيناريوهات موزعة على فترات زمنية متباعدة، فإن عملية الإدخال تستغرق وقتًا.الوقت المستهلك.
رسم تخطيطي لإثبات تكلفة الإدراج
تتميز أشجار كبش الفداء بتوازن غير دقيق في الارتفاع، حيث يبلغ ارتفاعها على الأكثر، وهوبشرط أن تكون قيمة α بين 0.5 و 1. تكون تكلفة إيجاد نقطة الإدخال ووضع العقدة محدودة بالارتفاع، وهوبعد عملية الإضافة، قد تتم إعادة التوازن، وقد تصل التكلفة إلىسنوضح الآن أن تكلفة إعادة التوازن يتم استهلاكهالكل عملية إدخال.
يُعرَّف عدم توازن العقدة v بأنه القيمة المطلقة للفرق في الحجم بين عقدتها اليسرى وعقدتها اليمنى ناقص 1، أو 0، أيهما أكبر. بعبارة أخرى:
بالإضافة إلى ذلك، نُعرّف عدم توازن الشجرة الفرعية بأنه مجموع عدم توازن العقد في الشجرة الفرعية.
اللمة 1: مباشرة قبل إعادة بناء الشجرة الفرعية المتجذرة في، (( تدوين أوميغا الكبيرة .)
دليل:
بحسب التعريف، فإن عقدة كبش الفداء ليست متوازنة الوزن ألفا، وبالتالي فإن حجم الشجرة الفرعية التابعة لها لا يقل عنويكون حجم الشجرة الفرعية الشقيقة على الأكثرعدم توازن العقدةثموثابت ثابت،وبالتالي، فإن عدم توازن الشجرة الفرعية المتجذرة فيوهو أيضًا.
اللمة 2: مباشرة بعد إعادة بناء شجرة فرعية متجذرة في،.
دليل:
الشجرة المعاد بناؤها متوازنة تمامًا، بحيث يختلف حجم الأشجار الفرعية المتجذرة في نفس المستوى بمقدار 1 على الأكثر. وفقًا للتعريف أعلاه لعدم التوازن، فإن عدم توازن جميع العقد في الشجرة الفرعية هو 0.
النظرية 3: التكلفة المستهلكة للإدراج هي.
دليل:
مثل أيإعادة البناء تقللبواسطةبحسب اللمتين 1 و2، فإن تكلفة إصلاح كل وحدة من وحدات عدم التوازن هي
.
يمكن لكل عملية إدخال أن تُحدث وحدة واحدة على الأكثر من عدم التوازن في جميع الأشجار الفرعية التي تحتوي عليها. لا يمكن أن توجد العقدة المُدخلة إلا في شجرة فرعية واحدة على الأكثر لكل مستوى من مستويات الشجرة، مما يعني أن عدد الأشجار الفرعية التي تشملها محدود بارتفاع الشجرة.حيث أن كل وحدة من عدم التوازن تكلفلإصلاح ذلك، مما ينتج عنه تكلفة مُستهلكة لإعادة التوازن لكل عملية إدخال.
.
وبإضافة تكاليف مرحلة البحث الأولية وإعادة التوازن، تصبح التكلفة المستهلكة للإدراج هي
.
ينطبق هذا الحد على جميع القيم 0.5 < α < 1.
الحذف
تتميز أشجار كبش الفداء بسهولة حذفها مقارنةً بإضافتها. ولتمكين الحذف، تحتاج هذه الأشجار إلى تخزين قيمة إضافية ضمن بنية بيانات الشجرة. هذه الخاصية، التي سنسميها MaxNodeCount، تمثل ببساطة أعلى قيمة تم الوصول إليها لعدد العقد (NodeCount). يتم تعيينها إلى NodeCount عند إعادة توازن الشجرة بالكامل، وبعد الإضافة يتم تعيينها إلى القيمة القصوى بين MaxNodeCount وNodeCount.
لإجراء عملية حذف، نقوم ببساطة بإزالة العقدة كما تفعل في شجرة بحث ثنائية بسيطة، ولكن إذا
عدد العقد ≤ α*الحد الأقصى لعدد العقد
ثم نعيد موازنة الشجرة بأكملها حول الجذر، مع تذكر ضبط MaxNodeCount على NodeCount.
وهذا يعطي عملية الحذف أسوأ أداء في أسوأ الحالات.الوقت، بينما الوقت المستهلك هو.
رسم تخطيطي لإثبات تكلفة الحذف
لنفترض أن شجرة كبش الفداء تحتوي علىتم إعادة بناء العناصر للتو (بمعنى آخر، إنها شجرة ثنائية كاملة). على الأكثريمكن إجراء عمليات الحذف قبل إعادة بناء الشجرة. تستغرق كل عملية حذف من هذه العمليات وقتًا.الوقت (مقدار الوقت اللازم للبحث عن العنصر ووضع علامة عليه كمحذوف).يؤدي الحذف إلى إعادة بناء الشجرة ويأخذ(أو فقط)) الوقت. باستخدام التحليل الإجمالي، يتضح أن التكلفة المستهلكة للحذف هي:
أصل الكلمة
يستند اسم شجرة كبش الفداء إلى الحكمة الشائعة القائلة بأنه عندما يحدث خطأ ما، فإن أول ما يميل الناس إلى فعله هو إيجاد شخص ما لإلقاء اللوم عليه (كبش الفداء). [ 3 ] في الكتاب المقدس ، كبش الفداء هو حيوان يتم تحميله طقوسياً بذنوب الآخرين، ثم يتم طرده.
انظر أيضاً
مراجع
- 1 2 3 4 5 6 7 غالبرين، إيغال؛ ريفست، رونالد ل. (1993). أشجار كبش الفداء (ملف PDF) . وقائع الندوة السنوية الرابعة لجمعية ACM-SIAM حول الخوارزميات المنفصلة . فيلادلفيا: جمعية الرياضيات الصناعية والتطبيقية . الصفحات 165-174 . CiteSeerX 10.1.1.309.9376 . ISBN 0-89871-313-7.
- ↑ أندرسون، آرني (1989). تحسين إعادة البناء الجزئي باستخدام معايير توازن بسيطة . وقائع ورشة عمل حول الخوارزميات وهياكل البيانات. مجلة الخوارزميات . سبرينغر-فيرلاغ. ص 393-402 . CiteSeerX 10.1.1.138.4859 . doi : 10.1007/3-540-51542-9_33 .
- ↑ مورين، بات . "الفصل 8 - أشجار كبش الفداء" . هياكل البيانات المفتوحة (بالشفرة الزائفة) ( طبعة 0.1 جيجابايت) . تم الاسترجاع في 16-09-2017 .
روابط خارجية
- غالبرن، إيغال (سبتمبر 1996). حول استشارة مجموعة من الخبراء والبحث (ملف PDF) (أطروحة دكتوراه). معهد ماساتشوستس للتكنولوجيا .
- مورين، بات. "الفصل 8 - أشجار كبش الفداء" . هياكل البيانات المفتوحة (بالشفرة الزائفة) ( إصدار 0.1 جيجابايت بيتا) . تم الاسترجاع في 16-09-2017 .
- الأشجار الثنائية
- شجرة البحث
- هياكل بيانات الإطفاء
