n Aufgaben unter m Arbeitern aufteilen

LL0rd

Erfahrenes Mitglied
Hallo Leute,

ich habe gerade folgendes Problem und brauche da einen kleveren Ansatz, um das Problem zu lösen. Ich habe n Aufgaben unter m Arbeitern zu verteilen. Ein Problem kann dabei nicht geteilt werden und ein Arbeiter kann nur an einem Problem arbeiten. Alle Aufgaben dauern wahrscheinlich gleich lang. Beispiel:

Ich habe 150 Aufgaben und 64 Arbeiter. Rein Rechnerisch bekommt jeder Arbeiter 2,34375 Aufgaben. Also jeder bekommt 2 und ein paar 3. Aber wie verteile ich diese drei Aufgaben fair?
 
Es ist ein theoretisches Problem. Deshalb haben alle Arbeiter die gleichen Vorlieben und alle Aufgaben sind im Grunde auch "gleich".

Das Problem ist, dass die Aufgaben zuerst aufgeteilt werden müssen. Die Arbeiter werden erst hinterher zur Arbeit geschickt.
 
Also wenn ich das richtig verstehe, dann hast du:
-150 Aufgaben, wobei einer nicht aufgeteilt werden kann
-64 Mitarbeiter, die alles gleich gut können und mögen

Soll es dafür eine logische Lösung geben, außer zufällig, die 3. Aufgaben verteilen?
 
Hmm... Ja, die Aufgaben können auch per Zufall den Arbeitern zugewiesen werden. Aber wie macht man das möglichst effizient?
 
Meinst du in Code Form?
Du gehst alle Arbeiter durch und gibst ihm eine Aufgabe. Hast du alle Arbeiter durch, dann beginnst du wieder mit dem ersten. Das ganze solange, bis die zu verteilenden Aufgaben 0 sind.
 
also zufällig und effizient kann meiner Meinung nacht in diesem Fall nicht wirklich logisch zusammenspielen ... wie soll der Zufall da im positiven Sinne Einfluss nehmen?
 
hi,

ich würde ja alles in einem Durchlauf machen

also 128 Aufgaben sind gleichmäßig verteilt dann bleiben 22 Arbeiter mit 3 Aufgaben

alle einmal Duchlaufen den ersten 22 3 Aufgaben geben und den anderen 2

dann die 23 speichern damit am nächsten Tag anderen Arbeitern Überhangsaufgaben gebeben werden


gruß

kato
 
also 128 Aufgaben sind gleichmäßig verteilt dann bleiben 22 Arbeiter mit 3 Aufgaben

alle einmal Duchlaufen den ersten 22 3 Aufgaben geben und den anderen 2

dann die 23 speichern damit am nächsten Tag anderen Arbeitern Überhangsaufgaben gebeben werden

Also wenn, dann würde man diese Teilung am Anfang machen, so hat man nur einen Durchlauf und nicht zwei.

Ich habe die Aufgabe derzeit so gelöst:

Code:
int aufgabeProArbeiter = aufgaben / arbeiter;
int rest = aufgaben % arbeiter;

...
if(rest > 0){
   aufgabeFuerDiesenArbeiter = aufgabeProArbeiter+1;
   rest--;
else
   aufgabeFuerDiesenArbeiter = aufgabeProArbeiter;
...

Es funktioniert zwar, sieht aber nicht besonders elegant aus.
 
Wie wärs damit:
Java:
//Wenn du ein Array mit den Arbeitern hast:

for(int iCounter = 0; iCounter < arbeiter.Lenght; iCounter++){
  if(iCounter < 22){
    arbeiter[iCounter].aufgabeFuerDiesenArbeiter = 3;
  }
  else{
    arbeiter[iCounter].aufgabeFuerDiesenArbeiter = 2;
  }
}
 

Neue Beiträge

Zurück