كوادري

شجرة رباعية المناطق النقطية مع بيانات نقطية. سعة الحاوية 1.
ضغط صورة باستخدام خوارزمية الشجرة الرباعية خطوة بخطوة. يظهر على اليسار الصورة المضغوطة مع مربعات إحاطة الشجرة، بينما يظهر على اليمين الصورة المضغوطة فقط.

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

قد تكون المناطق المقسمة مربعة أو مستطيلة، أو قد تتخذ أشكالًا عشوائية. على الرغم من استخدام تقسيمات مماثلة في وقت سابق (على سبيل المثال في نظرية ويتني للتغطية عام 1934)، [ 1 ] فقد أطلق رافائيل فينكل وجيه إل بنتلي على بنية البيانات هذه اسم "الشجرة الرباعية " عام 1974. [ 2 ] يُعرف تقسيم مشابه أيضًا باسم " شجرة Q" .

تشترك جميع أشكال الأشجار الرباعية في بعض السمات المشتركة:

  • إنها تحلل المساحة إلى خلايا قابلة للتكيف.
  • لكل خلية (أو دلو) سعة قصوى. وعندما تصل السعة القصوى إلى حدها الأقصى، ينقسم الدلو.
  • يتبع دليل الشجرة التقسيم المكاني للشجرة الرباعية.

الهرم الشجري ( T-pyramid ) هو شجرة "كاملة"؛ كل عقدة في الهرم الشجري لها أربع عقد فرعية باستثناء العقد الورقية؛ جميع الأوراق تقع على نفس المستوى، وهو المستوى الذي يتوافق مع وحدات البكسل الفردية في الصورة. يمكن تخزين البيانات في الهرم الشجري بشكل مضغوط في مصفوفة كبنية بيانات ضمنية ، على غرار الطريقة التي يمكن بها تخزين شجرة ثنائية كاملة بشكل مضغوط في مصفوفة باستخدام كومة ثنائية. [ 3 ]

الأنواع

مثال على شجرة رباعية لتقسيم الفضاء الثنائي المتكرر لفهرس ثنائي الأبعاد.

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

منطقة كوادتري

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

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

يمكن استخدام شجرة رباعية المناطق بعمق n لتمثيل صورة تتكون من 2n × 2n بكسل ، حيث تكون قيمة كل بكسل إما 0 أو 1. تمثل العقدة الجذرية منطقة الصورة بأكملها. إذا لم تكن جميع البكسلات في أي منطقة إما 0 أو 1، يتم تقسيمها. في هذا التطبيق، تمثل كل عقدة طرفية مجموعة من البكسلات التي جميعها 0 أو 1. لاحظ التوفير المحتمل في المساحة عند استخدام هذه الأشجار لتخزين الصور؛ فغالبًا ما تحتوي الصور على العديد من المناطق ذات الحجم الكبير والتي لها نفس قيمة اللون. بدلًا من تخزين مصفوفة ثنائية الأبعاد كبيرة لكل بكسل في الصورة، يمكن للشجرة الرباعية التقاط نفس المعلومات على مستويات تقسيم أعلى بكثير من حجم الخلايا بدقة البكسل التي نحتاجها في الأحوال العادية. دقة الشجرة وحجمها الإجمالي محدودان بحجم البكسل وحجم الصورة.

يمكن أيضًا استخدام شجرة رباعية المناطق كتمثيل متغير الدقة لحقل بيانات. على سبيل المثال، يمكن تخزين درجات الحرارة في منطقة ما على شكل شجرة رباعية، حيث تخزن كل عقدة طرفية متوسط ​​درجة الحرارة في المنطقة الفرعية التي تمثلها.

بوينت كوادري

شجرة النقاط الرباعية [ 4 ] هي نسخة معدلة من الشجرة الثنائية تُستخدم لتمثيل بيانات النقاط ثنائية الأبعاد. تشترك في خصائص جميع الأشجار الرباعية، لكنها شجرة حقيقية لأن مركز أي تقسيم فرعي يقع دائمًا على نقطة. غالبًا ما تكون فعالة جدًا في مقارنة نقاط البيانات ثنائية الأبعاد المرتبة، وعادةً ما تعمل في زمن O(log n) . تجدر الإشارة إلى أشجار النقاط الرباعية من باب الإكمال، لكنها أصبحت أقل كفاءة من أشجار k -d كأدوات للبحث الثنائي المعمم. [ 5 ] دُرست أشجار النقاط الرباعية مع الإدخال العشوائي تحت اسم الشبكات العشوائية المستوية الموزونة . [ 6 ]

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

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

بنية العقدة لشجرة رباعية النقاط

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

  • أربعة مؤشرات: quad['NW']، quad['NE']، quad['SW']، و quad['SE']
  • نقطة؛ والتي بدورها تحتوي على:
    • مفتاح؛ يُعبَّر عنه عادةً بإحداثيات س، ص
    • قيمة؛ على سبيل المثال اسم

شجرة رباعية النقاط والمناطق (PR)

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

شجرة إيدج الرباعية

تُستخدم أشجار الحواف الرباعية [ 9 ] [ 10 ] (على غرار أشجار PM الرباعية) لتخزين الخطوط بدلاً من النقاط. يتم تقريب المنحنيات بتقسيم الخلايا بدقة عالية جدًا، حتى يصبح لكل خلية قطعة مستقيمة واحدة. بالقرب من الزوايا/الرؤوس، تستمر أشجار الحواف الرباعية في التقسيم حتى تصل إلى أقصى مستوى من التجزئة. قد ينتج عن ذلك أشجار غير متوازنة للغاية، مما قد يُفقد الفهرسة جدواها.

خريطة مضلعة (PM) شجرة رباعية

شجرة الخرائط المضلعة الرباعية (أو شجرة الخرائط المضلعة الرباعية PM) هي نوع من أنواع الأشجار الرباعية، وتُستخدم لتخزين مجموعات من المضلعات التي قد تكون متدهورة (أي ذات رؤوس أو حواف معزولة). [ 11 ] [ 12 ] يتمثل أحد الفروق الرئيسية بين أشجار الخرائط المضلعة الرباعية وأشجار الحواف الرباعية في أن الخلية قيد الدراسة لا تُقسّم إذا التقت القطع المستقيمة عند رأس داخل الخلية.

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

الأشجار الرباعية المضغوطة

يلخص هذا القسم قسمًا فرعيًا من كتاب سارييل هار-بيليد . [ 13 ]

إذا قمنا بتخزين كل عقدة تُقابل خلية مُقسّمة، فقد ينتهي بنا الأمر بتخزين عدد كبير من العقد الفارغة. يُمكننا تقليل حجم هذه الأشجار المتفرقة عن طريق تخزين الأشجار الفرعية التي تحتوي أوراقها على بيانات مهمة فقط (أي "الأشجار الفرعية المهمة"). بل يُمكننا تقليل الحجم أكثر من ذلك. عندما نحتفظ فقط بالأشجار الفرعية المهمة، قد تُخلّف عملية التقليم مسارات طويلة في الشجرة حيث تكون العقد الوسيطة من الدرجة الثانية (رابط إلى أحد الأبوين وابنه). يتضح أننا نحتاج فقط إلى تخزين العقدةu{\displaystyle u}في بداية هذا المسار (وربط بعض البيانات الوصفية به لتمثيل العقد المحذوفة) وربط الشجرة الفرعية المتجذرة في نهايته بـu{\displaystyle u}لا يزال من الممكن أن يكون لهذه الأشجار المضغوطة ارتفاع خطي عند إعطائها نقاط إدخال "سيئة".

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

يجب أن نذكر افتراضًا معقولًا قبل أن نتابع: نفترض أنه بالنظر إلى عددين حقيقيينα،β[0،1){\displaystyle \alpha ,\beta \in [0,1)}عند التعبير عنها بالصيغة الثنائية، يمكننا إجراء العمليات الحسابية فييا(1){\displaystyle O(1)}نحسب وقت فهرس أول بت يختلفان فيه. نفترض أيضًا أنه يمكننا الحساب فييا(1){\displaystyle O(1)}نحسب الوقت لأدنى سلف مشترك لنقطتين/خليتين في الشجرة الرباعية ونحدد ترتيبهما النسبي Z ، ويمكننا حساب دالة الجزء الصحيح فييا(1){\displaystyle O(1)}وقت.

بناءً على هذه الافتراضات، تحديد موقع نقطة معينةq{\displaystyle q}(أي تحديد الخلية التي ستحتويq{\displaystyle q}يمكن إجراء عمليات الإضافة والحذف فييا(سجلن){\displaystyle O(\log {n})}الوقت (أي الوقت الذي يستغرقه البحث في بنية بيانات المجموعة المرتبة الأساسية).

لتحديد موقع نقطة ماq{\displaystyle q}(أي إيجاد خليتها في الشجرة المضغوطة):

  1. ابحث عن الخلية الموجودة في الشجرة المضغوطة التي تسبقq{\displaystyle q}بترتيب Z. سمِّ هذه الخليةv{\displaystyle v}.
  2. لوqv{\displaystyle q\in v}، يعودv{\displaystyle v}.
  3. وإلا، فابحث عن السلف المشترك الأدنى للنقطةq{\displaystyle q}والخليةv{\displaystyle v}في شجرة رباعية غير مضغوطة. سمِّ هذه الخلية السلفيةu{\displaystyle u}.
  4. ابحث عن الخلية الموجودة في الشجرة المضغوطة التي تسبقu{\displaystyle u}بترتيب Z وإعادته.

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

بعض الاستخدامات الشائعة للأشجار الرباعية

صورة نقطية وتمثيلها المضغوط لشجرة رباعية

معالجة الصور باستخدام الأشجار الرباعية

تُعدّ الأشجار الرباعية، ولا سيما شجرة المناطق الرباعية ، مناسبةً تمامًا لتطبيقات معالجة الصور. سنقتصر في مناقشتنا على بيانات الصور الثنائية، مع العلم أن أشجار المناطق الرباعية وعمليات معالجة الصور التي تُجرى عليها مناسبةٌ أيضًا للصور الملونة. [ 5 ] [ 18 ]

اتحاد / تقاطع الصور

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

تعمل الخوارزمية عن طريق اجتياز شجرتي الإدخال الرباعيتين (تي1{\displaystyle T_{1}}وتي2{\displaystyle T_{2}}) أثناء بناء شجرة الإخراج الرباعيةتي{\displaystyle T}بصورة غير رسمية، تكون الخوارزمية كما يلي. لنفترض العقدv1تي1{\displaystyle v_{1}\in T_{1}}و v2تي2{\displaystyle v_{2}\in T_{2}}يتوافق مع نفس المنطقة في الصور.

  • لوv1{\displaystyle v_{1}}أوv2{\displaystyle v_{2}}إذا كان اللون أسود، يتم إنشاء العقدة المقابلة فيتي{\displaystyle T}ويكون لونه أسود. إذا كان أحدهما أسود والآخر رمادي، فستحتوي العقدة الرمادية على شجرة فرعية تحتها. ولا يلزم اجتياز هذه الشجرة الفرعية.
  • لوv1{\displaystyle v_{1}}(على التوالى،v2{\displaystyle v_{2}}) أبيض،v2{\displaystyle v_{2}}(على التوالى،v1{\displaystyle v_{1}}) ويتم نسخ الشجرة الفرعية الموجودة أسفلها (إن وجدت) إلىتي{\displaystyle T}.
  • إذا كان كلاهماv1{\displaystyle v_{1}}وv2{\displaystyle v_{2}}إذا كانت رمادية، فإن الأطفال المقابلين لـv1{\displaystyle v_{1}}وv2{\displaystyle v_{2}}يتم أخذها في الاعتبار.

على الرغم من أن هذه الخوارزمية تعمل، إلا أنها لا تضمن بحد ذاتها شجرة رباعية ذات حجم أدنى. على سبيل المثال، لننظر إلى النتيجة إذا قمنا بدمج رقعة شطرنج (حيث كل بلاطة تمثل بكسلًا) بحجم 2ك×2ك{\displaystyle 2^{k}\times 2^{k}}مع مكملها. والنتيجة هي مربع أسود ضخم كان من المفترض أن يُمثل بشجرة رباعية تحتوي فقط على العقدة الجذرية (الملونة بالأسود)، ولكن بدلاً من ذلك، تُنتج الخوارزمية شجرة رباعية كاملة بعمقك{\displaystyle k}ولحل هذه المشكلة، نقوم باجتياز الشجرة الرباعية الناتجة من الأسفل إلى الأعلى، حيث نتحقق مما إذا كانت العقد الأربعة الفرعية لها نفس اللون، وفي هذه الحالة نستبدل العقدة الأب بورقة من نفس اللون. [ 5 ]

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

تسمية المكونات المتصلة

لنفترض وجود بكسلين أسودين متجاورين في صورة ثنائية. يُعتبران متجاورين إذا كانا يشتركان في حافة أفقية أو رأسية. وبشكل عام، يكون البكسلان الأسودان متصلين إذا أمكن الوصول إلى أحدهما من الآخر بالانتقال فقط إلى البكسلات المجاورة (أي يوجد مسار من البكسلات السوداء بينهما حيث يكون كل زوج متتالي متجاورًا). كل مجموعة قصوى من البكسلات السوداء المتصلة تُسمى مكونًا متصلًا . باستخدام تمثيل الصور بشجرة رباعية، أوضح ساميت [ 23 ] كيفية إيجاد هذه المكونات المتصلة وتصنيفها في وقت يتناسب مع حجم الشجرة الرباعية. [ 5 ] [ 24 ] يمكن أيضًا استخدام هذه الخوارزمية لتلوين المضلعات.

تعمل الخوارزمية في ثلاث خطوات:

  1. تحديد علاقات التجاور بين البكسلات السوداء
  2. قم بمعالجة علاقات التكافؤ من الخطوة الأولى للحصول على تسمية فريدة لكل مكون متصل
  3. قم بتسمية البكسلات السوداء بالعلامة المرتبطة بالمكون المتصل بها

لتبسيط المناقشة، لنفترض أن أبناء أي عقدة في الشجرة الرباعية يتبعون الترتيب Z (جنوب غرب، شمال غرب، جنوب شرق، شمال شرق). وبما أننا نستطيع الاعتماد على هذا الهيكل، فإننا نعرف، لأي خلية، كيفية التنقل في الشجرة الرباعية للعثور على الخلايا المجاورة في مختلف مستويات التسلسل الهرمي.

تُنجز الخطوة الأولى من خلال اجتياز شجرة رباعية بترتيب لاحق . لكل ورقة سوداءv{\displaystyle v}ننظر إلى العقدة أو العقد التي تمثل الخلايا المجاورة الشمالية والجيران الشرقية (أي الخلايا الشمالية والشرقية التي تشترك في حواف مع خليةv{\displaystyle v}بما أن الشجرة منظمة بترتيب Z ، فإن لدينا الثابت الذي ينص على أن الجيران الجنوبيين والغربيين قد تم أخذهم في الاعتبار بالفعل. لنفترض أن الجار الشمالي أو الشرقي قيد الدراسة حاليًا هوu{\displaystyle u}. لوu{\displaystyle u}يمثل البكسلات السوداء:

  • لو كان واحد فقط منu{\displaystyle u}أوv{\displaystyle v}إذا كان للخلية تسمية، فقم بتعيين تلك التسمية للخلية الأخرى.
  • إذا لم يكن لأي منهما تصنيفات، فأنشئ تصنيفًا وقم بتعيينه لكليهما.
  • لوu{\displaystyle u}وv{\displaystyle v}إذا كانت لها تسميات مختلفة، فقم بتسجيل معادلة هذه التسمية وانتقل إلى الخطوة التالية.

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

تُجري الخطوة الثالثة عملية اجتياز لاحقة أخرى. هذه المرة، لكل عقدة سوداءv{\displaystyle v}نستخدم عملية البحث الخاصة بـ union-find (مع التسمية القديمة لـv{\displaystyle v}) للعثور على وتعيينv{\displaystyle v}علامتها الجديدة (المرتبطة بالمكون المتصل بها)v{\displaystyle v}(جزء).

توليد الشبكة باستخدام الأشجار الرباعية

يلخص هذا القسم فصلاً من كتاب من تأليف هار-بيليد ودي بيرج وآخرون [ 26 ] [ 27 ]

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

الورقة المتوازنة لها زاوية واحدة على الأكثر في أحد جوانبها.

لنفترض ورقة من الشجرة الرباعية والخلية المقابلة لهاv{\displaystyle v}نقولv{\displaystyle v}تكون الخلية متوازنة (لتوليد الشبكة) إذا تقاطعت جوانبها مع نقاط زوايا الخلايا المجاورة مرة واحدة على الأكثر من كل جانب. وهذا يعني أن مستويات الشجرة الرباعية للأوراق المجاورة لـv{\displaystyle v}لا يختلف عن مستوىv{\displaystyle v}عندما يكون هذا صحيحًا بالنسبة لجميع الأوراق، نقول إن الشجرة الرباعية بأكملها متوازنة (لتوليد الشبكة).

ضع في اعتبارك الخليةv{\displaystyle v}و5×5{\displaystyle 5\times 5}مجموعة من الخلايا متساوية الحجم متمركزة عندv{\displaystyle v}نُطلق على هذه المنطقة اسم المجموعة الممتدة . ونقول إن الشجرة الرباعية متوازنة جيدًا إذا كانت متوازنة، ولكل ورقةu{\displaystyle u}التي تحتوي على نقطة من مجموعة النقاط، فإن مجموعتها الممتدة موجودة أيضًا في الشجرة الرباعية، ولا تحتوي المجموعة الممتدة على أي نقطة أخرى من مجموعة النقاط.

يتم إنشاء الشبكة على النحو التالي:

  1. قم ببناء شجرة رباعية على نقاط الإدخال.
  2. تأكد من توازن الشجرة الرباعية. لكل ورقة، إذا كان هناك جار كبير جدًا، قسّم هذا الجار. تُكرر هذه العملية حتى تتوازن الشجرة. كما نتأكد من أن عقد المجموعة الممتدة لكل ورقة، بالنسبة للأوراق التي تحتوي على نقطة، موجودة في الشجرة.
  3. لكل عقدة طرفيةv{\displaystyle v}إذا احتوت المجموعة الموسعة على نقطة، وإذا احتوت على نقطة أخرى، نقوم بتقسيم الشجرة وإعادة توزيعها حسب الحاجة. إذا احتجنا إلى التقسيم، لكل فرعu{\displaystyle u}لv{\displaystyle v}نضمن عقدu{\displaystyle u}توجد مجموعات 's الموسعة في الشجرة (وتتم إعادة التوازن حسب الحاجة).
  4. كرر الخطوة السابقة حتى تصبح الشجرة متوازنة بشكل جيد.
  5. حوّل الشجرة الرباعية إلى شجرة مثلثية.

نعتبر نقاط زوايا خلايا الشجرة رؤوسًا في عملية التثليث. قبل خطوة التحويل، لدينا مجموعة من المربعات تحتوي بعضها على نقاط. تتم خطوة التحويل على النحو التالي: لكل نقطة، نقوم بتشويه أقرب زاوية من خليتها لتلتقي بها، ثم نُثلث المربعات الأربعة الناتجة لتكوين مثلثات "متناسقة" (للمزيد من التفاصيل حول ما يجعل المثلثات "متناسقة"، يُرجى الرجوع إلى الفصل 12 من كتاب هار-بيليد [ 26 ] ).

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

في نهاية المطاف، لدينا شبكة مثلثية جميلة لمجموعة النقاط الخاصة بنا مبنية من شجرة رباعية.

الشفرة الزائفة

يوضح الكود الزائف التالي إحدى طرق تنفيذ شجرة رباعية تتعامل مع النقاط فقط. توجد طرق أخرى متاحة.

المتطلبات الأساسية

من المفترض استخدام هذه الهياكل.

// كائن إحداثيات بسيط لتمثيل النقاط والمتجهات struct XY { float x ; float y ; function __construct ( float _x , float _y ) {...} } // صندوق محيط محاذٍ للمحاور بنصف بُعد ومركز struct AABB { XY center ; float halfDimension ; function __construct ( XY _center , float _halfDimension ) {...} function containsPoint ( XY point ) {...} function intersectsAABB ( AABB other ) {...} }

فئة الشجرة الرباعية

يمثل هذا الصنف كلاً من شجرة رباعية واحدة والعقدة التي تتجذر فيها.

class QuadTree { // ثابت اختياري لتحديد عدد العناصر التي يمكن تخزينها في عقدة شجرة رباعية int QT_NODE_CAPACITY = 4 ; // صندوق محيط محاذٍ للمحاور مخزن كمركز بأبعاد نصفية // لتمثيل حدود هذه الشجرة الرباعية AABB boundary ; // نقاط في عقدة هذه الشجرة الرباعية Array of XY [ size = QT_NODE_CAPACITY ] points ; // أبناء QuadTree * northWest ; QuadTree * northEast ; QuadTree * southWest ; QuadTree * southEast ; // الدوال function __construct ( AABB_boundary ) {...} function insert ( XY p ) {...} function subdivide () { ...} // إنشاء أربعة أبناء يقسمون هذه الشجرة الرباعية بالكامل إلى أربعة مربعات متساوية المساحة function queryRange ( AABB range ) {...} }

الإدخال

تقوم الطريقة التالية بإدراج نقطة في المربع المناسب من شجرة رباعية، مع تقسيمها إذا لزم الأمر.

class QuadTree { ... // إدراج نقطة في شجرة رباعية function insert ( XY p ) { // تجاهل الكائنات التي لا تنتمي إلى هذه الشجرة الرباعية if ( ! boundary . containsPoint ( p )) return false ; // لا يمكن إضافة الكائن // إذا كانت هناك مساحة في هذه الشجرة الرباعية وإذا لم يكن بها تقسيمات فرعية، فأضف الكائن هنا if ( points . size < QT_NODE_CAPACITY && northWest == null ) { points . append ( p ); return true ; } // وإلا، قسّم الشجرة ثم أضف النقطة إلى أي عقدة تقبلها if ( northWest == null ) subdivide (); // يجب علينا إضافة النقاط/البيانات الموجودة في مصفوفة هذه الشجرة الرباعية إلى الأشجار الرباعية الجديدة إذا أردنا فقط // أن تحتوي العقدة الأخيرة على البيانات if ( northWest -> insert ( p )) return true ; if ( northEast -> insert ( p )) return true ; if ( southWest -> insert ( p )) return true ; إذا ( تم إدراج النقطة في منطقة الجنوب الشرقي فسيتم إرجاع القيمة true ؛ // وإلا، فلا يمكن إدراج النقطة لسبب غير معروف (وهذا لا ينبغي أن يحدث أبدًا) فسيتم إرجاع القيمة false ؛ } }

نطاق الاستعلام

الطريقة التالية تجد جميع النقاط الموجودة ضمن نطاق معين.

class QuadTree { ... // البحث عن جميع النقاط التي تظهر ضمن نطاق دالة queryRange ( AABB range ) { // تجهيز مصفوفة من النتائج Array of XY pointsInRange ; // إيقاف العملية تلقائيًا إذا لم يتقاطع النطاق مع هذا المربع if ( ! boundary . intersectsAABB ( range )) return pointsInRange ; // قائمة فارغة // التحقق من الكائنات على مستوى هذا المربع for ( int p = 0 ; p < points . size ; p ++ ) { if ( range . containsPoint ( points [ p ])) pointsInRange . append ( points [ p ]); } // إنهاء العملية هنا، إذا لم يكن هناك أبناء if ( northWest == null ) return pointsInRange ; // وإلا، أضف النقاط من الأبناء pointsInRange . appendArray ( northWest -> queryRange ( range )); pointsInRange . appendArray ( northEast -> queryRange ( range )); pointsInRange . أضف مصفوفة ( نطاق الاستعلام من الجنوب الغربي ( النطاق ) أضف مصفوفة ( نطاق الاستعلام من الجنوب الشرقي ( النطاق ))؛ أرجع نقاط النطاق ؛ } }

انظر أيضاً

مراجع

تقدم الدراسات الاستقصائية التي أجراها ألورو [ 5 ] وساميت [ 24 ] [ 18 ] نظرة عامة جيدة على الأشجار الرباعية.

ملحوظات

  1. ويتني، هاسلر (1934). "الامتدادات التحليلية للدوال المعرفة في مجموعات مغلقة" . معاملات الجمعية الرياضية الأمريكية . 36 (1). الجمعية الرياضية الأمريكية: 63-89 . doi : 10.2307/1989708 . JSTOR 1989708 . 
  2. فينكل، ر. أ.؛ بنتلي، ج. ل. (1974). "الأشجار الرباعية: بنية بيانات للاسترجاع باستخدام المفاتيح المركبة" . مجلة أكتا إنفورماتيكا . 4 (1): 1-9 . doi : 10.1007/BF00288933 . S2CID 33019699. تاريخ الاسترجاع: 6 نوفمبر 2019 . 
  3. ميلان سونكا، فاكلاف هلافاتش، روجر بويل. "معالجة الصور وتحليلها ورؤية الآلة" . 2014. ص 108-109.
  4. فينكل، ر. أ.؛ بنتلي، ج. ل. (1974). "الأشجار الرباعية: بنية بيانات للاسترجاع باستخدام المفاتيح المركبة". مجلة أكتا إنفورماتيكا . 4. سبرينغر-فيرلاغ: 1-9 . doi : 10.1007/bf00288933 . S2CID 33019699 . 
  5. 1 2 3 4 5 6 ألورو، س. (2004). "الأشجار الرباعية والأشجار الثمانية". في د. ميهتا وس. ساهني (محرران). دليل هياكل البيانات وتطبيقاتها . تشابمان آند هول/سي آر سي. الصفحات 19-1 - 19-26. ISBN  978-1-58488-435-4.
  6. ألفيس، سيديني ج.؛ دي أوليفيرا، مارسيلو م. (2022). "عملية التلامس على شبكة عشوائية مستوية موزونة". مجلة الميكانيكا الإحصائية (6): 063201. arXiv : 2203.06150 . Bibcode : 2022JSMTE2022f3201A . doi : 10.1088/1742-5468/ac70dc .
  7. أورنشتاين، جيه إيه (1982). "الأشجار متعددة الأبعاد المستخدمة في البحث الترابطي". رسائل معالجة المعلومات . 14 (4). إلسيفير: 150-157 . doi : 10.1016/0020-0190(82)90027-8 .
  8. سامت، هـ. (1984). "شجرة البيانات الرباعية وهياكل البيانات الهرمية ذات الصلة" (ملف PDF) . مجلة ACM Computing Surveys . 16 (2). ACM: 187–260 . doi : 10.1145/356924.356930 . S2CID 10319214 . 
  9. وارنوك، جيه إي (1969). "خوارزمية السطح المخفي للصور النصفية المولدة بالحاسوب". قسم علوم الحاسوب، جامعة يوتا . TR 4-15.
  10. شناير، م. (1981). "تمثيلان خطيان هرميان للميزات: أهرامات الحواف وأشجار الحواف الرباعية". رسومات الحاسوب ومعالجة الصور . 17 (3). إلسيفير: 211-224 . doi : 10.1016/0146-664X(81)90002-2 .
  11. حنان سامت وروبرت ويبر. "تخزين مجموعة من المضلعات باستخدام الأشجار الرباعية". معاملات ACM في الرسومات ، يوليو 1985: 182-222. InfoLAB . موقع إلكتروني. 23 مارس 2012
  12. نيلسون، آر سي؛ ساميت، إتش. (1986). "تمثيل هرمي متسق لبيانات المتجهات" . مجلة ACM SIGGRAPH لرسومات الحاسوب . 20 (4): 197-206 . doi : 10.1145/15886.15908 .
  13. هار-بيليد، س. (2011). "الأشجار الرباعية - الشبكات الهرمية". خوارزميات التقريب الهندسي . الدراسات والبحوث الرياضية، المجلد 173، الجمعية الرياضية الأمريكية.
  14. وانتا، داميان؛ سموليك، فالديمار ت.؛ كريزين، جاك؛ فروبليفسكي، برزيميسواف؛ ميدورا، ماتيوس (2021). "طريقة الحجم المحدود باستخدام شبكة رباعية غير منتظمة لنمذجة التصوير المقطعي للسعة الكهربائية" . وقائع الأكاديمية الوطنية للعلوم، الهند، القسم أ . 92 (3): 443-452 . doi : 10.1007/s40010-021-00748-7 . S2CID 244224810 . 
  15. سيستوفت، بيتر (2014). تقنية تطبيق جداول البيانات: الأساسيات والتوسعات . مطبعة معهد ماساتشوستس للتكنولوجيا. الصفحات 60-63 . ISBN  978-0-262-52664-7.
  16. توماس ج. روكيكي (2006-04-01). "خوارزمية لضغط المساحة والزمن" . تم الاسترجاع في 2009-05-20 .
  17. هينينغ إيبرهاردت، فيسا كلومب، أوي دي هانبيك، أشجار الكثافة لتقدير الحالة غير الخطية الفعالة ، وقائع المؤتمر الدولي الثالث عشر حول دمج المعلومات، إدنبرة، المملكة المتحدة، يوليو 2010.
  18. 1 2 ساميت، ح. (1989). "هياكل البيانات المكانية الهرمية". ندوة حول قواعد البيانات المكانية الكبيرة : 191-212 .
  19. هانتر، جي إم (1978). الحوسبة الفعالة وهياكل البيانات للرسومات . أطروحة دكتوراه، قسم الهندسة الكهربائية وعلوم الحاسوب، جامعة برينستون.
  20. هنتر، جي إم؛ ستيغليتز، ك. (1979). "عمليات على الصور باستخدام الأشجار الرباعية". معاملات IEEE في تحليل الأنماط والذكاء الآلي . 2 (2): 145-153 . Bibcode : 1979ITPAM...1..145H . doi : 10.1109 / tpami.1979.4766900 . PMID 21868843. S2CID 2544535 .  
  21. شناير، م. (1981). "حسابات الخصائص الهندسية باستخدام الأشجار الرباعية". رسومات الحاسوب ومعالجة الصور . 16 (3): 296-302 . doi : 10.1016/0146-664X(81)90042-3 .
  22. ميهتا، دينيش (2007). دليل هياكل البيانات وتطبيقاتها . تشابمان آند هول/سي آر سي برس. ص 397. 
  23. سامت، ح. (1981). "تسمية المكونات المتصلة باستخدام الأشجار الرباعية". مجلة ACM . 28 (3): 487-501 . CiteSeerX 10.1.1.77.2573 . doi : 10.1145/322261.322267 . S2CID 17485118 .  
  24. 1 2 ساميت، هـ. (1988). "نظرة عامة على الأشجار الرباعية، والأشجار الثمانية، وهياكل البيانات الهرمية ذات الصلة". في إيرنشو، ر. أ. (محرر). الأسس النظرية لرسومات الحاسوب والتصميم بمساعدة الحاسوب . سبرينغر-فيرلاغ. ص 51-68 . 
  25. تارجان، ر. إي. (1975). "كفاءة خوارزمية اتحاد مجموعات جيدة ولكنها غير خطية" (ملف PDF) . مجلة ACM . 22 (2): 215-225 . doi : 10.1145/321879.321884 . hdl : 1813/5942 . S2CID 11105749 . 
  26. 1 2 هار-بيليد، س. (2011). "التثليثات والتشبيك الجيدة". خوارزميات التقريب الهندسي . الدراسات والبحوث الرياضية، المجلد 173، الجمعية الرياضية الأمريكية.
  27. دي بيرغ، م.؛ تشيونغ، أ.؛ فان كريفيلد، م.؛ أوفرمارس، م.هـ. (2008). "توليد الشبكات غير المنتظمة باستخدام الأشجار الرباعية". خوارزميات وتطبيقات الهندسة الحسابية ( الطبعة الثالثة). سبرينغر-فيرلاغ. 

مراجع عامة

  1. رافائيل فينكل وجيه إل بنتلي (1974). "الأشجار الرباعية: بنية بيانات للاسترجاع باستخدام المفاتيح المركبة". مجلة أكتا إنفورماتيكا . 4 (1): 1-9 . doi : 10.1007/BF00288933 . S2CID 33019699 . 
  2. مارك دي بيرج ، مارك فان كريفيلد ، مارك أوفرمارس ، وأوتفريد شوارزكوف (2000). الهندسة الحسابية (الطبعة الثانية المنقحة  ). سبرينغر-فيرلاغ . رقم ISBN 3-540-65620-0.{{cite book}}: CS1 maint: multiple names: authors list ( link ) Chapter 14: Quadtrees: pp.  291–306.
  3. سامت، حنان ؛ ويبر، روبرت (يوليو 1985). "تخزين مجموعة من المضلعات باستخدام الأشجار الرباعية" (ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 17 يونيو 2012. تم الاطلاع عليه بتاريخ 23 مارس 2012 .