تقنية

كومة بايثون: الأصغر أولًا لا يعني قائمة مرتبة

شجرة الكومة وقائمتها
الأب لا يزيد على أبنائه. [1]

الكومة الصغرى تضع الأصغر في h[0]. [1]

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

اختبر الأب وأبناءه، واستخرج بواسطة heappop للحصول على ترتيب تصاعدي. [1]

  • الأب لا يزيد على أبنائه الموجودين؛ الفهارس تبدأ بالصفر. [1]
  • [1,3,2,7,4,5] كومة صحيحة؛ لكن 3 تسبق 2. [1]
  • heapify يبني الكومة في القائمة نفسها؛ لا يفرزها. [1]
  • استخرج من نسخة؛ heappop يحذف الأصغر، وpop() العادي يحذف الأخير. [1] [2]
  • أعداد صحيحة؛ نتوقف عند فراغ النسخة؛ heappop الفارغ يرفع IndexError؛ دون قياس سرعة. [1] [2]

افحص علاقة الأب بالابن

للأب عند k، الابنان عند 2*k+1 و2*k+2 إذا وُجدا. [1]

الرسم يحقق الشرط؛ لا يلزم ترتيب الأخوين 3 و2. [1]

استخرج من نسخة

نسخنا القائمة لحفظ الأصل؛ نضيف كل قيمة مستخرجة إلى الناتج. [2]

الاستخراج التصاعدي والنسخة الفارغة
الناتج لا يساوي ترتيب القائمة. [1]
import heapq
h = [1, 3, 2, 7, 4, 5]
heapq.heapify(h)
work = h.copy()
result = []
while work:
    result.append(heapq.heappop(work))

[1] [2]

الناتج [1,2,3,4,5,7]؛ النسخة فارغة والأصل باقٍ. [1] [2]

فرق الحذف

على نسخة من كومتنا، pop() يعطي 5؛ heappop يعطي 1 ويحافظ على شرط الكومة. [1] [2]

heappop على الفارغ يرفع IndexError؛ شرط الحلقة يمنع ذلك هنا. [1]

المراجع

  1. Python: الكومة الصغرى
  2. Python: طرق القائمة
  3. موضوع تك: تطبيقات بايثون — مفردات
  4. موضوع تك: لغة بايثون — مفردات

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