شجرة البحث الثنائية

الشكل 1: شجرة بحث ثنائية بحجم 9 وعمق 3، مع وجود 8 في الجذر.

في علم الحاسوب ، تُعرف شجرة البحث الثنائية ( BST )، والتي تُسمى أيضًا الشجرة الثنائية المرتبة أو المصنفة ، بأنها بنية بيانات شجرة ثنائية جذرية ، حيث يكون مفتاح كل عقدة داخلية أكبر من جميع المفاتيح في الشجرة الفرعية اليسرى لتلك العقدة، وأصغر من جميع المفاتيح في الشجرة الفرعية اليمنى لها. ويتناسب التعقيد الزمني للعمليات على شجرة البحث الثنائية تناسبًا طرديًا مع ارتفاع الشجرة.

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

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

يُظهر تحليل تعقيد شجرة البحث الثنائية أن عمليات الإدراج والحذف والبحث تستغرق في المتوسطΘ(سجلن){\displaystyle \Theta (\log n)}لن{\displaystyle n}العقد. في أسوأ الأحوال، تتدهور إلى ما يشبه قائمة مرتبطة أحادية:يا(ن){\displaystyle O(n)}لمعالجة الزيادة غير المحدودة في ارتفاع الشجرة مع عمليات الإضافة والحذف العشوائية، تم تقديم متغيرات متوازنة ذاتيًا لأشجار البحث الثنائية لتقييد أسوأ تعقيد للبحث بما يعادل اللوغاريتم الثنائي. كانت أشجار AVL أول أشجار بحث ثنائية متوازنة ذاتيًا، وقد ابتكرها جورجي أديلسون-فيلسكي وإيفجيني لانديس عام 1962. [ 1 ] [ 2 ] [ 3 ]

يمكن استخدام أشجار البحث الثنائية لتنفيذ أنواع البيانات المجردة مثل المجموعات الديناميكية وجداول البحث وقوائم الانتظار ذات الأولوية ، وتستخدم في خوارزميات الفرز مثل فرز الشجرة .

تاريخ

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

يزداد التعقيد الزمني لشجرة البحث الثنائية بلا حدود مع ارتفاع الشجرة إذا تم إدخال العقد بترتيب عشوائي، لذلك تم تقديم أشجار البحث الثنائية ذاتية التوازن للحد من ارتفاع الشجرة.يا(سجلن){\displaystyle O(\log n)}[ 7 ] تم تقديم العديد من أشجار البحث الثنائية المتوازنة الارتفاع لتقييد ارتفاع الشجرة، مثل أشجار AVL ، و Treaps ، وأشجار الأحمر والأسود . [ 8 ]

ملخص

شجرة البحث الثنائية هي شجرة ثنائية جذرية تُرتّب فيها العقد بترتيب كلي صارم ، حيث تُخزّن العقد ذات المفاتيح الأكبر من أي عقدة معينة (أ) في الأشجار الفرعية اليمنى لتلك العقدة (أ) ، بينما تُخزّن العقد ذات المفاتيح المساوية أو الأصغر من ( أ) في الأشجار الفرعية اليسرى لـ (أ)، مما يحقق خاصية البحث الثنائي . [ 9 ] : 298 [ 10 ] : 287

تُعدّ أشجار البحث الثنائية فعّالة أيضًا في عمليات الفرز وخوارزميات البحث . مع ذلك، يعتمد تعقيد البحث في شجرة البحث الثنائية على ترتيب إدخال وحذف العقد؛ ففي أسوأ الحالات، قد تؤدي العمليات المتتالية في شجرة البحث الثنائية إلى انحلال وتكوين بنية شبيهة بالقائمة المرتبطة أحادية الاتجاه (أو "الشجرة غير المتوازنة")، وبالتالي يكون لها نفس تعقيد أسوأ الحالات للقائمة المرتبطة . [ 11 ] [ 9 ] : 299-302

تُعد أشجار البحث الثنائية أيضًا بنية بيانات أساسية تُستخدم في بناء هياكل البيانات المجردة مثل المجموعات والمجموعات المتعددة والمصفوفات الترابطية .

العمليات

البحث

يمكن برمجة البحث في شجرة البحث الثنائية عن مفتاح معين بشكل متكرر أو تكراري .

يبدأ البحث بفحص العقدة الجذرية . إذا كانت الشجرة فارغة (nil )، فهذا يعني أن المفتاح المطلوب غير موجود فيها. أما إذا كان المفتاح مساويًا لمفتاح الجذر، فإن البحث ينجح وتُعاد العقدة. إذا كان المفتاح أصغر من مفتاح الجذر، ينتقل البحث إلى الشجرة الفرعية اليسرى. وبالمثل، إذا كان المفتاح أكبر من مفتاح الجذر، ينتقل البحث إلى الشجرة الفرعية اليمنى. تُكرر هذه العملية حتى يُعثر على المفتاح أو تُصبح الشجرة الفرعية المتبقية فارغة.لا شيء{\displaystyle {\text{nil}}}إذا لم يتم العثور على المفتاح المطلوب بعدلا شيء{\displaystyle {\text{nil}}}إذا تم الوصول إلى الشجرة الفرعية، فإن المفتاح غير موجود في الشجرة. [ 10 ] : 290-291

تُنفذ الشفرة الزائفة التالية إجراء البحث في شجرة البحث الثنائية باستخدام الاستدعاء الذاتي . [ 10 ] : 290

Recursive-Tree-Search(x, key) إذا كان x = NIL أو key = x.key، فأرجع x. إذا كان key < x.key ، فأرجع Recursive -Tree-Search(x.left, key). وإلا، فأرجع Recursive-Tree-Search(x.right, key) .

تستمر العملية التكرارية حتىلا شيء{\displaystyle {\text{nil}}}أومفتاح{\displaystyle {\text{key}}}يتم العثور على ما يتم البحث عنه.

يمكن تحويل النسخة التكرارية من البحث إلى حلقة while . وقد وُجد أن النسخة التكرارية أكثر كفاءة في معظم الأجهزة . [ 10 ] : 291

Iterative-Tree-Search(x, key) while x  NIL and key  x.key do if key < x.key then x := x.left آخر x := x.right نهاية الشرط، كرر، أعد x

بما أن البحث قد يستمر حتى عقدة طرفية معينة ، فإن تعقيد وقت تشغيل بحث شجرة البحث الثنائية هويا(ح){\displaystyle O(h)}أينح{\displaystyle h}يمثل ارتفاع الشجرة . ومع ذلك، فإن أسوأ حالة للبحث في شجرة البحث الثنائية هييا(ن){\displaystyle O(n)}أينن{\displaystyle n}يمثل العدد الإجمالي للعقد في شجرة البحث الثنائية، لأن شجرة البحث الثنائية غير المتوازنة قد تتحول إلى قائمة مرتبطة. ومع ذلك، إذا كانت شجرة البحث الثنائية متوازنة الارتفاع، فإن الارتفاع هويا(سجلن){\displaystyle O(\log n)}[ 10 ] : 290

الخلف والسلف

بالنسبة لبعض العمليات، بالنظر إلى عقدةx{\displaystyle {\text{x}}}إيجاد خليفة أو سلف لـx{\displaystyle {\text{x}}}يُعدّ هذا الأمر بالغ الأهمية. بافتراض أن جميع مفاتيح شجرة البحث الثنائية (BST) متميزة، فإنّ العقدة التالية للعقدةx{\displaystyle {\text{x}}}في شجرة البحث الثنائية، تكون العقدة التي تحتوي على أصغر مفتاح أكبر منx{\displaystyle {\text{x}}}مفتاح العقدة. من ناحية أخرى، العقدة السابقة للعقدةx{\displaystyle {\text{x}}}في شجرة البحث الثنائية، تكون العقدة التي تحتوي على أكبر مفتاح أصغر منx{\displaystyle {\text{x}}}مفتاح 's. يحدد الكود الزائف التالي العقدة التالية والعقدة السابقة لهاx{\displaystyle {\text{x}}}في BST. [ 12 ] [ 13 ] [ 10 ] : 292-293

إذا كان x.right  NIL ، فأرجع BST -Successor(x) نهاية الشرط  y := x.parent بينما y  NIL و x = y.right نفّذ x := y y := y.parent كرر الإرجاع y
إذا كان x.leftNIL ، فأرجع BST -Maximum(x.left) . y := x.parent بينما y  NIL و x = y.left نفّذ x := y y := y.parent كرر الإرجاع y

تُعدّ عملياتٌ مثل إيجاد عقدة في شجرة بحث ثنائية يكون مفتاحها هو القيمة القصوى أو الدنيا، بالغة الأهمية في عملياتٍ أخرى، مثل تحديد العقدة اللاحقة والسابقة. فيما يلي الشفرة الزائفة لهذه العمليات. [ 10 ] : 291-292

BST-Maximum(x) while x.right  NIL do x := x.right كرر العودة x
BST-Minimum(x) while x.left  NIL do x := x.left كرر العودة x

الإدخال

تؤدي عمليات مثل الإضافة والحذف إلى تغيير تمثيل شجرة البحث الثنائية ديناميكيًا. يجب تعديل بنية البيانات بحيث تظل خصائص شجرة البحث الثنائية محفوظة. تُضاف العقد الجديدة كعقد طرفية في شجرة البحث الثنائية. [ 10 ] : 294-295. فيما يلي تطبيق تكراري لعملية الإضافة. [ 10 ] : 294

1 BST-Insert(T, z) 2 ص := لا شيء 3 x := T.root 4 بينما x  NIL نفّذ 5 ص := س 6 إذا كان z.key < x.key 7 x := x.left 8 وإلا 9 x := x.right ١٠ نهاية إذا ١١ كرر 12 z.parent := y 13 إذا كانت y = NIL فإن 14 T.root := z 15 وإلا إذا كان مفتاح z < مفتاح y، 16 y.left := z 17 آخر 18 y.right := z 19 نهاية إذا

يحتفظ الإجراء بـ "مؤشر لاحق".y{\displaystyle {\text{y}}}بصفتي أحد الوالدينx{\displaystyle {\text{x}}}بعد التهيئة في السطر 2، تقوم حلقة while الممتدة على الأسطر من 4 إلى 11 بتحديث المؤشرات. إذاy{\displaystyle {\text{y}}}يكونلا شيء{\displaystyle {\text{nil}}}وبالتالي، فإن شجرة البحث الثنائية فارغة.z{\displaystyle {\text{z}}}يتم إدراجها كعقدة جذرية لشجرة البحث الثنائيةتي{\displaystyle {\text{T}}}إن لم يكن كذلكلا شيء{\displaystyle {\text{nil}}}تتم عملية الإدخال بمقارنة المفاتيح بمفاتيح النظام.y{\displaystyle {\text{y}}}على الأسطر من 15 إلى 19، ويتم إدراج العقدة وفقًا لذلك. [ 10 ] : 295

الحذف

عملية حذف عقدة شجرة البحث الثنائية.

حذف عقدة، على سبيل المثالZ{\displaystyle {\text{Z}}}، من شجرة البحث الثنائيةبتوقيت بريطانيا الصيفي{\displaystyle {\text{BST}}}يحتوي على ثلاث حالات: [ 10 ] : 295-297

  1. لوZ{\displaystyle {\text{Z}}}هي عقدة طرفية، يتم استبدالها بـلا شيء{\displaystyle {\text{لا شيء}}}كما هو موضح في (أ).
  2. لوZ{\displaystyle {\text{Z}}}له طفل واحد فقط، وهو عقدة الطفل لـZ{\displaystyle {\text{Z}}}يتم رفعه عن طريق تعديل العقدة الأصلية لـZ{\displaystyle {\text{Z}}}للإشارة إلى العقدة الفرعية، وبالتالي أخذZ{\displaystyle {\text{Z}}}موقعها في الشجرة، كما هو موضح في (ب) و (ج).
  3. لوZ{\displaystyle {\text{Z}}}لديه أطفال يمين ويسار، وهو الوريث بالترتيب لـZ{\displaystyle {\text{Z}}}، يقولY{\displaystyle {\text{Y}}}، يزيحZ{\displaystyle {\text{Z}}}باتباع الحالتين التاليتين:
    1. لوY{\displaystyle {\text{Y}}}يكونZ{\displaystyle {\text{Z}}}الطفل الأيمن، كما هو موضح في (د)،Y{\displaystyle {\text{Y}}}يُزيحZ{\displaystyle {\text{Z}}}وY{\displaystyle {\text{Y}}}يبقى الطفل الأيمن دون تغيير.
    2. لوY{\displaystyle {\text{Y}}}يكمن في الداخلZ{\displaystyle {\text{Z}}}الشجرة الفرعية اليمنى، لكنها ليست كذلك.Z{\displaystyle {\text{Z}}}الطفل الأيمن، كما هو موضح في (هـ)،Y{\displaystyle {\text{Y}}}يتم استبدالها أولاً بابنها الأيمن، ثم تحل محلهاZ{\displaystyle {\text{Z}}}موقعه في الشجرة.
  4. بدلاً من ذلك، يمكن أيضاً استخدام العنصر السابق في الترتيب.

تُنفذ الشفرة الزائفة التالية عملية الحذف في شجرة بحث ثنائية. [ 10 ] : 296-298

1 BST-Delete(BST, z) 2 إذا كان z.left = NIL ثم 3 عقد إزاحة (BST، z، z.right) 4- وإلا إذا كان z.right = NIL، فـ 5 Shift-Nodes(BST, z, z.left) 6 أخرى 7 y := BST-Successor(z) 8 إذا كان y.parentz ، 9 Shift-Nodes(BST, y, y.right) 10 y.right := z.right 11 y.right.parent := y 12 نهاية إذا 13 عقدة الإزاحة (BST، z، y) 14 y.left := z.left 15 y.left.parent := y 16 نهاية إذا
1. Shift-Nodes(BST, u, v) 2 إذا كان u.parent = NIL ثم 3 BST.root := v 4- وإلا إذا كان u = u.parent.left ، 5 u.parent.left := v 5 أخرى 6 u.parent.right := v 7 نهاية الشرط 8 إذا كان v  NIL ثم 9 v.parent := u.parent 10 نهاية إذا

الحذف BST{\displaystyle {\text{BST-Delete}}}يتناول الإجراء الحالات الخاصة الثلاث المذكورة أعلاه. يتناول السطران 2-3 الحالة 1، ويتناول السطران 4-5 الحالة 2، بينما يتناول السطران 6-16 الحالة 3. الدالة المساعدةعقد الإزاحة{\displaystyle {\text{Shift-Nodes}}}يُستخدم هذا في خوارزمية الحذف لغرض استبدال العقدةu{\displaystyle {\text{u}}}معv{\displaystyle {\text{v}}}في شجرة البحث الثنائيةبتوقيت بريطانيا الصيفي{\displaystyle {\text{BST}}}[ 10 ] : 298 تتولى هذه العملية حذف (واستبدال )u{\displaystyle {\text{u}}}منبتوقيت بريطانيا الصيفي{\displaystyle {\text{BST}}}.

اجتياز

يمكن اجتياز شجرة البحث الثنائية من خلال ثلاث خوارزميات أساسية: اجتياز الشجرة بالترتيب الداخلي ، والترتيب المسبق ، والترتيب اللاحق . [ 10 ] : 287

  • اجتياز الشجرة بترتيب داخلي : تتم زيارة العقد من الشجرة الفرعية اليسرى أولاً، تليها العقدة الجذرية ثم الشجرة الفرعية اليمنى. يشمل هذا الاجتياز جميع العقد بترتيب تسلسل المفاتيح غير المتناقص.
  • اجتياز شجرة الترتيب المسبق : تتم زيارة العقدة الجذرية أولاً، تليها الأشجار الفرعية اليسرى واليمنى.
  • اجتياز شجرة الترتيب اللاحق : تتم زيارة العقد من الشجرة الفرعية اليسرى أولاً، تليها الشجرة الفرعية اليمنى، وأخيراً الجذر.

فيما يلي تطبيق تكراري لعمليات البحث في الشجرة. [ 10 ] : 287-289

Inorder-Tree-Walk(x) إذا كان x  NIL ثم Inorder-Tree-Walk(x.left) زيارة العقدة Inorder-Tree-Walk(x.right) نهاية الشرط
إذا كان x  NIL، فقم بزيارة العقدة Preorder-Tree-Walk(x).  Preorder-Tree-Walk(x.left) Preorder-Tree-Walk(x.right) نهاية الشرط
Postorder-Tree-Walk(x) إذا كان x  NIL ثم Postorder-Tree-Walk(x.left) Postorder-Tree-Walk(x.right) قم بزيارة العقدة نهاية إذا

أشجار البحث الثنائية المتوازنة

بدون إعادة التوازن، قد تؤدي عمليات الإدخال أو الحذف في شجرة البحث الثنائية إلى التدهور، مما ينتج عنه ارتفاعن{\displaystyle n}من الشجرة (حيثن{\displaystyle n}(عدد العناصر في الشجرة)، مما يؤدي إلى تدهور أداء البحث ليصبح مماثلاً للبحث الخطي. [ 14 ] مع الحفاظ على توازن شجرة البحث وارتفاعها محدودًا بـيا(سجلن){\displaystyle O(\log n)}يُعدّ هذا عاملاً أساسياً في فائدة شجرة البحث الثنائية. ويمكن تحقيق ذلك من خلال آليات "التوازن الذاتي" أثناء عمليات تحديث الشجرة، المصممة للحفاظ على ارتفاع الشجرة ضمن التعقيد اللوغاريتمي الثنائي. [ 7 ] [ 15 ] : 50

أشجار متوازنة الارتفاع

تُعتبر الشجرة متوازنة الارتفاع إذا كان ارتفاعا الشجرة الفرعية اليسرى والشجرة الفرعية اليمنى مرتبطين بمعامل ثابت. وقد طُرحت هذه الخاصية في شجرة AVL ، واستمرت في شجرة الأحمر والأسود . [ 15 ] : 50-51 . يجب مراقبة ارتفاعات جميع العقد على المسار من الجذر إلى عقدة الورقة المُعدّلة، وربما تصحيحها، في كل عملية إدراج أو حذف في الشجرة. [ 15 ] : 52

أشجار متوازنة الوزن

في الشجرة المتوازنة الوزن، يكون معيار توازن الشجرة هو عدد أوراق الأشجار الفرعية. ويختلف وزن الأشجار الفرعية اليسرى واليمنى على الأكثر بمقدار1{\displaystyle 1}[ 16 ] [ 15 ] : 61 ومع ذلك، فإن الفرق محصور بنسبةα{\displaystyle \alpha }من الأوزان، نظرًا لشرط التوازن القوي لـ1{\displaystyle 1}لا يمكن الحفاظ عليها معيا(سجلن){\displaystyle O(\log n)}إعادة توزيع العمل أثناء عمليات الإضافة والحذف.α{\displaystyle \alpha }تُعطي الأشجار المتوازنة الوزن مجموعة كاملة من شروط التوازن، حيث تحتوي كل شجرة فرعية يسرى وأخرى يمنى على جزء على الأقل منα{\displaystyle \alpha }من الوزن الإجمالي للشجرة الفرعية. [ 15 ] : 62

الأنواع

توجد عدة أشجار بحث ثنائية متوازنة ذاتيًا، بما في ذلك شجرة T ، [ 17 ] وشجرة treap ، [ 18 ] وشجرة الأحمر والأسود ، [ 19 ] وشجرة B ، [ 20 ] وشجرة 2-3 ، [ 21 ] وشجرة Splay . [ 22 ]

أمثلة على التطبيقات

نوع

تُستخدم أشجار البحث الثنائية في خوارزميات الفرز مثل فرز الشجرة ، حيث تُضاف جميع العناصر دفعة واحدة ويتم اجتياز الشجرة بترتيب تسلسلي. [ 23 ] كما تُستخدم أشجار البحث الثنائية في الفرز السريع . [ 24 ]

عمليات قائمة الانتظار ذات الأولوية

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

  • إذا كانت قائمة انتظار ذات أولوية تصاعدية، فإن إزالة عنصر ذي أولوية منخفضة تتم من خلال اجتياز شجرة البحث الثنائية من اليسار.
  • إذا كانت قائمة انتظار ذات أولوية تنازلية، فإن إزالة عنصر ذي أولوية قصوى تتم من خلال اجتياز شجرة البحث الثنائية باتجاه اليمين.

انظر أيضاً

مراجع

  1. بيتاسي، تونيان (2015). "CSC263: أشجار البحث الثنائية المتوازنة، شجرة AVL" (ملف PDF) . جامعة تورنتو ، قسم علوم الحاسوب. ص  6. مؤرشف (ملف PDF) من الأصل بتاريخ 14 فبراير 2019. تم الاطلاع عليه بتاريخ 19 مايو 2022 .
  2. مايرز، أندرو. "محاضرة CS 312: أشجار AVL" . جامعة كورنيل ، قسم علوم الحاسوب. مؤرشف من الأصل في 27 أبريل 2021. تم الاطلاع عليه في 19 مايو 2022 .
  3. أديلسون-فيلسكي، جورجي؛ لانديس، يفغيني (1962). "خوارزمية لتنظيم المعلومات". وقائع أكاديمية العلوم في الاتحاد السوفيتي (باللغة الروسية). 146 : 263-266 .الترجمة الإنجليزية من قبل مايرون ج. ريتشي في الرياضيات السوفيتية - دوكلادي ، 3:1259–1263، 1962.
  4. 1 2 كولبيرسون، ج.؛ مونرو، ج. آي. (1 يناير 1989). "شرح سلوك أشجار البحث الثنائية في ظل التحديثات المطولة: نموذج ومحاكاة" . مجلة الكمبيوتر . 32 (1): 68-69 . doi : 10.1093/comjnl/32.1.68 .
  5. كولبيرسون، ج.؛ مونرو، ج. آي. (28 يوليو 1986). "تحليل خوارزميات الحذف القياسية في أشجار البحث الثنائية ذات مجال التطابق التام" . Algorithmica . 5 ( 1-4 ). Springer Publishing ، جامعة واترلو : 297. doi : 10.1007/BF01840390 . S2CID 971813 . 
  6. بي إف ويندلي (1 يناير 1960). "الأشجار والغابات وإعادة الترتيب" . مجلة الكمبيوتر . 3 (2): 84. doi : 10.1093/comjnl/3.2.84 .
  7. 1 2 كنوت، دونالد (1998). "القسم 6.2.3: الأشجار المتوازنة". فن برمجة الحاسوب (ملف PDF) . المجلد 3 ( الطبعة الثانية). أديسون-ويسلي . الصفحات 458-481 . ISBN    978-0201896855تمت أرشفة الملف (PDF) من النسخة الأصلية بتاريخ 2022-10-09.
  8. بول إي. بلاك، "شجرة حمراء-سوداء"، في قاموس الخوارزميات وهياكل البيانات [متاح عبر الإنترنت]، بول إي. بلاك، محرر. 12 نوفمبر 2019. (تم الاطلاع عليه في 19 مايو 2022) من: https://www.nist.gov/dads/HTML/redblack.html
  9. 1 2 ثاريجا، ريما (13 أكتوبر 2018). "التجزئة والتصادم". هياكل البيانات باستخدام لغة C ( الطبعة الثانية). مطبعة جامعة أكسفورد . ISBN  9780198099307.
  10. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 كورمين، توماس هـ . ليسرسون، تشارلز إي . ريفست، رونالد ل . ستاين، كليفورد (2001). مقدمة للخوارزميات ( الطبعة الثانية). مطبعة معهد ماساتشوستس للتكنولوجيا . رقم ISBN  0-262-03293-7.
  11. آر. إيه. فروست؛ إم. إم. بيترسون (1 فبراير 1982). "ملاحظة موجزة حول أشجار البحث الثنائية" . مجلة الكمبيوتر . 25 (1). مطبعة جامعة أكسفورد : 158. doi : 10.1093/comjnl/25.1.158 .
  12. جونزو هوانغ. "تصميم وتحليل الخوارزميات" (ملف PDF) . جامعة تكساس في أرلينغتون . ص 12. مؤرشف (ملف PDF) من الأصل في 13 أبريل 2021. تم الاطلاع عليه في 17 مايو 2021 . 
  13. راي، راي. "شجرة البحث الثنائية" . جامعة لويولا ماريماونت ، قسم علوم الحاسوب . تم الاطلاع عليه بتاريخ 17 مايو 2022 .
  14. ثورنتون، أليكس (2021). "ICS 46: أشجار البحث الثنائية" . جامعة كاليفورنيا، إرفاين . مؤرشف من الأصل في 4 يوليو 2021. تم الاطلاع عليه في 21 أكتوبر 2021 .
  15. 1 2 3 4 5 براس، بيتر (يناير 2011). هياكل البيانات المتقدمة . مطبعة جامعة كامبريدج . doi : 10.1017/CBO9780511800191 . ISBN 9780511800191.
  16. بلوم، نوربرت؛ ميلهورن، كورت (1978). "حول متوسط ​​عدد عمليات إعادة التوازن في الأشجار المتوازنة الوزن" (ملف PDF) . علوم الحاسوب النظرية . 11 (3): 303-320 . doi : 10.1016/0304-3975(80)90018-3 . مؤرشف (ملف PDF) من الأصل بتاريخ 2022-10-09.
  17. ليمان، توبين جيه؛ كاري، مايكل جيه (25-28 أغسطس 1986). دراسة لهياكل الفهرسة لأنظمة إدارة قواعد البيانات في الذاكرة الرئيسية . المؤتمر الدولي الثاني عشر لقواعد البيانات الضخمة جدًا (VLDB 1986). كيوتو. ISBN 0-934613-18-4.
  18. أراغون، سيسيليا ر.؛ سيدل، رايموند (1989)، "أشجار البحث العشوائية" (ملف PDF) ، الندوة السنوية الثلاثون حول أسس علوم الحاسوب ، واشنطن العاصمة: مطبعة جمعية مهندسي الكهرباء والإلكترونيات، الصفحات 540-545 ، doi : 10.1109/SFCS.1989.63531 ، ISBN  0-8186-1982-1تمت أرشفة الملف (PDF) من النسخة الأصلية بتاريخ 2022-10-09
  19. كورمن، توماس هـليسرسون، تشارلز إيريفست، رونالد لشتاين، كليفورد (2001). " الأشجار الحمراء والسوداء". مقدمة في الخوارزميات (  الطبعة الثانية). مطبعة معهد ماساتشوستس للتكنولوجيا. الصفحات 273-301 . ISBN  978-0-262-03293-3.
  20. كومر، دوغلاس (يونيو 1979)، "شجرة B المنتشرة في كل مكان"، دراسات الحوسبة ، 11 (2): 123-137 ، doi : 10.1145/356770.356776 ، ISSN 0360-0300 ، S2CID 101673  
  21. كنوت، دونالد إي. (1998). "6.2.4". فن برمجة الحاسوب . المجلد 3 ( الطبعة الثانية). أديسون ويسلي. ISBN   9780201896855. الأشجار 2-3 المحددة في نهاية القسم 6.2.3 تعادل أشجار B من الرتبة 3.
  22. سليتور، دانيال دتارجان، روبرت إي. (1985). "أشجار البحث الثنائية ذاتية التعديل" (ملف PDF) . مجلة ACM . 32 (3): 652-686 . doi : 10.1145/3828.3835 . S2CID 1165848 . 
  23. نارايانان، أرفيند (2019). "COS226: أشجار البحث الثنائية" . كلية الهندسة والعلوم التطبيقية بجامعة برينستون . مؤرشف من الأصل في 22 مارس 2021. تم الاطلاع عليه في 21 أكتوبر 2021 عبر cs.princeton.edu.
  24. شيونغ، لي. "صلة بين أشجار البحث الثنائية وخوارزمية الفرز السريع" . كلية أكسفورد بجامعة إيموري ، قسم الرياضيات وعلوم الحاسوب. مؤرشف من الأصل في 26 فبراير 2021. تم الاطلاع عليه في 4 يونيو 2022 .
  25. مايرز، أندرو. "ملاحظات محاضرة ومناقشة مقرر علوم الحاسوب 2112: قوائم الانتظار ذات الأولوية والأكوام" . جامعة كورنيل ، قسم علوم الحاسوب . مؤرشف من الأصل في 21 أكتوبر 2021. تم الاطلاع عليه في 21 أكتوبر 2021 .

للمزيد من القراءة