n Aufgaben unter m Arbeitern aufteilen

Das wohl einfachste wäre die Aufgaben der Reihe nach an die Arbeiter zu verteilen bis alle Aufgaben verteilt sind:
Code:
for(i=aufgaben.length-1; i>=0;) {
	for(j=min(i, arbeiter.length-1); j>=0; j--, i--) {
		arbeiter[j].add(aufgabe[i]);
	}
}
(Mit diesem umständlichen Algorithmus habe ich nur das „Problem“ umgangen, bei jedem Durchlauf der inneren Schleife zu prüfen, ob überhaupt noch Aufgaben vorhanden sind.)
 
Dank modernster Technik bist du in der Lage, dein Unternehmen so effizient wie moeglich zu fuehren.

Am schnellsten geht das, wenn alle Arbeiter ausgelastet sind:
Code:
int workerCount = workers.length, i = 0;
foreach (task in allTasks)
    workers[i++ % workerCount].assign(task)

Wenn dir das zu ungerecht ist, kannst du hoffen, dass die Anzahl der Aufgaben keine Primzahl ist und die
billigsten Arbeiter voll auslasten, der Rest bekommt frei. Ist zwar nicht ganz so schnell, wie die erste Moeglichkeit,
dafuer aber billiger:
Code:
sort(workers, byWages, descending);
workers[0..(allTasks.length % workers.length)].layOff();

/** hier die Aufgaben verteilen **/

Es geht sogar noch billiger:
Code:
sort(workers, byWage, ascending);
foreach (task in allTasks)
    workers[0].assign(task);

Du koenntest auch alle Arbeiter entlassen und die Arbeit on-demand nach China auslagern:
Code:
workers = hireChineseWorkers(allTasks.length);
workers.assign(allTasks);
 

Neue Beiträge

Zurück