2013-02-19 15 views
7

Also ich versuche, ein Skript zu machen, das einen Wert von 4 in 12 verschiedene Variablen zufällig aufteilen wird. Ich kann mir keinen guten Weg vorstellen, dies richtig zu machen. Ich dachte darüber nach Zahlen zu randomisieren, so dass sie nahe an 0,33 (1/12 von 4) sind, aber das würde oft dazu führen, dass die letzten paar Zahlen unterpriorisiert werden. Hat jemand schon mal so etwas probiert oder hat er tolle Ideen, wie man das so zufällig und möglichst ungleichmäßig machen kann?Teilen einer Zahl in zufällige ungleiche Teile

Antwort

17

Generieren Sie 12 Zufallszahlen von Ihrem bevorzugten Zufallszahlengenerator, rufen Sie sie r1..r12.

Fügen Sie sie alle hinzu, rufen Sie die Summe sum.

Ihre erste zufällige Fraktion von 4 ist (r1/sum)*4. Der Rest sollte offensichtlich sein.

+0

Das war brilliant! Danke vielmals! – Tom

+0

Beachten Sie, dass diese Lösung keine Mengen von Zahlen generiert, die gleichmäßig auf die logische Weise verteilt sind, aber es ist die Lösung, die die meisten Menschen zu wählen scheinen, weil sie nicht verstehen, warum sie nicht wirklich uniform produzieren. –

+0

@woodchips: Es wäre hilfreich gewesen, eine gewisse Begründung für diese Kritik zu liefern (obwohl es korrekt ist) und noch hilfreicher, eine Antwort zu liefern, die gleichmäßig verteilte Partitionen erzeugt.Ich habe versucht, Letzteres zu tun, obwohl ich mir nicht sicher bin, ob es auch richtig ist. – rici

8

Generieren Sie eine beliebige Zufallszahl größer als 1 und nach der Neuskalierung die erforderliche Summe.

Beispiel:

  • geforderte Summe: 4
  • Random Numbers: 1 2 3 4 5 6 7 8 9 10 11 12
  • Sum = 78
  • umskaliert Zahlen:

1 neu skaliert nach (1 * 4)/78

2 umskaliert bis (2 * 4)/78

...

12 umskaliert bis (12 * 4)/78

2

Der folgende Algorithmus liefert gleichmäßig verteilt Partitionen unter der Annahme, dass es möglich ist, um gleichmäßig verteilte Zufallszahlen über einen kontinuierlichen Bereich zu erzeugen (oder zumindest über einen diskreten Bereich mit ausreichend vielen möglichen Werten, dass die Wahrscheinlichkeit der Duplizierung vernachlässigbar ist).

Um eine Partition von t in k Werte zu erzeugen:

  • generieren k-1 gleichmäßig verteilte Werte im Bereich [0, t].

  • Sortieren Sie sie und fügen Sie 0 am Anfang und t am Ende hinzu.

  • Verwenden Sie die angrenzenden Unterschiede als Partition.

Verwandte Themen