فهم Time و Space Complexity للمبرمجين بسهولة

x32x01
  • بواسطة x32x01 ||
إزاي تفهم الـ Time و الـ Space Complexity بأسهل شكل ممكن؟ 🤔
بص بقى…
لو إنت بدأت برمجة أو حتى شغال بقالك فترة، أكيد صادفت مصطلحات زي:
  • Time Complexity
  • Space Complexity
  • Big O Notation

وفي الغالب حسّيت إن الموضوع كبير كده أو نظري ومعقد 💀
بس الصراحة… الموضوع أسهل بكتير جدًا من اللي بيتقال.

تعالى نفهمهم ببساطة ومن غير تعقيد 👇



يعني إيه Time Complexity؟ ⏳

Time Complexity ببساطة هو مقياس بيقول لنا:
الكود ده بياخد وقت قد إيه لما حجم البيانات يكبر؟

يعني لو انت كتبت كود يشتغل على Array فيها 10 عناصر
هل لو الـ Array بقت 100؟ 1000؟ مليون؟
الوقت هيفرق قد إيه؟ 🤯

بدل ما نقعد نقيس الثواني والميلي ثانية اللي بتختلف من جهاز لجهاز
إحنا بنستخدم مقياس ثابت اسمه Big O Notation.



أشهر قيم الـ Big O اللي هتقابلها دايمًا 📊

الرمزالمعنىالمثال
O(1)وقت ثابتقراءة عنصر من Array بالمؤشر
O(n)الوقت بيزيد خطيًاحلقة for بتمر على كل عنصر
O(n²)الوقت بيزيد أسرع جدًاحلقة جوا حلقة
O(log n)وقت سريع جدًا نسبيًاBinary Search

تعالى نشوف أمثلة 🔥


مثال O(1)​

Python:
arr = [10, 20, 30, 40]
print(arr[2])  # الوصول مباشرة للعنصر رقم 2
هنا الوصول للعنصر بياخد نفس الوقت مهما كان حجم الـ Array.



مثال O(n)

Python:
arr = [5, 9, 2, 7]
for x in arr:
    print(x)
هنا الوقت بيعتمد على عدد العناصر.

لو 4 عناصر يطبع 4
لو 1000 هيمر على 1000 عنصر
وده اللي بنسميه Linear Time.



مثال O(n²)​

Python:
arr = [1, 2, 3]
for i in arr:
    for j in arr:
        print(i, j)
حلقة جوا حلقة = الكود بيتضاعف مع كل عنصر
وده أكتر حاجة بتبطّل الأداء…
وده اللي بنحاول نتجنبه دايمًا 😅



طب دلوقتي يعني نعمل إيه؟ 🤷‍♂️

الهدف إنك تحاول دايمًا تبعد عن الأكواد اللي الـ Complexity بتاعها عالي
خصوصًا O(n²) و O(n³).

كل ما كان الكود أسرع في التعامل مع البيانات الكبيرة = أداء أحسن = مشروع محترم 💪🔥



نيجي بقى لـ Space Complexity 💾

زي ما بنسأل:
الكود بياخد وقت قد إيه؟

بنفس الشكل بنسأل:
الكود بياخد ذاكرة (RAM) قد إيه؟
ده بقى اللي بنسميه Space Complexity.



ليه الموضوع ده مهم؟ 🤨

تخيل إن الكود سريع جدًا (Time كويس)،
لكنه محتاج ذاكرة 8 جيجا عشان يشتغل 🤯
طب لو الجهاز اللي عليه 4 جيجا؟
الكود مش هيشتغل أصلاً 🧨

فلازم نعمل توازن بين السرعة والذاكرة.



أنواع Space Complexity الشائعة 🧠

الرمزالمعنىالمثال
O(1)الكود بياخد نفس الذاكرة مهما كبر الحجممتغير واحد فقط
O(n)الذاكرة بتزيد على قد حجم البياناتArray أو List جديدة بنفس الحجم
O(n²)لما تعمل Arrays داخل ArraysMatrix أو جدول بيانات ضخم

مثال O(1)​

Python:
def print_first(arr):
    print(arr[0])
هنا بنستخدم بس متغير واحد → ذاكرة ثابتة.



مثال O(n)

Python:
arr = [1, 2, 3, 4]
copy_arr = arr[:]  # عمل نسخة اخرى
هنا الذاكرة بتزيد على قد حجم البيانات.



طيب إزاي نختار الأفضل؟ ⚖️

دايمًا الموضوع عبارة عن Trade-off:
  • لو ركزت على السرعة قوي → ممكن تستهلك RAM كبيرة.
  • لو ركزت تقلل الذاكرة → ممكن السرعة تقل.
المطلوب = توازن.



مثال مهم جدًا يقرب الموضوع 📌

عندك Array من أرقام وعايز تجيب أكبر قيمة.

الطريقة الأولى:​

تمر على العناصر واحد واحد.
Python:
max_value = arr[0]
for x in arr:
    if x > max_value:
        max_value = x
  • Time → O(n)
  • Space → O(1)
    ✅ سريع
    ✅ بياخد قليل ذاكرة
    ممتاز جدًا.



الطريقة الثانية:​

تعمل Sort للأرقام وتاخد آخر عنصر.
Python:
arr.sort()
print(arr[-1])
  • Time → O(n log n) (البحث أسرع؟ لأ، الترتيب أبطأ)
  • Space → ممكن O(n) لو الـ Sort بيعمل نسخة داخلية
    ❌ أبطأ
    ❌ بياخد ذاكرة أكتر
إذن الطريقة الأولى هي الأفضل.



تشبيه بسيط يلمّ الموضوع كله 🚗

تخيل إنك سايق عربية:
  • Time Complexity = عداد السرعة
  • Space Complexity = عداد البنزين

لو فضلت تجري بسرعة جدًا → هتستهلك بنزين بسرعة
ولو وفرت بنزين على الآخر → مش هتوصل بدري

الحل؟
تسوق بعقل ✨
توازن بين الاتنين.



الخلاصة ✅

  • Time Complexity بيقولك الكود بياخد وقت قد إيه لما البيانات تكبر.
  • Space Complexity بيقولك الكود بيستهلك ذاكرة قد إيه.
  • الهدف دايمًا = أسرع أداء بأقل ذاكرة ممكنة.

ولو فهمت الاتنين دول كويس…
إنت كده محطوط على أول خطوة صح إنك تبقى مبرمج قوي 💪🔥
 
المواضيع ذات الصلة
x32x01
الردود
0
المشاهدات
555
x32x01
x32x01
x32x01
الردود
0
المشاهدات
477
x32x01
x32x01
x32x01
الردود
0
المشاهدات
661
x32x01
x32x01
x32x01
الردود
0
المشاهدات
504
x32x01
x32x01
x32x01
الردود
0
المشاهدات
503
x32x01
x32x01
x32x01
الردود
0
المشاهدات
17
x32x01
x32x01
x32x01
الردود
0
المشاهدات
32
x32x01
x32x01
x32x01
الردود
0
المشاهدات
530
x32x01
x32x01
x32x01
الردود
1
المشاهدات
535
x32x01
x32x01
x32x01
الردود
0
المشاهدات
19
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
1,978
المشاركات
2,178
أعضاء أكتب كود
479
أخر عضو
as6318380@gmail
عودة
أعلى