هیپ (Heap)

هیپ Min و Max: قاعده هیپ، heapify، صف اولویت‌دار و ماژول heapq پایتون

هیپ چیست؟

هیپ (Heap) درخت دودویی تام (Complete)ی است با قاعده:

توجه: هیپ مرتب‌سازی کامل نیست! فقط تضمین می‌کند ریشه، extreme باشد.

هیپ با آرایه

چون هیپ درخت تام است، می‌توان آن را در آرایه ذخیره کرد (بدون اشاره‌گر!):

برای گره در اندیس i:
- والد:        (i - 1) // 2
- فرزند چپ:    2i + 1
- فرزند راست:  2i + 2

عملیات و پیچیدگی‌ها

عملیاتپیچیدگیتوضیح
پیدا کردن min/maxO(1)همیشه ریشه!
درج (push)O(log n)اضافه به انتها + sift-up
حذف ریشه (pop)O(log n)آخرین به ریشه + sift-down
ساخت هیپ از آرایهO(n)heapify — از پایین به بالا

sift-up و sift-down

صف اولویت‌دار (Priority Queue)

مهم‌ترین کاربرد هیپ: صفی که عنصر با بالاترین اولویت اول خارج می‌شود (نه ترتیب ورود!). مثال‌ها:

heapq در پایتون

ماژول heapq هیپ مین را روی list پیاده‌سازی می‌کند:

import heapq
heap = []
heapq.heappush(heap, 5)        # درج O(log n)
smallest = heapq.heappop(heap) # حذف کوچک‌ترین O(log n)

برای Max-Heap، مقادیر را منفی کنید یا از heapq.nlargest استفاده کنید.

نکته: اگر فقط «بزرگ‌ترین/کوچک‌ترین» می‌خواهید، هیپ بهترین است؛ اگر «همه داده مرتب» می‌خواهید، مرتب‌سازی یا BST.

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل ساختار داده و الگوریتم است.

ابزارهای مرتبط