هذه مقالة غير مراجعة.(سبتمبر 2024) |
في علوم الكمبيوتر ، شجرة الأقسام هي هيكل بياني تُستخدم لتخزين المعلومات حول الفواصل أو الأقسام. تسمح بالاستعلام عن أي من الأقسام المخزنة تحوي على نقطة معينة يتم الاستعلام عنها. هيكل بيانات مماثل لها هو شجرة الفواصل .
تستخدم شجرة الاقسام لمجموعة I من لمصفوفة بطول n تعقيد مساحي مساوي ل O ( n log n ) ويمكن إنشاؤها في تعقيد وقتي O ( n log n ). تدعم شجرة الاقسام البحث عن جميع الفواصل الزمنية التي تحتوي على نقطة معينة بزمن ( O (log (n + k )، حيث يمثل k عدد المقاطع التي تحوي النقاط المطلوبة. [1]
تطبيقات شجرة الاقسام تشمل مجالات الهندسة رياضية حاسوبية ونظم المعلومات الجغرافية وتعلم الآلة .
يمكن استخدام شجرة الاقسام ل مصفوفة ذو أبعاد متعددة.
ليكن S مجموعة من الاقسام. وليكن p1 ، p2 ، ... ، pm قائمة نقاط نهايات الاقسام الغير مكررة. مرتبة من اليسار إلى اليمين. مثل تقسيم خط الاعداد الحقيقية الناتج عن تلك النقاط. وتسمى مناطق هذا التقسيم بالفواصل الأولية . وبالتالي، فإن الفواصل الأولية هي، من اليسار إلى اليمين:
وهذا هو قائمة الفواصل الأولية التي تتكون من فواصل مفتوحة بين حدين متتاليين pi و pi +1 ، بالتناوب مع حدود مغلقة تتكون من نقطة نهاية واحدة. يتم التعامل مع النقاط الفردية على أنها قسم منفصل لأن إجابة الاستعلام ليست بالضرورة هي نفسها في الجزء الداخلي من قسم ونقاط نهايتها. [1]
بفرض لدينا مجموعة I من الاقسام أو المقاطع، فإن شجرة الافسامT لـ I يتم بنائها على النحو التالي:
يمكن بناء شجرة الاقسام من مجموعة اقسام I ، على النحو التالي. أولاً، يتم فرز نقاط النهاية للأقسام الموجودة في I يتم الحصول على الفواصل الأولية من ذلك. وبعد ذلك يتم بناء شجرة ثنائية متوازنة على الفواصل الأولية، ولكل عقدة v يتم تحديد الفاصل Int( v ) الذي تمثله. يبقى علينا حساب المجموعات الفرعية الأساسية للعقد. وللقيام بذلك، يتم إدراج الفواصل الزمنية في I واحدة تلو الأخرى في شجرة الاقسام. يمكن إدراج الفاصل الزمني X = [ x, x′] في شجرة فرعية جذؤها عند العقدة التي رمزها T ، باتباع الإجراء: [2]
تستغرق اجراء البناء كاملا تعقيد زمني مساوي ل O ( n log n ) ، حيث n يمثل عدد الأجزاء في I
استعلاماً في شجرة أقسام تتمثل بنقطة q x (يجب أن تكون هذه النقطة إحدى أوراق الشجرة)، فترجع الشجرة قائمة بجميع الاقسام المخزنة التي تحتوي على النقطة q x .
شرح اخر: يُعطى عقدة (شجرة فرعية) v ونقطة استعلام q x ، يتم إجراء الاستعلام باستخدام الخوارزمية التالية:
في شجرة الأقسام التي تحوي n قسم، يمكن الإبلاغ عن تلك التي تحتوي على نقطة استعلام معينة في تعقيد زمني O (log n + k )، حيث k هو عدد الاقسام المبلغ عنها.
تستخدم شجرة المقطع T لمجموعة I من n قسم تعقيد تخزيني O ( n log n ).
يمكن استخدام شجرة الأقسام لبيانات ذو أبعاد فوق احادية، وذلك على شكل أشجار اقسام متعددة المستويات. في النسخ ذو الأبعاد الأعلى، تخزن شجرة الأقسام مجموعة من المستطيلات المتوازية مع المحور، ويمكنها استرداد المستطيلات التي تحتوي على نقطة استعلام معينة. يستخدم الهيكل تخزين O ( n log d n )، يمكن الاجابة على الاستعلامات في وقت O (log d n ).
يُدعى الاستعلام الذي يطلب جميع الاقسام التي تحتوي على نقطة معينة باسم الاستعلام الطاعن . [1]
تعتبر شجرة الاقسام أبطئ من شجرة الفواصل لاستعلامات المجال في بُعد واحد، بسبب متطلبات التخزين الأعلى: O ( n log n ) لشجرة الاقسام مقابل O( n ) لشجرة الفواصل. تكمن أهمية شجرة القطاعات في إمكانية تخزين القطاعات داخل المجموعة الفرعية الأساسية لكل عقدة بأي طريقة عشوائية. [1]
القسم n الذي تكون نقاط نهايته في مجال صغير (على سبيل المثال، في النطاق [1, ..., O(n)] . فإن يوجد هياكل بيانات افضل من شجرة الاقسام بوقت معالجة مسبق خطي O(n) ووقت استعلام O (1 + k ) للإبلاغ عن جميع فترات k التي تحتوي على نقطة استعلام معينة.
ميزة أخرى لشجرة الاقسام هي أنه من السهل استخدامها لاستعلامات العد؛ أي الإبلاغ عن عدد الاقسام التي تحتوي على نقطة معينة، بدلاً من الإبلاغ عن الاقسام نفسها. بدلاً من تخزين الفواصل في المجموعات الفرعية الأساسية، يمكن ببساطة تخزين عددها. تستخدم شجرة الاقسام في هذه الحالة تخزينًا خطيًا، وتتطلب وقت استعلام O (log n )، لذلك هي مناسبة لهذا النوع من الاستعلامات. [1]
تم اختراع شجرة الأفسام بواسطة جون بنتلي في عام 1977م؛ كحل ل "لمشاكل مستطيل كلي". [1]