اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

مرحبًا،

أول مصطلح و هو segment tree، بشكل عام تعتبر من أنواع الأشجار و هي بنى معطيات تستعمل لتخزين البيانات بحيث يمكن القيام بعمليات التعديل و البحث على مجالات من هذه البيانات بشكل سريع.

أي مثلًا لنفترض أنه لديك مصفوفة تحتوي على قيم ما، و تريد تحديث كافة عناصر المصفوفة ضمن المجال i, j إلى قيمة معينة. الطريقة البسيطة هي عبارة عن المرور بشكل خطي (أي عنصر عنصر) على البيانات و تحديث كل منها. بينما في ال segment tree يتم استعمال العقد الأب التي تحتوي على المجال كاملًا أو جزء منه لتحديث البيانات، و يمكن اثبات أن عدد هذه الأجزاء هو صغير جدًا لذلك فهي تعطي أداء سريع.

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

يمكن الإطلاع على هذا المقال في حال أردت معرفة المزيد: https://cp-algorithms.com/data_structures/segment_tree.html

أما بالنسبة لل dynamic programming فهي عبارة عن تقنية و ليس خوارزمية، حيث أن الخوارزمية خطواتها محددة بينها هنا لدينا آلية عمل عامة و تختلف الخوارزمية المطبقة باختلاف التطبيق. بشكل عام تستعمل هذه التقنية عندما يكون حساب قيم ما هو عبارة عن تابع على قيم سابقة.

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

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

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

تحياتي.

  • 0
نشر

في البداية كلاهما مختلفان،  Segment Tree تلك خوارزمية بينما Dynamic Programming هي تقنية أو مفهوم في لغات االبرمجة.

أولاً شجرة المقطع أو Segment Tree عبارة عن بنية بيانات لتخزين المعلومات حول الفواصل الزمنية أو الأجزاء، مما يسمح بالاستعلام وتحديث الفواصل الزمنية بكفاءة.

وتعمل بالآلية التالية، أولاً البناء وبه يتم بناء شجرة المقطع لتخزين قيم مصفوفة معينة في شكل شجرة ثنائية، كل عقدة في الشجرة تمثل فاصل زمني معين من المصفوفة.

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

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

أداء الخوارزمية:

  •  بناء شجرة المقطع في زمن (O(n \log n)).
  •  تنفيذ الاستعلام في زمن (O(\log n)).
  •  تنفيذ التحديث في زمن (O(\log n)).

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

تخيل أنك أنت بحاجة إلى حساب عدد الكتب الموجودة في مجموعة معينة من الأرفف بسرعة، فكم عدد الكتب الموجودة بين الرف رقم 10 والرف رقم 20؟

بنفس الآلية التي شرحناها نقوم بالتالي:

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

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

أي هي الغرض منها حل المشاكل المعقدة عن طريق تقسيمها إلى مشاكل أصغر وحلها تدريجيًا

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

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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...