طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 101 · تركيب البيانات والخوارزميات

🧪 التدريبات

كل تمرين «جرّب بنفسك» في مكان واحد: اقرأ المطلوب، ثم اكتب الحل وشغّله داخل صفحة الدرس.

الوحدة 1: مقدمة في تراكيب البيانات والخوارزميات

أعلى درجة وموقعهاسهل · الدرس 1: ما تراكيب البيانات والخوارزميات؟
لديك قائمة درجات. اكتب خوارزمية بنفسك (دون max) تجد أعلى درجة وموقعها في القائمة، وعدد المقارنات التي احتجتها.
←
زر الرجوع في المتصفحسهل · الدرس 2: جولة في أشهر تراكيب البيانات
المستخدم زار الصفحات بالترتيب: الرئيسية، المنتجات، القهوة، السلة، ثم ضغط زر الرجوع مرتين. استخدم مكدسًا لتعرف الصفحة الحالية.
←

الوحدة 2: تحليل وتقييم الخوارزميات

عدد مرات الظهور مع اختباراتمتوسط · الدرس 3: كتابة الخوارزمية والتحقق من صحتها
اكتب دالة count_of(a, x) تُرجع عدد مرات ظهور x في القائمة a دون استخدام a.count، ثم اختبرها بالحالات الحدّية.
←
حلّل البحث الخطيمتوسط · الدرس 4: الحالة الأفضل والأسوأ والمتوسطة
قائمة فيها 8 أسماء. احسب عدد مقارنات البحث الخطي عن كل اسم، وعن اسم غير موجود، ثم اطبع الأفضل والأسوأ والمتوسط (للأسماء الموجودة).
←

الوحدة 3: تصميم وتنفيذ خوارزميات فعّالة

عدّ الأرقام بالعوديةمتوسط · الدرس 5: العودية
اكتب دالة عودية digits(n) تُرجع عدد أرقام العدد الصحيح الموجب n، دون تحويله إلى نص.
←
عدّاد خطوات البحث الثنائيمتوسط · الدرس 6: فرّق تسُد: البحث الثنائي
عدّل البحث الثنائي ليُرجع الموقع وعدد المقارنات معًا، ثم ابحث في الأعداد الزوجية من 2 إلى 2000.
←
دمج قائمتي درجاتمتوسط · الدرس 7: الترتيب بالدمج والترتيب السريع
لديك درجات شعبتين، كل منهما مرتبة تصاعديًّا. ادمجهما في قائمة واحدة مرتبة دون sorted، واطبع أعلى 3 درجات.
←

الوحدة 4: مقدمة في تحليل كفاءة الخوارزميات

عدّ العمليات بدل الساعةمتوسط · الدرس 8: قياس الزمن والذاكرة فعليًّا
بدل قياس الزمن، عدّ عمليات المقارنة في دالة «كل زوج» لأحجام مختلفة، ولاحظ النسبة حين يتضاعف n.
←

الوحدة 5: تحليل الأداء الزمني للخوارزميات

صنّف الدوالمتوسط · الدرس 9: ترميز O الكبير
لكل دالة من الثلاث: عدّ عملياتها بعدّاد لـ n = 8 و n = 16، واطبع النسبة بين العددين، ثم اطبع تعقيدها.
←
اكشف O(n²) المخفية وأصلحهامتقدم · الدرس 10: تعقيد الحلقات والتعقيد اللوغاريتمي
الدالة common تجد العناصر المشتركة بين قائمتين، لكنها O(n²). أعد كتابتها لتكون O(n)، وتأكد أن الناتج نفسه.
←

الوحدة 6: تحليل الأداء المساحي للخوارزميات

تدوير القائمة في المكانمتقدم · الدرس 11: التعقيد المساحي
دوّر القائمة خطوة واحدة إلى اليمين (الأخير يصبح الأول) داخل القائمة نفسها، دون إنشاء قائمة جديدة ودون insert.
←

الوحدة 7: اختيار تركيب بيانات لحل مشكلة

مصفوفة ديناميكية بنفسكمتقدم · الدرس 12: القوائم وكلفة عملياتها
ابنِ مصفوفة ديناميكية بسيطة: سعة تبدأ بـ 2، وتتضاعف حين تمتلئ. أضف 10 عناصر، واطبع السعة كلما تغيرت، وعدد عمليات النسخ الكلية.
←
اقلب القائمة المترابطةمتقدم · الدرس 13: القائمة المترابطة
أضف إلى LinkedList دالة reverse تقلب القائمة في المكان بتغيير المؤشرات فقط، دون إنشاء عقد جديدة.
←
فاحص الأقواسمتوسط · الدرس 14: المكدس والطابور
اكتب دالة balanced(text) تتحقق من توازن الأقواس الثلاثة () و [] و {} في النص، وتتجاهل أي حرف آخر.
←
أول حرف لا يتكررمتوسط · الدرس 15: القاموس والمجموعة: جداول التجزئة
اكتب دالة first_unique(text) تُرجع أول حرف لا يتكرر في النص، أو None إن لم يوجد، بتعقيد O(n): مرور للعدّ ثم مرور للبحث.
←
أصغر وأكبر وعدد العقدمتوسط · الدرس 16: شجرة البحث الثنائية
أضف إلى كود الشجرة ثلاث دوال: smallest(node) و largest(node) بحلقة، و count(node) بالعودية.
←
أقرب جار لكل مدينةمتوسط · الدرس 17: الرسوم البيانية وتمثيلها
ابنِ قائمة الجوار للخريطة، ثم اطبع لكل مدينة أقرب مدينة مجاورة لها والمسافة، بترتيب أبجدي للمدن.
←

الوحدة 8: اختيار خوارزمية للحل

ترتيب بمعيارينمتوسط · الدرس 18: مقارنة خوارزميات الترتيب
رتّب المنتجات: الأقل سعرًا أولًا، وعند تساوي السعر الأكثر تقييمًا أولًا، باستخدام sorted ومفتاح واحد.
←
كم مدينة على بعد محطتين؟متوسط · الدرس 19: البحث في الرسوم: BFS و DFS
عدّل BFS ليحسب المسافة (بعدد الطرق) من المدينة إلى كل مدينة، ثم اطبع المدن على كل مسافة.
←

الوحدة 9: تطبيق تحسينات على الحلول

أطول سلسلة بلا تكرارمتقدم · الدرس 20: من O(n²) إلى O(n)
أطول جزء متصل من سلسلة طلبات العملاء لا يتكرر فيه عميل. اكتب حلًّا O(n) بنافذة منزلقة وقاموس آخر موقع.
←
مسارات الشبكةمتقدم · الدرس 21: التخزين المؤقت والبرمجة الديناميكية
روبوت في الزاوية العليا اليسرى من شبكة 4 × 6 يتحرك يمينًا أو أسفل فقط. كم طريقًا إلى الزاوية السفلى اليمنى؟ حلها بجدول البرمجة الديناميكية.
←

الوحدة 10: تحليل وفهم المشكلات التطبيقية

حلّل ثم حل: الأكثر طلبًامتوسط · الدرس 22: تحليل المشكلة قبل الحل
سجل طلبات يومي فيه أسماء الأصناف. المطلوب أكثر 3 أصناف طلبًا مع عددها. الحجم المتوقع مليون طلب، فالحل يجب ألا يكون O(n²). اكتب في أول الكود تعليقات التحليل: المدخل، والمخرج، والتعقيد.
←

الوحدة 11: اختيار وتطبيق الحلول المناسبة

أسرع 3 متسابقين أثناء السباقمتوسط · الدرس 23: طابور الأولوية heapq
نتائج سباق تصل واحدة واحدة (الاسم، الزمن بالثواني). احتفظ بكومة كبرى حجمها 3 لأسرع ثلاثة دون ترتيب كل النتائج، ثم اطبعهم من الأسرع.
←
أقصر طريق من ينبعمتقدم · الدرس 24: الخوارزميات الجشعة وأقصر مسار
استخدم دايكسترا لحساب أقصر مسافة من ينبع إلى الطائف، واطبع المسافة والمسار.
←

الوحدة 12: حلول تطبيقية لمشكلات واقعية

تقرير الأحياء والمسافاتمتقدم · الدرس 25: دراسة حالة: نظام توصيل
أضف إلى النظام تقريرًا: عدد الطلبات في كل حي، ومجموع الكيلومترات إن وُصّل كل طلب في رحلة مستقلة ذهابًا وإيابًا.
←
طابور بقائمة مترابطةمتقدم · الدرس 26: المشروع الختامي
استخدم القائمة المترابطة لبناء طابور: enqueue بالإضافة في الذيل، و dequeue بالحذف من الرأس، ثم حاكِ طابور 5 عملاء يُخدم منهم 3.
←