📋 المحتوى المنظم
📖 محتوى تعليمي مفصّل
نوع: محتوى تعليمي
بعد ذلك، يمكن إنشاء الدالة التالية لحل مشكلة تكوين الفريق بأسلوب القوة المفرطة. وهذه الخوارزمية تأخذ بعين الاعتبار جميع أحجام الفرق الممكنة، وتنشىء الفرق بناءً على الأعداد الممكنة، ثم تحصر الفرق التي تستوفي كل المهارات المطلوبة وتحدد الفريق الأقل عددًا.
نوع: محتوى تعليمي
def brute_force_solver(problem):
worker_skills = problem['worker_skills']
required_skills = problem['required_skills']
worker_ids = list(worker_skills.keys()) # gets the ids of all the workers
worker_num = len(worker_ids) # total number of workers
all_possible_teams = [] # remembers all possible teams
best_team = None # remembers the best (smallest) team found so far
#for each possible team size (singles, pairs, triplets, ...)
for team_size in range(1, worker_num+1):
# creates all possible teams of this size
teams = combinations(worker_ids, team_size)
for team in teams: # for each team of this size
skill_union = set() # union of skills covered by all members of this
for worker_id in team: # for each team member
# adds their skills to the union
skill_union.update(worker_skills[worker_id])
# if all the required skills are included in the union
if required_skills.issubset(skill_union):
# if this is the first team that covers all required skills
# or this team is smaller than the best one or
if best_team == None or len(team) < len(best_team):
best_team = team # makes this team the best one
return best_team # returns the best solution
نوع: محتوى تعليمي
من الممكن ألا يكون هناك حل لنسخة المشكلة الواردة. فإذا كانت مجموعة المهارات المطلوبة تشمل مهارة لا يمتلكها أي عامل من العمال المتواجدين، فلن تجد طريقة لإنشاء فريق يغطي كل المهارات، وفي مثل هذه الحالات ستظهر الخوارزمية المذكورة سابقًا النتيجة بعدم وجود حل.
يمكنك الآن استخدام المقطع البرمجي التالي لاختبار خوارزمية الحل بالقوة المفرطة وفقًا للمثال الذي تم إنشاؤه سابقًا:
نوع: محتوى تعليمي
# uses the brute-force solver to find the best team for the sample problem
best_team = brute_force_solver(sample_problem)
print(best_team)
نوع: محتوى تعليمي
('w2', 'w3', 'w4')
نوع: METADATA
وزارة التعليم
Ministry of Education
2025 - 1447
نوع: METADATA
258
🔍 عناصر مرئية
شعار وزارة التعليم
شعار وزارة التعليم السعودية، يتكون من شكل هندسي أخضر يمثل مجموعة من النقاط المتجمعة، وتحته نص 'وزارة التعليم' باللغة العربية و 'Ministry of Education' باللغة الإنجليزية، بالإضافة إلى السنوات '2025 - 1447'.
📄 النص الكامل للصفحة
بعد ذلك، يمكن إنشاء الدالة التالية لحل مشكلة تكوين الفريق بأسلوب القوة المفرطة. وهذه الخوارزمية تأخذ بعين الاعتبار جميع أحجام الفرق الممكنة، وتنشىء الفرق بناءً على الأعداد الممكنة، ثم تحصر الفرق التي تستوفي كل المهارات المطلوبة وتحدد الفريق الأقل عددًا.def brute_force_solver(problem):worker_skills = problem['worker_skills']
required_skills = problem['required_skills']worker_ids = list(worker_skills.keys()) # gets the ids of all the workers worker_num = len(worker_ids) # total number of workers all_possible_teams = [] # remembers all possible teams best_team = None # remembers the best (smallest) team found so far#for each possible team size (singles, pairs, triplets, ...)
for team_size in range(1, worker_num+1):# creates all possible teams of this size teams = combinations(worker_ids, team_size)
for team in teams: # for each team of this size skill_union = set() # union of skills covered by all members of this for worker_id in team: # for each team member
# adds their skills to the union skill_union.update(worker_skills[worker_id])# if all the required skills are included in the union if required_skills.issubset(skill_union):# if this is the first team that covers all required skills
# or this team is smaller than the best one or if best_team == None or len(team) < len(best_team):
best_team = team # makes this team the best one return best_team # returns the best solutionمن الممكن ألا يكون هناك حل لنسخة المشكلة الواردة. فإذا كانت مجموعة المهارات المطلوبة تشمل مهارة لا يمتلكها أي عامل من العمال المتواجدين، فلن تجد طريقة لإنشاء فريق يغطي كل المهارات، وفي مثل هذه الحالات ستظهر الخوارزمية المذكورة سابقًا النتيجة بعدم وجود حل.
يمكنك الآن استخدام المقطع البرمجي التالي لاختبار خوارزمية الحل بالقوة المفرطة وفقًا للمثال الذي تم إنشاؤه سابقًا:# uses the brute-force solver to find the best team for the sample problem best_team = brute_force_solver(sample_problem)
print(best_team)('w2', 'w3', 'w4')2025 - 1447--- VISUAL CONTEXT ---Table Structure:
Headers: N/A Context: Indicates the official source or publisher of the textbook.
🎴 بطاقات تعليمية للمراجعة
عدد البطاقات: 4 بطاقة لهذه الصفحة
ما هي وظيفة الدالة `brute_force_solver` في سياق حل مشكلة تكوين الفريق؟
الإجابة: تقوم الدالة `brute_force_solver` بإنشاء جميع الفرق الممكنة بأحجامها المختلفة، ثم تقوم بتصفية الفرق التي تستوفي جميع المهارات المطلوبة، وتحدد في النهاية الفريق الأقل عددًا كحل أمثل.
الشرح: تتبع الخوارزمية أسلوب القوة المفرطة (brute force) حيث تختبر كل الاحتمالات الممكنة لتكوين الفرق، ثم تقارن بينها لاختيار الأنسب.
تلميح: فكر في العملية التي تتبعها الخوارزمية للوصول إلى الحل الأفضل.
ماذا يعني أن تكون مجموعة المهارات المطلوبة تشمل مهارة لا يمتلكها أي عامل؟
الإجابة: يعني أنه لن يكون هناك حل ممكن للمشكلة، ولن تتمكن الخوارزمية من تكوين فريق يلبي جميع المهارات المطلوبة.
الشرح: إذا كانت هناك مهارة مطلوبة غير موجودة لدى أي من العمال، فمن المستحيل تغطيتها، وبالتالي لا يمكن إيجاد فريق يحقق الشرط.
تلميح: ما هو الاستنتاج المنطقي إذا كانت هناك مهارة أساسية غير متوفرة لدى أي شخص؟
ما هي الميزة الأساسية للنهج المتبع في الدالة `brute_force_solver` عند حل مشكلة تكوين الفريق؟
الإجابة: تعتمد على تجربة جميع التشكيلات الممكنة للفرق، مما يضمن إيجاد الحل الأمثل (أصغر فريق) إذا كان موجودًا.
الشرح: بما أن الخوارزمية تختبر كل الاحتمالات، فإنها لا تفوت أي تشكيلة ممكنة، وبالتالي تضمن العثور على الفريق الأصغر الذي يلبي الشروط.
تلميح: ما هو الضمان الذي تقدمه هذه الطريقة فيما يتعلق بالحل الذي تجده؟
اشرح الخطوات التي تقوم بها الدالة `brute_force_solver` لتحديد الفريق الأقل عددًا.
الإجابة: تبدأ الدالة بتجربة فرق بحجم 1، ثم 2، وهكذا. لكل حجم فريق، تنشئ جميع التركيبات الممكنة. إذا استوفت إحدى هذه التركيبات جميع المهارات المطلوبة، تصبح هي الفريق الأفضل حتى الآن. تستمر العملية حتى يتم العثور على أصغر فريق يحقق الشرط.
الشرح: تستخدم الخوارزمية نهجًا تدريجيًا حيث تبدأ بالأحجام الصغيرة للفرق وتزيدها، وتتوقف عند أول فريق يلبي المتطلبات، مما يضمن أنه الأصغر.
تلميح: تخيل أنك تبحث عن أصغر مجموعة من الأشخاص لتحقيق هدف ما، كيف ستبدأ بحثك؟