سؤال

ما هي الطريقة الرسمية لإلقاء نظرة خاطفة على كومة بايثون كما تم إنشاؤها بواسطة libs heapq؟الآن لدي

def heappeak(heap):
  smallest = heappop(heap)
  heappush(heap, smallest)
  return smallest

والتي يمكن القول إنها ليست لطيفة جدًا.هل يمكنني دائما أن أفترض ذلك heap[0] هو الجزء العلوي من الكومة واستخدام ذلك؟أم أن ذلك يفترض الكثير من التنفيذ الأساسي؟

هل كانت مفيدة؟

المحلول

نعم، يمكنك أن تفترض هذا الافتراض، لأنه مذكور في توثيق:

أكوام هي صفائف التي heap[k] <= heap[2*k+1] و heap[k] <= heap[2*k+2] للجميع ك, ، حساب العناصر من الصفر.من أجل المقارنة ، تعتبر العناصر غير الموجودة غير محدودة. الخاصية المثيرة للاهتمام للكومة هي ذلك heap[0] هو دائما أصغر عنصر.

(وربما هذا هو السبب وراء عدم وجود peek وظيفة:ليست هناك حاجة لذلك.)

نصائح أخرى

إذا كنت تستخدم بايثون 2.4 أو أحدث، يمكنك أيضا استخدام heapq.nsmallest ().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top