📋 المحتوى المنظم
📖 محتوى تعليمي مفصّل
3
نوع: QUESTION
3 أَنشِئْ خوارزمية حل جشعة لتحسين مشكلة تكوين أعضاء فريق، من خلال إكمال المقطع البرمجي التالي بحيث تستخدم خوارزمية الحل الاستدلالية الجشعة لتكليف أعضاء الفريق بالمهمة:
نوع: محتوى تعليمي
def greedy_solver(problem):
worker_skills=problem['worker_skills'] # worker skills for this problem
required_skills=problem['required_skills'] # required skills for this problem
uncovered_required_skills = required_skills.__________ () # skills not covered
best_team=[] # best solution
uncovered_worker_skills={}
for worker_id in worker_skills:
uncovered_worker_skills[worker_id]=worker_skills[worker_id].__________ (uncovered_required_skills)
while len(uncovered_required_skills) > 0:
best_worker_id=__________ # the best worker to add next
best_new_coverage=0 # number of uncovered required skills covered by the best worker
for worker_id in uncovered_worker_skills: # for each worker
my_uncovered_skills=uncovered_worker_skills[worker_id]
# if this worker can cover more uncovered required skills than the best worker so far
if len(my_uncovered_skills)>best_new_coverage:
best_worker_id=worker_id # makes this worker the best worker
best_new_coverage=__________ (my_uncovered_skills)
if best_worker_id!=__________ : # if a best worker was found
best_team.__________ (best_worker_id) # adds the worker to the solution
#removes the best worker's skills from the skills to be covered
uncovered_required_skills=uncovered_required_skills - uncovered_worker_skills[best_worker_id]
for worker_id in uncovered_worker_skills: # for each worker
# remembers only the required uncovered skills that this worker has
uncovered_worker_skills[worker_id]=uncovered_worker_skills[worker_id].__________ (uncovered_required_skills)
else: # no best worker has been found and some required skills are still uncovered
return __________ # no solution could be found
return best_team
نوع: METADATA
وزارة التعليم
Ministry of Education
265
2023 - 1447
📝 أسئلة اختبارية
عدد الأسئلة: 9
سؤال 3: best_team.__________ (best_worker_id) # adds the worker to the solution
- أ) append
- ب) add
- ج) insert
- د) push
الإجابة الصحيحة: append
الشرح: يجب استخدام الدالة append() لإضافة معرف العامل إلى قائمة الفريق الأفضل
تلميح: ما الدالة التي تضيف عنصراً إلى نهاية القائمة؟
سؤال 3: uncovered_worker_skills[worker_id]=uncovered_worker_skills[worker_id].__________ (uncovered_required_skills)
- أ) intersection
- ب) union
- ج) difference
- د) subset
الإجابة الصحيحة: intersection
الشرح: يجب استخدام الدالة intersection() لتحديث مهارات العامل لتشمل فقط المهارات غير المغطاة المتبقية
تلميح: ما العملية التي تجد العناصر المشتركة بين مجموعتين؟
سؤال 3: return __________ # no solution could be found
الإجابة الصحيحة: None
الشرح: يجب إرجاع None للإشارة إلى أنه لا يمكن إيجاد حل للمشكلة
تلميح: ما القيمة التي تمثل عدم وجود حل؟
سؤال 3: أَنشِئْ خوارزمية حل جشعة لتحسين مشكلة تكوين أعضاء فريق، من خلال إكمال المقطع البرمجي التالي بحيث تستخدم خوارزمية الحل الاستدلالية الجشعة لتكليف أعضاء الفريق بالمهمة:
الإجابة الصحيحة: انظر الأسئلة الفرعية
الشرح: هذا سؤال رئيسي يحتوي على أسئلة فرعية تتعلق بإكمال المقطع البرمجي
تلميح: راجع الأسئلة الفرعية أدناه لإكمال الأجزاء الناقصة في الكود
سؤال 3: uncovered_required_skills = required_skills.__________ () # skills not covered
- أ) copy
- ب) clone
- ج) duplicate
- د) replicate
الإجابة الصحيحة: copy
الشرح: يجب استخدام الدالة copy() لإنشاء نسخة من required_skills لتجنب التعديل على المجموعة الأصلية
تلميح: فكر في كيفية إنشاء نسخة من مجموعة المهارات المطلوبة
سؤال 3: uncovered_worker_skills[worker_id]=worker_skills[worker_id].__________ (uncovered_required_skills)
- أ) intersection
- ب) union
- ج) difference
- د) subset
الإجابة الصحيحة: intersection
الشرح: يجب استخدام الدالة intersection() لإيجاد تقاطع مهارات العامل مع المهارات المطلوبة غير المغطاة
تلميح: ما العملية التي تجد العناصر المشتركة بين مجموعتين؟
سؤال 3: best_worker_id=__________ # the best worker to add next
الإجابة الصحيحة: None
الشرح: يجب تهيئة best_worker_id بقيمة None لتمثيل عدم وجود عامل أفضل في البداية
تلميح: ما القيمة التي تمثل عدم وجود عامل مختار بعد؟
سؤال 3: best_new_coverage=__________ (my_uncovered_skills)
- أ) len
- ب) count
- ج) size
- د) length
الإجابة الصحيحة: len
الشرح: يجب استخدام الدالة len() لحساب عدد المهارات غير المغطاة التي يمكن لهذا العامل تغطيتها
تلميح: ما الدالة التي تحسب عدد العناصر في مجموعة؟
سؤال 3: if best_worker_id!=__________ : # if a best worker was found
الإجابة الصحيحة: None
الشرح: يجب المقارنة مع None للتحقق من وجود عامل أفضل تم اختياره
تلميح: ما القيمة التي تمثل عدم وجود عامل؟
🎴 بطاقات تعليمية للمراجعة
عدد البطاقات: 5 بطاقة لهذه الصفحة
ما هو الدور الأساسي للخوارزمية الجشعة في حل مشكلة تكوين الفريق كما هو موضح في المقطع البرمجي؟
الإجابة: تساعد الخوارزمية الجشعة في اختيار أفضل عامل (worker) في كل خطوة بناءً على قدرته على تغطية أكبر عدد ممكن من المهارات المطلوبة غير المغطاة حالياً، وذلك بهدف الوصول إلى حل أمثل لمشكلة تكوين الفريق.
الشرح: الخوارزمية الجشعة تعتمد على اتخاذ القرار الأمثل محلياً في كل خطوة، وهو في هذه الحالة اختيار العامل الذي يغطي أكبر عدد من المهارات غير المغطاة، على أمل أن يؤدي ذلك إلى حل شامل جيد.
تلميح: فكر في الاستراتيجية التي تتبعها الخوارزمية في كل تكرار لاتخاذ القرار.
في المقطع البرمجي، ماذا تمثل العملية `required_skills.__________ ()`؟
الإجابة: تمثل نسخ (copy) لقائمة المهارات المطلوبة، لضمان عدم تعديل القائمة الأصلية أثناء عملية الحل.
الشرح: يجب إنشاء نسخة من قائمة المهارات المطلوبة (`required_skills`) لكي يتم تحديثها (إزالة المهارات المغطاة) دون التأثير على القائمة الأصلية للمشكلة، مما يحافظ على سلامة بيانات المدخلات.
تلميح: لماذا نحتاج لنسخ البيانات قبل البدء في تعديلها أو تقليلها؟
ما هي وظيفة السطر `uncovered_worker_skills[worker_id]=worker_skills[worker_id].__________ (uncovered_required_skills)`؟
الإجابة: تقوم هذه العملية بتحديد المهارات المطلوبة غير المغطاة حالياً والتي يمتلكها العامل الحالي (`worker_id`)، وذلك من خلال عملية تقاطع (intersection) بين مهاراته وجميع المهارات المطلوبة غير المغطاة.
الشرح: الهدف هو معرفة مدى مساهمة كل عامل في تغطية المهارات المتبقية. عملية التقاطع (`intersection`) بين مجموعتي المهارات (مهارات العامل والمهارات المطلوبة غير المغطاة) تعطينا المهارات المشتركة التي يمكن للعامل تغطيتها.
تلميح: ما هو الناتج الذي نريده من مقارنة مهارات العامل بالمهارات المطلوبة غير المغطاة؟
كيف يتم اختيار العامل الأفضل (`best_worker_id`) في كل خطوة من خطوات الخوارزمية الجشعة؟
الإجابة: يتم اختيار العامل الذي يغطي أكبر عدد من المهارات المطلوبة غير المغطاة حالياً، وذلك من خلال مقارنة عدد المهارات غير المغطاة التي يمكن لكل عامل تغطيتها.
الشرح: المعيار الجشع هو تحقيق أقصى تغطية للمهارات غير المغطاة في كل خطوة. يتم المرور على جميع العمال المتاحين، ويتم اختيار العامل الذي يقدم أكبر قدر من هذه التغطية.
تلميح: فكر في المعيار الأساسي لاتخاذ القرار "الجشع" في هذه المشكلة.
ماذا يحدث للمهارات المطلوبة غير المغطاة (`uncovered_required_skills`) بعد اختيار العامل الأفضل وإضافته إلى الفريق؟
الإجابة: يتم تحديث قائمة المهارات المطلوبة غير المغطاة بإزالة المهارات التي يمتلكها العامل الذي تم اختياره للتو، وذلك حتى لا يتم احتسابها مرة أخرى.
الشرح: عندما يتم إضافة عامل إلى الفريق، فإن المهارات التي يمتلكها وتساهم في تغطية المهارات المطلوبة تصبح مغطاة. لذلك، يجب طرح هذه المهارات من قائمة المهارات غير المغطاة لضمان أننا نركز على تغطية المهارات المتبقية فقط.
تلميح: بعد أن يساهم عامل ما في تغطية بعض المهارات، هل ما زالت تلك المهارات "غير مغطاة"؟