تخطَّ إلى المحتوى

O(n²)

زمن تربيعي O(n²)

O(n²) يعني أن الوقت يتناسب مع مربّع حجم البيانات — حلقة متداخلة داخل حلقة أخرى على نفس البيانات، بطيئة جدًا مع بيانات كبيرة.

المثال القياسي: خوارزميات الترتيب الساذجة (Bubble/Selection/Insertion Sort) بأسوأ حالاتها، أو أي حلقتين متداخلتين تمرّان على نفس المصفوفة (مقارنة كل عنصر بكل عنصر آخر).

الصياغة

for i in arr:
    for j in arr:  # حلقة داخل حلقة على نفس البيانات = O(n²)
        # مقارنة أو عملية

📄 مثال

def has_duplicate_naive(arr):
    for i in range(len(arr)):
        for j in range(len(arr)):  # O(n²) — مقارنة كل زوج
            if i != j and arr[i] == arr[j]:
                return True
    return False

# نفس المسألة بـ set تصبح O(n) — راجع جداول التجزئة

💡 نصائح عملية

  • لو رأيت حلقتين متداخلتين تمرّان على نفس حجم البيانات، اسأل نفسك دائمًا: هل يوجد حل O(n) أو O(n log n) بدلًا منه (غالبًا عبر hash table أو ترتيب مسبق)؟

⚠️ أخطاء شائعة

  • استخدام حلقتين متداخلتين لمسائل «هل يوجد تكرار» أو «هل يوجد زوج مجموعه X» بدل استخدام hash table لحل O(n)

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار DSA الكامل بالعربي.