خوارزمية حل جشعة لتكوين فريق - كتاب الذكاء الإصطناعي - الصف 12 - الفصل 1 - المملكة العربية السعودية

الكتاب: كتاب الذكاء الإصطناعي - الصف 12 - الفصل 1 | المادة: الذكاء الإصطناعي | المرحلة: الصف 12 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

الدرس: بناء خوارزمية جشعة لتكوين فريق

📚 معلومات الصفحة

الكتاب: كتاب الذكاء الإصطناعي - الصف 12 - الفصل 1 | المادة: الذكاء الإصطناعي | المرحلة: الصف 12 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

نوع المحتوى: تمارين وأسئلة

مستوى الصعوبة: متوسط

📝 ملخص الصفحة

تقدم هذه الصفحة تمرينًا برمجيًا لإنشاء خوارزمية حل جشعة لتحسين مشكلة تكوين أعضاء فريق. يتضمن النص مقطعًا برمجيًا غير مكتمل بلغة Python، حيث يجب على الطالب إكمال الأجزاء الفارغة لتنفيذ خوارزمية جشعة لتكليف أعضاء الفريق بالمهمة بناءً على مهاراتهم والمهارات المطلوبة.

يبدأ النص بتعريف المشكلة، حيث يتم توفير مهارات العمال والمهارات المطلوبة، ويتم إنشاء متغيرات لتتبع المهارات غير المغطاة وأفضل فريق. تتبع الخوارزمية نهجًا جشعًا عن طريق اختيار العامل الذي يغطي أكبر عدد من المهارات غير المغطاة في كل تكرار، ثم تحديث المهارات المتبقية.

يحتوي المقطع البرمجي على أجزاء فارغة تحتاج إلى إكمال، مثل تحديد المهارات غير المغطاة، وحساب التغطية، وإضافة العامل الأفضل، وتحديث المهارات، والتعامل مع الحالات التي لا يوجد فيها حل. يهدف التمرين إلى تعزيز فهم الخوارزميات الجشعة وتطبيقها في سياق عملي لتكوين الفرق.

📋 المحتوى المنظم

📖 محتوى تعليمي مفصّل

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

📄 النص الكامل للصفحة

--- SECTION: 3 --- 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_team2023 - 1447

✅ حلول أسئلة الكتاب الرسمية

عدد الأسئلة: 8

سؤال س:3: 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

الإجابة: س:3 copy

خطوات الحل:

  1. **الخطوة 1 (المفهوم):** في بداية الخوارزمية، نحتاج إلى إنشاء نسخة من المهارات المطلوبة (required_skills) لنتمكن من تتبع المهارات التي لم يتم تغطيتها بعد دون تعديل المجموعة الأصلية.
  2. **الخطوة 2 (التطبيق):** في لغة بايثون، عند التعامل مع المجموعات (Sets) أو القواميس، نستخدم دالة مخصصة لإنشاء نسخة مستقلة من البيانات.
  3. **الخطوة 3 (النتيجة):** بناءً على ذلك، الدالة المناسبة لملء الفراغ الأول هي: **copy**

سؤال س:3: 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

الإجابة: س:3 intersection

خطوات الحل:

  1. **الخطوة 1 (المفهوم):** في بداية الخوارزمية، نحتاج إلى إنشاء نسخة من المهارات المطلوبة (required_skills) لنتمكن من تتبع المهارات التي لم يتم تغطيتها بعد دون تعديل المجموعة الأصلية.
  2. **الخطوة 2 (التطبيق):** في لغة بايثون، عند التعامل مع المجموعات (Sets) أو القواميس، نستخدم دالة مخصصة لإنشاء نسخة مستقلة من البيانات.
  3. **الخطوة 3 (النتيجة):** بناءً على ذلك، الدالة المناسبة لملء الفراغ الأول هي: **copy**

سؤال س:3: 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

الإجابة: س:3 None

خطوات الحل:

  1. **الخطوة 1 (المفهوم):** في بداية الخوارزمية، نحتاج إلى إنشاء نسخة من المهارات المطلوبة (required_skills) لنتمكن من تتبع المهارات التي لم يتم تغطيتها بعد دون تعديل المجموعة الأصلية.
  2. **الخطوة 2 (التطبيق):** في لغة بايثون، عند التعامل مع المجموعات (Sets) أو القواميس، نستخدم دالة مخصصة لإنشاء نسخة مستقلة من البيانات.
  3. **الخطوة 3 (النتيجة):** بناءً على ذلك، الدالة المناسبة لملء الفراغ الأول هي: **copy**

سؤال س:3: 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

الإجابة: س:3 len

خطوات الحل:

  1. **الخطوة 1 (المفهوم):** في بداية الخوارزمية، نحتاج إلى إنشاء نسخة من المهارات المطلوبة (required_skills) لنتمكن من تتبع المهارات التي لم يتم تغطيتها بعد دون تعديل المجموعة الأصلية.
  2. **الخطوة 2 (التطبيق):** في لغة بايثون، عند التعامل مع المجموعات (Sets) أو القواميس، نستخدم دالة مخصصة لإنشاء نسخة مستقلة من البيانات.
  3. **الخطوة 3 (النتيجة):** بناءً على ذلك، الدالة المناسبة لملء الفراغ الأول هي: **copy**

سؤال س:3: 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

الإجابة: س:3 None

خطوات الحل:

  1. **الخطوة 1 (المفهوم):** في بداية الخوارزمية، نحتاج إلى إنشاء نسخة من المهارات المطلوبة (required_skills) لنتمكن من تتبع المهارات التي لم يتم تغطيتها بعد دون تعديل المجموعة الأصلية.
  2. **الخطوة 2 (التطبيق):** في لغة بايثون، عند التعامل مع المجموعات (Sets) أو القواميس، نستخدم دالة مخصصة لإنشاء نسخة مستقلة من البيانات.
  3. **الخطوة 3 (النتيجة):** بناءً على ذلك، الدالة المناسبة لملء الفراغ الأول هي: **copy**

سؤال س:3: 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

الإجابة: س:3 append

خطوات الحل:

  1. **الخطوة 1 (المفهوم):** في بداية الخوارزمية، نحتاج إلى إنشاء نسخة من المهارات المطلوبة (required_skills) لنتمكن من تتبع المهارات التي لم يتم تغطيتها بعد دون تعديل المجموعة الأصلية.
  2. **الخطوة 2 (التطبيق):** في لغة بايثون، عند التعامل مع المجموعات (Sets) أو القواميس، نستخدم دالة مخصصة لإنشاء نسخة مستقلة من البيانات.
  3. **الخطوة 3 (النتيجة):** بناءً على ذلك، الدالة المناسبة لملء الفراغ الأول هي: **copy**

سؤال س:3: 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

الإجابة: س:3 intersection

خطوات الحل:

  1. **الخطوة 1 (المفهوم):** في بداية الخوارزمية، نحتاج إلى إنشاء نسخة من المهارات المطلوبة (required_skills) لنتمكن من تتبع المهارات التي لم يتم تغطيتها بعد دون تعديل المجموعة الأصلية.
  2. **الخطوة 2 (التطبيق):** في لغة بايثون، عند التعامل مع المجموعات (Sets) أو القواميس، نستخدم دالة مخصصة لإنشاء نسخة مستقلة من البيانات.
  3. **الخطوة 3 (النتيجة):** بناءً على ذلك، الدالة المناسبة لملء الفراغ الأول هي: **copy**

سؤال س:3: 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

الإجابة: س:3 None

خطوات الحل:

  1. **الخطوة 1 (المفهوم):** في بداية الخوارزمية، نحتاج إلى إنشاء نسخة من المهارات المطلوبة (required_skills) لنتمكن من تتبع المهارات التي لم يتم تغطيتها بعد دون تعديل المجموعة الأصلية.
  2. **الخطوة 2 (التطبيق):** في لغة بايثون، عند التعامل مع المجموعات (Sets) أو القواميس، نستخدم دالة مخصصة لإنشاء نسخة مستقلة من البيانات.
  3. **الخطوة 3 (النتيجة):** بناءً على ذلك، الدالة المناسبة لملء الفراغ الأول هي: **copy**

📝 أسئلة اختبارية

عدد الأسئلة: 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
  • ب) []
  • ج) False
  • د) 0

الإجابة الصحيحة: 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
  • ب) 0
  • ج) -1
  • د) ''

الإجابة الصحيحة: 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
  • ب) 0
  • ج) -1
  • د) ''

الإجابة الصحيحة: 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`) بعد اختيار العامل الأفضل وإضافته إلى الفريق؟

الإجابة: يتم تحديث قائمة المهارات المطلوبة غير المغطاة بإزالة المهارات التي يمتلكها العامل الذي تم اختياره للتو، وذلك حتى لا يتم احتسابها مرة أخرى.

الشرح: عندما يتم إضافة عامل إلى الفريق، فإن المهارات التي يمتلكها وتساهم في تغطية المهارات المطلوبة تصبح مغطاة. لذلك، يجب طرح هذه المهارات من قائمة المهارات غير المغطاة لضمان أننا نركز على تغطية المهارات المتبقية فقط.

تلميح: بعد أن يساهم عامل ما في تغطية بعض المهارات، هل ما زالت تلك المهارات "غير مغطاة"؟