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 الكامل بالعربي.