سؤال
ما هي الطريقة الرسمية لإلقاء نظرة خاطفة على كومة بايثون كما تم إنشاؤها بواسطة 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 ().
لا تنتمي إلى StackOverflow