Problème de séquencement des tâches
Problème ! Étant donné un ensemble de travaux pour lesquels chaque travail a une date limite et les bénéfices associés si le travail est terminé avant la date limite. Il est également indiqué que chaque travail prend une seule unité de temps, de sorte que le délai minimum possible pour tout travail est 1. Comment maximiser le profit total si un seul travail peut être planifié à la fois.
Exemple :
| travail | date limite | bénéfice |
|---|---|---|
| a | 4 | 20 |
| b | 1 | 10 |
| c | 1 | 40 |
| d | 1 | 30 |
Ce qui suit est la séquence de profit maximum des travaux (c,a)
- Triez tous les travaux par ordre décroissant de profit.
- Initialisez la séquence de résultats avec le premier travail dans les travaux triés.
- Faire pour les travaux restant (n-1)
- Si le travail en cours peut tenir dans la séquence de résultats actuelle sans manquer la date limite, ajoutez le au résultat. Sinon ignorer le travail en cours.
# travaux : liste des travaux
# creneaux : nombre de créneaux horaires
def Sequencement(travaux, creneaux):
# nombre de travaux
n = len(travaux)
# Trier les travaux dans l'ordre décroissant des bénéfices
for i in range(n):
for j in range(n - 1 - i):
if travaux[j][2] < travaux[j + 1][2]:
travaux[j], travaux[j + 1] = travaux[j + 1], travaux[j]
# créneaux disponibles
result = [False] * creneaux
# résultat
job = []
# pour chaque travail
for i in range(len(travaux)):
# trouver créneau disponible
for j in range(min(creneaux - 1, travaux[i][1] - 1), -1, -1):
# créneau disponible
if result[j] is False:
result[j] = True
job.append(travaux[i][0])
break
print(job)
# tester la fonction
travaux = [['a', 4, 20], # travaux
['b', 1, 10],
['c', 1, 40],
['d', 1, 30]]
print("Ce qui suit est la séquence de profit maximum des travaux ")
Sequencement(travaux, 3)
Ce qui suit est la séquence de profit maximum des travaux
['c', 'a']
Partager ce cours avec tes amis :
Rédigé par
ESSADDOUKI
Mostafa
The education of the 21st century opens up opportunities to not merely teach, but to coach, mentor, nurture and inspire.
