PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rechenaufgabe


Mertenz
29.01.2008, 15:44
Hallo,

Ich möchte eine kleine rechnerische Aufgabe von meinem Computer lösen die
in etwa so aussieht:

Eine Zahl soll automatisch auf 10 Variablen verteilt werden und zwar per Zufallsprinzip. Dabei möchte ich das die Variablen eine bestimmte unter- und Obergrösse nicht überschreiten.

Das ganze würde ich gerne mit Python lösen da bereits einige Anwendung die
ebenfalls mit diesem Prozess zu tun haben in dieser Sprache geschrieben sind.

Leider bin ich nicht sonderlich bewandt was Systemprogrammierung angeht.

Das Hauptproblem bereitet mir die Verteilung.

Ich freu mich über jeden Denkanstoss.

MFG,

mertenz


Firefall
29.01.2008, 17:36
Wie meinst du "die Zahl so verteilt werden"? Ihre Summanden, Faktoren, oder was?

Mertenz
29.01.2008, 18:02
nehmen wir an wir haben die zahl 100 die will ich jetzt auf 3 Variablen
verteilen und das zufällig:

var1: 33
var2: 22
var3: 45

Tut mir Leid das ich mich nicht klar ausgedrückt habe

Firefall
29.01.2008, 22:23
Also in Summanden aufgeteilt. Nun zuerts muss die Zahl grösser oder gleich sein wie die Anzahl Variablen (Wenn keine Variable 0 sein soll). Anschliessend kannst du eigentl. einen Zufallswert <= aktuelle Zahl - verbleibende Variablen (ohne die aktuelle) generieren und in die Variable schreiben. Dann wieder von vorne. Besipiel für 100 mit 3 Variablen:
1. Zufallszahl zwischen 1 und 100 - 2, also 98 generieren und in Var1. Als Beispiel jetzt 40.
2. 40 von 100 subtrahieren -> 60.
3. Zufallszahl zwischen 1 und 60 - 1, also 59 generieren und in Var2. Als Beispiel jetzt 38.
4. 38 von 60 subtrahieren -> 22.
5. Verbleibende Variablen nach der aktuellen 0 -> Var3 = 22.
So würde ich das lösen.

DarkTom
30.01.2008, 09:39
Und wenn du es so machst, bekommst du genau das Problem, dass die Zahlen nicht mehr gleichverteilt sind. Die eine Lösung 98-1-1 kommt genauso häufig vor, wie alle der Form 1-x-y zusammen.

Für k Summanden und Summe n:
Generiere k-1 Zufallszahlen im Bereich 0-n.
Ergänze die Zahlen um 0 und n.
Sortiere diese k+1 Werte.
Weise die Differenz zweier aufeinanderfolgenden Zahlen jeweils einer Variablen zu.

Soll die 0 nicht vorkommen, ziehe im Voraus k von n ab und addiere 1 auf jeden Ergebniswert.