Gegeven is een reeks van \(n\) uit te voeren taken, die allemaal dezelfde tijd vragen; stel voor de eenvoud dat elke taak 1 tijdseenheid duurt. Voor elke taak is een deadline gegeven, evenals een boete die moet betaald worden als de taak niet tegen de deadline uitgevoerd is. Gevraagd is een planning voor de taken op te stellen, zodanig dat de totale boete geminimaliseerd wordt. Ontwerp hiervoor een gretig algoritme.
Implementeer de interface Planner
1 in een klasse MijnPlanner
. Implementeer hiervoor de methode public List<Taak> plan(Collection<Taak> taken)
. Deze methode neemt een collectie taken als input en geeft een lijst terug waarin de taken zijn opgeslagen die moeten worden uitgevoerd, zonder dat de deadline wordt overschreden.
De taak die op positie i staat in de teruggegeven lijst, wordt op tijdstip i uitgevoerd. De resultaatlijst bevat enkel taken die volgens die planning binnen de deadline uitgevoerd worden. (De resultaatlijst kan ook nulls bevatten als er op die corresponderende tijdstippen geen taken dienen uitgevoerd te worden.)
Een object van de klasse Taak
2 houdt in twee velden bij wat de deadline van het object is en hoeveel de boete bedraagt.
Opmerking: pas de collectie met taken uit de input niet aan. Indien je dit wel doet, zullen de testen falen.
Gebruik eventueel de testklasse SimpleTest
3 om je oplossing lokaal te testen. Je kan hierin eenvoudig extra testgevallen toevoegen.