52 lines
5.0 KiB
Markdown
52 lines
5.0 KiB
Markdown
|
---
|
||
|
title: AVL Trees
|
||
|
localeTitle: أشجار AVL
|
||
|
---
|
||
|
## أشجار AVL
|
||
|
|
||
|
شجرة AVL هي نوع فرعي من شجرة البحث الثنائية.
|
||
|
|
||
|
A BST هي بنية بيانات تتكون من العقد. لديها الضمانات التالية:
|
||
|
|
||
|
1. كل شجرة لديها عقدة جذرية (في الجزء العلوي).
|
||
|
2. العقدة الجذرية لديها صفر أو أكثر من العقد التابعة.
|
||
|
3. كل عقدة طفل لديها صفر أو أكثر العقد التابعة ، وهلم جرا.
|
||
|
4. كل عقدة لديها ما يصل إلى طفلين.
|
||
|
5. لكل عقدة ، يكون أحفادها الأيسر أقل من العقدة الحالية ، وهي أقل من الأسبقية الصحيحة.
|
||
|
|
||
|
تتمتع أشجار AVL بضمان إضافي:
|
||
|
|
||
|
6. لا يمكن أن يكون الفرق بين عمق الأشجار الفرعية اليمنى واليسرى أكثر من واحد. للحفاظ على هذا الضمان ، سيشمل تنفيذ AVL خوارزمية لإعادة توازن الشجرة عند إضافة عنصر إضافي من شأنه أن يخل بهذا الضمان.
|
||
|
|
||
|
تحتوي أشجار AVL على أسوأ حالة بحث ، وإدراج وحذف وقت O (log n).
|
||
|
|
||
|
### الدوران الأيمن
|
||
|
|
||
|
![شجرة AVL التناوب الصحيح](https://raw.githubusercontent.com/HebleV/valet_parking/master/images/avl_right_rotation.jpg)
|
||
|
|
||
|
### الدوران الأيسر
|
||
|
|
||
|
![شجرة AVL تناوب اليسار](https://raw.githubusercontent.com/HebleV/valet_parking/master/images/avl_left_rotation.jpg)
|
||
|
|
||
|
### عملية الإدراج AVL
|
||
|
|
||
|
ستفعل إدخال مشابه لإدراج شجرة البحث الثنائي العادي. بعد الإدراج ، يمكنك إصلاح خاصية AVL باستخدام عمليات الاستدارة إلى اليمين أو اليسار.
|
||
|
|
||
|
* إذا كان هناك اختلال في الطفل الأيسر من الشجرة الفرعية الصحيحة ، عندئذ تقوم بتدوير يسار يمين.
|
||
|
* إذا كان هناك اختلال في الطفل الأيسر من الشجرة الفرعية اليسرى ، فأنت تقوم بتناوب اليمين.
|
||
|
* إذا كان هناك اختلال في الطفل الصحيح من الشجرة الفرعية الصحيحة ، فأنت تقوم بتدوير اليسار.
|
||
|
* إذا كان هناك اختلال في الطفل الأيمن من الشجرة الفرعية اليسرى ، فأنت تقوم بتناوب اليمين إلى اليسار.
|
||
|
|
||
|
#### معلومات اكثر:
|
||
|
|
||
|
[يوتيوب - شجرة AVL](https://www.youtube.com/watch?v=7m94k2Qhg68)
|
||
|
|
||
|
شجرة AVL هي شجرة بحث ثنائية التوازن الذاتي. شجرة AVL هي شجرة بحث ثنائية لها الخصائص التالية: -> تختلف الأشجار الفرعية لكل عقدة في الارتفاع بمقدار واحد على الأكثر. -> كل شجرة فرعية هي شجرة AVL.
|
||
|
|
||
|
تتحقق شجرة AVL من ارتفاع اليسار والأشجار الفرعية اليمنى وتؤكد أن الفرق لا يزيد عن 1. ويسمى هذا الاختلاف "عامل التوازن". يكون طول شجرة AVL دائمًا O (Logn) حيث n هو عدد العقد في الشجرة.
|
||
|
|
||
|
دورات AVL للشجرة: -
|
||
|
|
||
|
في شجرة AVL ، بعد تنفيذ كل عملية مثل الإدراج والحذف ، نحتاج إلى التحقق من عامل التوازن لكل عقدة في الشجرة. إذا استوفت كل عقدة شرط عامل التوازن ، فإننا ننتهي من العملية وإلا يجب أن نجعلها متوازنة. نحن نستخدم عمليات الدوران لجعل الشجرة متوازنة عندما تصبح الشجرة غير متوازنة بسبب أي عملية.
|
||
|
|
||
|
تستخدم عمليات الدوران لجعل الشجرة متوازنة. يوجد أربع دورات ويتم تصنيفها إلى نوعين: -> دوران يسار واحد (دوران LL) في LL Rotation ، تقوم كل عقدة بنقل موضع واحد إلى اليسار من الموضع الحالي. -> دوران لليمين (دوران RR) في تناوب RR ، تقوم كل عقدة بنقل موضع واحد إلى اليمين من الموضع الحالي. -> دوران لليمين الأيسر (دورة LR) إن LR Rotation هو عبارة عن مجموعة من الدوران الأيسر المتبقي متبوعًا بالدوران اليميني المفرد. في LR Rotation ، تقوم كل عقدة أولاً بنقل موضع واحد إلى اليسار ثم موضع واحد إلى اليمين من الموضع الحالي. -> تناوب يمين يسار (دوران RL) يكون RL Rotation عبارة عن توليفة من الدوران الأيمن الفردي متبوعًا بالدوران الأيسر الوحيد. في RL Rotation ، تقوم كل عقدة أولاً بنقل موضع واحد إلى اليمين ثم موضع واحد إلى اليسار من الموضع الحالي.
|