تقنية

heapq في بايثون: أيهما يبقي العدد الجديد الأصغر؟

إرجاع الواحد وبقاء ثلاثة وخمسة وسبعة
إضافة ثم استخراج. [1] [2]

نقارن عمليتين على كومتين متطابقتين. [1] [2]

الخلاصة السريعة

heapreplace يبقي العدد الجديد 1 هنا؛ heappushpop يعيده. [1] [2]

  • نبدأ كل مرة بكومة [3,5,7] وندخل 1. [1] [2]
  • heappushpop يعيد 1؛ الباقي 3,5,7. [1] [2]
  • heapreplace يعيد 3؛ الباقي 1,5,7. [1] [2]
  • sorted يعرض الباقي مرتبًا؛ طول كل كومة يبقى ثلاثة. [1] [2]
  • اختبرنا أعدادًا صحيحة في 3.12.14؛ لا نقيس السرعة. [1] [2]

المثال

import heapq as q
for f in (q.heappushpop,q.heapreplace):
 h=[3,5,7]
 print(f(h,1))
 print(sorted(h))

[1] [2]

لماذا يختلف الباقي؟

العدد هنا أصغر من الجذر القديم. heappushpop يضيف ثم يستخرج الأصغر؛ لذلك يخرج العدد الجديد. heapreplace يستخرج الأصغر الموجود ثم يضيف الجديد؛ لذلك يخرج 3 ويبقى 1. [1] [2]

إرجاع الثلاثة وبقاء الواحد وخمسة وسبعة
استخراج ثم إضافة. [1] [2]

حدود المقارنة

ننشئ قائمة جديدة لكل عملية. sorted لا يغير الكومة. إذا كان المدخل 8، تعيد العمليتان 3 ويكون الباقي 5,7,8. على كومة فارغة، يعيد heappushpop المدخل ويبقيها فارغة، بينما يرفع heapreplace خطأ IndexError. [1] [2]

المراجع

  1. Python 3.12: heapq
  2. CPython 3.12.14: _heapqmodule.c
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

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