مرجع
آخر الزيارات

رتل اولوية

541 كلمة•0 مشاهدة•🗒️ منذ 20 ساعة
باختصار: في علوم الكمبيوتر، قائمة الانتظار ذات الأولوية بالانجليزية Priority Queue هي نوع بيانات تجريدي يشبه قائمة الانتظار العادية أو بنية البيانات المكدسة. تتناول المقالة 7 أقسام، منها «{»، «{» و«}».
المحتويات
  1. {
  2. {
  3. }
  4. {
  5. العمليات على الرتل
  6. تحقيق الخوارزمية
  7. }

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

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

{

  • list.insert_at_index(node,index)
  • break
  • }
  • }
  • }
  • pull

{

  • list.append(node)
  • }
  • pull
  • {
  • highest = list.get_first_element
  • foreach node in list
  • {
  • if highest.priority < node.priority
  • {
  • highest = node
  • }

}

return highest

list.remove(highest)

{

  • highest = list.get_at_index(list.length-1)
  • list.remove(highest)
  • return highest

العمليات على الرتل

وفي هذا السياق، فضلًا عن ذلك، فإن peek (في هذا السياق يُطلق عليه غالبًا find-max أو find-min ) ، والذي يُرجع العنصر ذو الأولوية الأعلى ولكنه لا يعدل قائمة الانتظار، يتم تنفيذه بشكل متكرر جدًا، ويتم تنفيذه دائمًا على وجه التقريب في وقت O (1) . تعد هذه العملية وأدائها O (1) أمرًا بالغ الأهمية للعديد من تطبيقات قوائم الانتظار ذات الأولوية.

كذلك، قد تدعم التطبيقات الأكثر تقدمًا عمليات أكثر تعقيدًا، مثل pull_lowest_priority_element ، وفحص العناصر القليلة الأولى ذات الأولوية الأعلى أو الأدنى، ومسح قائمة الانتظار، ومسح مجموعات فرعية من قائمة الانتظار، وإجراء إدراج دفعي، ودمج طابورتين أو أكثر في قائمة انتظار واحدة، وزيادة الأولوية من أي عنصر الخ

علاوةً على ذلك، يُعرف هذا كذلك باسم " pop_element(Off) " أو " get_maximum_element " أو " get_front(most)_element ".

وفي هذا السياق، تعكس بعض الاتفاقيات ترتيب الأولويات، معتبرا القيم الأقل أولوية أعلى، لذلك قد يُعرف هذا كذلك باسم " get_minimum_element "، وغالبًا ما يشار إليه باسم " get-min " في الأدبيات.

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

  • يجب أن تدعم قائمة الانتظار ذات الأولوية العمليات التالية على الأقل:
  • is_empty : تحقق مما إذا كانت قائمة الانتظار لا تحتوي على عناصر.
  • Insert_with_priority : إضافة عنصر إلى قائمة الانتظار ذات الأولوية المرتبطة به.

في هذا الإطار، قد يتم تحديد ذلك بدلاً من ذلك كوظيفتين منفصلتين " peek_at_highest_priority_element " و" delete_element "، واللتين يمكن دمجهما لإنتاج " pull_highest_priority_element "

وفي السياق ذاته، pull_highest_priority_element : إزالة العنصر الذي له الأولوية القصوى من قائمة الانتظار وإعادته.

تحقيق الخوارزمية

insert(node)

كذلك، مثلًا، يمكن للمرء الاحتفاظ بجميع العناصر في قائمة غير مصنفة ( O (1) وقت الإدراج). عندما يتم طلب العنصر ذو الأولوية القصوى، ابحث في جميع العناصر عن العنصر ذو الأولوية الأعلى. ( O ( ن ) وقت السحب)،

من جانب آخر، هنالك مجموعة متنوعة من الطرق البسيطة، وغير الفعالة عادةً، لتنفيذ قائمة الانتظار ذات الأولوية. أنها توفر تشبيهًا لمساعدة الشخص على فهم ماهية قائمة الانتظار ذات الأولوية.

}

  • insert(node)
  • {insert (node
  • foreach (index, element) in list
  • {
  • if node.priority < element.priority

ما رأيك في هذه المقالة؟

📝 هل في هذه المقالة خطأ؟

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