Klasseneinteilung

Moin!

Ich habe 25 Variablen und 6 Klassen. Die Summe der Variablen ist 1.
Mein Ziel ist, das die Summe der Variablen in jeder Klasse in etwa gleich sein soll, also 1/6.
Wie soll ich hier vorgehen?

MfG
Mattis Haase.

Hi

Also wie viele Variablen sind denn in einer bestimmten Klassen jeweils drin?
Wenn du n Variablen in einer Klasse hast dann würd ich einfach jeder Variable dieser Klasse den Wert 1/(6*n) geben.
Oder müssen die Werte unterschiedlich sein?

MfG IGnow

Moin,
die Werte der Variablen sind alle vorgegeben. Wieviele Variablen in eine Klasse kommen ist egal, Hauptsache die Summe ergibt ca. 1/6.

Es handelt sich dabei um ein Problem aus der Praxis: basierend auf dem Nachnamen werden Dokumente an verschiedene Mitarbeiter (6 Stück) verteilt. Nun habe ich die Häufigkeitsverteilung von Namensanfängen in Deutschland. Jeder MA sollte gleich viel zu tun haben.

http://www.statistik.sachsen.de/22/1_2004helbig.pdf
MfG

Achso ist das gemeint!
Hm da gibt es bestimmt einen Algorithmus. Ist mir aber spontan keiner bekannt. Bei 25 Variablen kann man doch bestimmt noch viel mit Probieren herausholen. Hast du konkrete Werte vorgegeben, wenn ja könntest du sie mal nennen?

MfG IGnow

Ich finde ‚rumprobieren‘ einfach nicht befriedigend. Die Buchstabenhäufigkeiten findet man in dem von mir geposteten Link.

Hi,

die Lösung geht mE nur iterativ.
wenn du die Zahlen N=(n_1,…,n_m) hast mit summe(n_1,…,n_m)=1 und du willst die in k Blöcke aufteilen, so dass sie summe im Block je 1/k ist, dann sortiertst du N und nimmst das k-te größte Element als Element von Block k. wenn für einen Block schon gilt, dass er ein Element enthält, dass >= 1/k ist, dann ist der Block „voll“. ansonsten bildest du für den Block die Zahl x=1/k - (summe der Elemente in Block k) und suchst aus der Restmenge N wieder das größte Element heraus das kleiner ist als x. und immer so weiter.
So würde ich das versuchen, ich denke aber da gibt es schnellere und elegantere Lösungen.
Grüße,
JPL

Danke schonmal.

Hallo.

Ich habe 25 Variablen und 6 Klassen. Die Summe der Variablen
ist 1. Mein Ziel ist, das die Summe der Variablen in jeder Klasse in
etwa gleich sein soll, also 1/6. Wie soll ich hier vorgehen?

Schon die Aufgabenstellung ist unscharf formuliert, weil nicht klar ist, nach welchem Kriterium zwei verschiedene Loesungsvorschlaege verglichen werden sollen. Mit realistischen Zahlen findest Du evtl. gar keine Loesung, bei der alle sechs Summen exakt ein Sechstel sind. Und Du hast sicherlich auch nicht die Rechenleitung, um alle knapp 3*10^19 Kombinationen auszuprobieren.

Mir fallen zwei Ideen fuer Algorithmen ein:

(a) Giesskannen-Verteilen:

(i) Sortiere die Variablen der Groesse nach
(ii) Fuelle die sechs groessten Variablen in die sechs verschiedenen Klassen K1 K2, …, K6.
(iii) Fuelle jetzt die naechsten sechs groessten Variablen rueckwaerts in die Klassen K6, K5, …, K1.
(iv) Fahre mit Schritt (ii) fort.

Dabei testest Du bei jedem Befuellen, ob der Wert der Klasse unter einem Sechstel bleibt. Ist das nicht der Fall, befuellst Du statt dessen die naechste Klasse. Dieser Algorithmus endet offenbar dann, wenn Du nur noch Zahlen uebrig hast, die in keine Klasse mehr hineinpassen, weil alle Klassen schon nahe an einem Sechstel liegen.

Dann kannst Du entweder die verbleibenden Variablen von Hand einsortieren oder alternativ die maximale Fuellung etwas erhoehen, naemlich auf 1/6+eps mit einer „kleinen Zahl eps“.

(b) Zufaelliges Verteilen

Du gibst den Variablen irgend eine Reihenfolge, nimmst dieser Reihenfolge entsprechend die Variablen aus dem Speicher und sortierst sie in eine zufaellige (!) Klasse ein. Wenn eine Klasse voll ist, weil die Summe ihrer Variablen ein Sechstel ueberschreitet, dann nimmst Du diese Klasse aus der Liste heraus und verteilst die weiteren Variablen nur noch in die anderen Klassen. Auf diese Weise werden irgendwann fuenf Klassen uebervoll sein und eine vielleicht fast voll, vielleicht aber auch fast leer. Darum kannst Du nun aus den uebervollen Klassen kleine Elemente in die zuletzt uebrig gebliebene Klasse umfuellen. Das tust Du so lange, bis Du nichts mehr findest, was Du umfuellen kannst. Die entstandene Konfiguration speicherst Du als eine moegliche Loesung.

Danach startest Du wieder ganz von vorne und fuellst wieder zufaellig Variablen in Klassen. So erhaeltst Du eine ganze Reihe von Loesungsvorschlaegen. Waehrend der Computer rechnet, kannst Du Dir ueberlegen, nach welchem Verfahren Du diese Loesungsvorschlaege vergleichen moechtest, um dann den besten auszuwaehlen.

Viele Gruesse und viel Erfolg,

The Nameless