الدرس 13: Heaps و top-K
تخيّل غرفة طوارئ في مستشفى: لا يُعالَج المرضى حسب ترتيب الوصول، بل حسب مدى الإلحاح. البنية التي تفعل هذا بالضبط تُسمى 'heap' (الكومة) — طابور أولويات يمنح دائمًا وصولًا سريعًا إلى العنصر المتطرف (الأصغر أو الأكبر). في Python: heapq، مع إدراج/إزالة بتكلفة O(log n). إنها الأداة الطبيعية لمسائل 'top-K'
الـ heap مثل طابور في مستشفى يسحب دائمًا المريض الأكثر إلحاحًا التالي. في heapq الخاص بـ Python، 'الأكثر إلحاحًا' هو ببساطة العدد الأصغر.
- الكومة (heap)
- بنية بيانات (طابور أولويات) تتيح push و pop بتكلفة O(log n)، و peek للعنصر المتطرف (الأصغر/الأكبر) بتكلفة O(1).
- كومة صغرى (min-heap)
- كومة يكون فيها العنصر الأصغر دائمًا في الجذر؛ heapq الخاص بـ Python هو كومة صغرى، و heappop يعيد الحد الأدنى.
- top-K
- إيجاد الـ K الأكبر (أو الأصغر) من العناصر. يمكن فعل ذلك بتكلفة O(n log K) باستخدام كومة بحجم K، أسرع من الفرز الكامل.