Wie teilen wir eine große positive ganze Zahl n in m Teile gleichmäßig zufällig. Nachbedingung: Die Summe aller m Teile sollte n ergeben.Dividieren eine Zahl in m Teile gleichmäßig zufällig
Unten ist mein Versuch (in Java wie Pseudocode), aber ich denke nicht, dass es mir gleichmäßig zufällige Verteilung geben wird. Ich finde zuerst den Durchschnittsteil Durchschnitt durch Division von n/m. Dann bin ich m-1 Zufallszahlen zu erzeugen, die um avg in der Größe sind (durch abwechselndes Erzeugen von Zufallszahlen zwischen 0 & avg und * avg & 2 * avg *. Dann habe ich die Summe dieser am Subtrahieren m- 1 Zahlen von ursprünglichen Anzahl n und Einstellung, die als m -te Teil.
Es sei angenommen, dass die Funktion rand (x, y) eine Zufallszahl gleichmßig zwischen x und y zurückgibt.
int[] divideUniformlyRandomly(int n, int m)
{
int[] res = new int[m];
int avg = n/m;
int sum = 0;
bool alternator = false;
for(int i = 0; i < m - 1; i++)
{
if(alternator == false)
{
res[i] = rand(0, avg);
alternator = true;
}
else
{
res[i] = rand(avg, 2*avg);
alternator = false;
}
sum += res[i];
}
res[m-1] = n - sum;
return res;
}
Wollen Sie der eigentliche Code in Java sein? Bitte setzen Sie ein Sprach-Tag, sonst wird Ihre Frage später nicht mehr angezeigt, da "random" kein sehr beliebtes Tag ist. – Tudor
Danke! Ich habe das Java-Tag hinzugefügt. – Prabhakar
mögliches Duplikat von [N Zufallszahlen erhalten, dass die Summe M ist] (http://stackoverflow.com/questions/2640053/getting-n-random-number-that-the-sum-is-m). Auch im Zusammenhang: http://StackOverflow.com/Questions/5622608/Choosing-N-Numbers-with-fixed-sum – finnw