AIUnlimited
🌳

أسس الذكاء الاصطناعي

🌱
AI Seeds

Start from zero

🌿
AI Sprouts

Build foundations

🌳
AI Branches

Apply in practice

🏕️
AI Canopy

Go deep

🌲
AI Forest

Master AI

🔨

إتقان الذكاء الاصطناعي

✏️
AI Sketch

Start from zero

🪨
AI Chisel

Build foundations

⚒️
AI Craft

Apply in practice

💎
AI Polish

Go deep

🏆
AI Masterpiece

Master AI

📘

تطبيق الذكاء الاصطناعي

📖
فهم النماذج مفتوحة المصدر

أسس وموارد للنماذج مفتوحة المصدر

🎯
من المشكلة إلى مهمة النموذج

تحويل مشاكل الأعمال إلى مهام نموذجية

⚡
تشغيل نموذجك الأول

شاهد نتائجك الأولى في 30 دقيقة

🔧
التحسين الدقيق والتقييم

حسّن النماذج وقيّم الأداء

🚀
أنظمة التطبيقات

بناء تطبيقات ذكاء اصطناعي واقعية

🎨
الذكاء الاصطناعي التوليدي

استكشف نماذج AIGC مفتوحة المصدر

🤖
الوكيل

تعلم أطر عمل الوكيل وأدوات MCP

📐
أسس تكميلية

أساسيات LLM والتقييم

🎓

أكاديمية كلاود

🤖
Claude 101

Learn AI basics with Claude

💻
Claude Code 101

Code with Claude as your pair programmer

🤝
Introduction to Claude Cowork

Collaborate with Claude on complex projects

⚙️
Claude Platform 101

Build apps with the Claude API

المختبر

تم تحميل 7 تجارب
🧬ملعب الشبكة العصبية🤖ذكاء اصطناعي أم إنسان؟🥋دوجو التوجيهات🏁سباق الخوارزميات🧠مسابقة معلومات الذكاء الاصطناعي🏗️لوحة تصميم النظام
🎯مقابلة تجريبيةدخول المختبر→
🚀

التطوير المهني

🚀
منصة انطلاق المقابلات

ابدأ رحلتك

🌟
إتقان المقابلات السلوكية

أتقن المهارات الشخصية

💻
المقابلات التقنية

تفوّق في جولة البرمجة

🤖
مقابلات الذكاء الاصطناعي وتعلم الآلة

إتقان مقابلات تعلم الآلة

🏆
العرض وما بعده

احصل على أفضل عرض

ابدأ الآن
AIUnlimited

رخصة MIT

沪ICP备18025655号-11

تعلّم

  • أساسيات الذكاء الاصطناعي
  • تطبيق الذكاء الاصطناعي
  • أكاديمية كلاود
  • المختبر
  • التطوير المهني

المجتمع

  • عن المنصة
  • الأسئلة الشائعة

الدعم

  • footer.terms
  • footer.privacy
  • footer.contact
البرامج الأكاديمية للذكاء الاصطناعي والهندسة›✏️ AI Sketch›الدروس›الكومة وقوائم الأولوية
⛰️
AI Sketch • متوسط⏱️ 18 دقيقة للقراءة

الكومة وقوائم الأولوية

ما هي الكومة؟

الكومة هي شجرة ثنائية كاملة حيث يفي كل والد بخاصية الكومة - إما أصغر دائمًا (min-heap) أو دائمًا أكبر (max-heap) من أبنائها. "مكتمل" يعني أن كل مستوى ممتلئ باستثناء المستوى الأخير، الذي يتم ملؤه من اليسار إلى اليمين.

       1            Min-heap
      / \
     3   5
    / \
   7   4

ولأنه مكتمل، نقوم بتخزينه في مصفوفة مسطحة - دون الحاجة إلى مؤشرات. بالنسبة للفهرس i: الطفل الأيسر = 2i + 1، الطفل الأيمن = 2i + 2، الأصل = (i - 1) // 2.

مين-هيب مقابل ماكس-هيب

| عقار | مين كومة | ماكس الكومة | |----------|---------|----------| | الجذر | أصغر عنصر | العنصر الأكبر | | الوالدين ≥ الأطفال؟ | ✅ نعم | ❌ لا (≥) | | استخراج يعطي | الحد الأدنى | الحد الأقصى |

بايثون heapq هو min-heap بشكل افتراضي. بالنسبة إلى الكومة القصوى، قم بإلغاء القيم عند الإدراج ونفيها مرة أخرى عند الاستخراج.

إدراج واستخراج - خطوة بخطوة

إدراج - اضغط حتى النهاية، ثم فقاعة لأعلى (قم بالتبديل مع العنصر الرئيسي عندما تكون أصغر):

import heapq
h = [1, 3, 5, 7]
heapq.heappush(h, 2)  # h becomes [1, 2, 5, 7, 3]

استخرج الحد الأدنى - قم بتبديل الجذر بالعنصر الأخير، ثم انتقل إلى العنصر الأخير، ثم غربل (قم بالتبديل مع العنصر الأصغر):

smallest = heapq.heappop(h)  # returns 1

يتم تشغيل كلتا العمليتين في O(log n) لأن ارتفاع الشجرة هو log n.

رسم تخطيطي يوضح إدراج فقاعة لأعلى واستخراج غربلة لأسفل في كومة صغيرة
أدخل الفقاعات لأعلى؛ استخراج دقيقة ينخل.

Heapify - بناء كومة في O(n)

يؤدي استدعاء heapq.heapify(arr) إلى تحويل القائمة إلى كومة في O(n)، وليس O(n log n). إنه يعمل من الأسفل إلى الأعلى، ويغربل كل عقدة غير ورقية. هذه واحدة من نتائج التعقيد الأكثر إثارة للدهشة في علوم الكمبيوتر.

الدرس 6 من 100٪ مكتمل
←الأشجار والرسوم البيانية مرئياً

مناقشة

تسجيل الدخول للانضمام إلى النقاش

في المكان
🤯
بناء الكومة هو O(n)، وليس O(n log n). تقع معظم العقد بالقرب من القاع وبالكاد تحتاج إلى التدقيق - فالرياضيات تعمل وفقًا للوقت الخطي.

تجريد قائمة الانتظار ذات الأولوية

تتيح لك قائمة الانتظار ذات الأولوية الوصول دائمًا إلى العنصر ذي الأولوية الأعلى أولاً. الأكوام هي طريقة التنفيذ لأن كلاً من الإدراج والاستخراج هما O(log n). استخدم واحدة في أي وقت تحتاج إليه "أعطني أفضل عنصر حتى الآن".

النمط: مشاكل Top-K

"ابحث عن أكبر عناصر K في مصفوفة غير مصنفة."

احتفظ بـ حد أدنى من الكومة بحجم K. لكل عنصر، ادفعه؛ إذا تجاوزت الكومة K، فقم بإخراج الأصغر. ما تبقى هو K الأكبر.

import heapq
def top_k(nums, k):
    return heapq.nlargest(k, nums)

الوقت: O(n log k) - أفضل بكثير من الفرز عند k ≪ n.

🧠فحص سريع

أنت بحاجة إلى أكبر 5 نتائج من بين مليون إدخال. ما نوع وحجم الكومة؟

النمط: دمج قوائم مرتبة K

ادفع رأس كل قائمة إلى كومة صغيرة. افتح العنصر الأصغر، ثم ادفع العنصر التالي من نفس القائمة. كرر حتى يتم استنفاد جميع القوائم. الوقت: O(N log K) حيث N هو إجمالي العناصر.

النمط: الوسيط من دفق البيانات

احتفظ بكومتين: الكومة القصوى للنصف السفلي والكومة الدنيا للنصف العلوي. قم بموازنة أحجامها بحيث تختلف بمقدار 1 على الأكثر. يكون الوسيط دائمًا عند أحد الجذرين أو كليهما.

Lower half (max-heap): [1, 2, 3]  ← max = 3
Upper half (min-heap): [4, 5, 6]  ← min = 4
Median = (3 + 4) / 2 = 3.5
🧠فحص سريع

في النهج الوسيط ثنائي الكومة، أين يذهب العنصر الجديد أولاً؟

مشاكل الجدولة

تتألق الأكوام في الجدولة: غرف الاجتماعات (تتبع أقرب وقت للانتهاء)، أو جدولة المهام من خلال فترات التباطؤ، أو قوائم انتظار مهام وحدة المعالجة المركزية. الفكرة الأساسية هي أن الكومة تتعقب بكفاءة "ما سينتهي بعد ذلك".

🤔
Think about it:إذا كنت بحاجة إلى الحد الأدنى والحد الأقصى بكفاءة، فلن تكون كومة واحدة كافية. ما هي تركيبة بنية البيانات التي ستستخدمها؟

متى يجب استخدام الكومة مقابل المصفوفة المصنفة مقابل BST

| بحاجة | الخيار الأفضل | لماذا | |------|------------|-----| | تكرار استخراج الحد الأدنى / الأقصى | كومة | O(log n) إدراج + استخراج | | بيانات ثابتة، فرز لمرة واحدة | مصفوفة مرتبة | O(n log n) مرة واحدة، O(1) الوصول | | استعلامات النطاق + إحصائيات الطلب | BST المتوازن | O(log n) لكل شيء | | توب-ك من تيار | كومة الحجم K | O(ن سجل ك) المجموع |

🧠فحص سريع

ما هي العملية التي تكون O(1) في الكومة الدقيقة؟

ورقة الغش التعقيد

| عملية | الوقت | |-----------|------| | أدخل | يا(سجل ن) | | استخراج الحد الأدنى/الحد الأقصى | يا(سجل ن) | | نظرة خاطفة دقيقة / ماكس | يا(1) | | هيابيفي | يا(ن) | | Top-K من العناصر n | يا(ن سجل ك) |

🤔
Think about it:لماذا لا يمكنك إجراء بحث ثنائي على الكومة بالرغم من تخزينها في مصفوفة؟ فكر في الترتيب الذي تضمنه خاصية الكومة فعليًا.

📚 مزيد من القراءة

  • NeetCode - الكومة / قائمة انتظار الأولوية - خريطة طريق المشكلة المرئية مع مشاكل الكومة المجمعة
  • دليل المقابلة التقنية - Heap - أنماط ونصائح موجزة
  • Python heapq docs - مرجع الوحدة الرسمي مع الأمثلة