Ich möchte ... äh ... die erstaunliche Antwort von @ whuber "abschwächen", die laut @TomZinger zu schwer zu befolgen ist. Damit meine ich, dass ich es in Begriffen umschreiben möchte, die Tom Zinger meiner Meinung nach verstehen wird, weil es hier eindeutig die beste Antwort ist. Und da Tom nach und nach die Methode anwendet und feststellt, dass er beispielsweise die Verteilung der Proben kennen muss und nicht nur deren Mittelwert, wird die Antwort von whuber genau das sein, wonach er sucht.
Kurz gesagt: Hier gibt es keine originellen Ideen, nur eine einfachere Erklärung.
Sie möchten $ n $ span> Ganzzahlen von $ 1 $ span> bis $ 4 $ span> mit Mittelwert $ r $ span>. Ich werde vorschlagen, $ n $ span> Ganzzahlen von $ 0 $ span> bis $ 3 $ span> mit dem Mittelwert $ r-1 $ span>, und fügen Sie dann jedem einen hinzu. Wenn Sie das letztere tun können, können Sie das erste Problem lösen. Zum Beispiel, wenn wir 10 ganze Zahlen zwischen $ 1 $ span> und $ 4 $ span> mit dem Mittelwert $ 2.6 $ span>,
Wir können diese $ 10 $ span> Ganzzahlen zwischen $ 0 $ span> und aufschreiben $ 3 $ span> ...
0,3,2,1,3,1,2,1,3,0
dessen Mittelwert $ 1.6 $ span> ist; Wenn wir jedes um $ 1 $ span> erhöhen, erhalten wir
1,4,3,2,4,2,3,2,4,1,1
dessen Mittelwert $ 2.6 $ span> ist. So einfach ist das.
Lassen Sie uns nun über die Zahlen $ 0 $ span> bis $ 3 $ span> nachdenken. Ich werde mir diese als "wie viele Gegenstände habe ich in einem 'kleinen' Set?" Ich habe möglicherweise keine Artikel, einen Artikel, zwei Artikel oder drei Artikel. Also die Liste
0,3,2,1,3,1,2,1,3,0
repräsentiert zehn verschiedene kleine Mengen. Der erste ist leer; Der zweite hat drei Elemente und so weiter. Die Gesamtzahl der Elemente in allen Sätzen ist die Summe der zehn Zahlen, d. H. $ 16 $ span>. Die durchschnittliche Anzahl der Elemente in jedem Satz ist diese Summe, geteilt durch $ 10 $ span>, also $ 1,6 $ span>.
whubers Idee ist folgende: Angenommen, Sie machen sich zehn kleine Sätze, wobei die Gesamtzahl der Elemente $ 10t $ span> für eine bestimmte Anzahl $ t $ span>. Dann ist die durchschnittliche Größe der Mengen genau $ t $ span>. Auf die gleiche Weise, wenn Sie sich $ n $ span> setzen, wobei die Gesamtzahl der Elemente $ nt $ span ist > Die durchschnittliche Anzahl von Elementen in einem Satz beträgt $ t $ span>. Sie sagen, Sie interessieren sich für den Fall $ n = 100 $ span>.
Lassen Sie uns dies für Ihr Beispiel konkretisieren: Sie möchten 100 Elemente zwischen 1 und 4, deren Durchschnitt $ 1.9 $ span> ist. Mit der Idee meines ersten Absatzes werde ich dies ändern, um " $ 100 $ span> Ints zwischen $ 0 $ zu machen. span> und $ 3 $ span>, deren Durchschnitt $ 0,9 $ span> "ist. Wenn ich fertig bin, füge ich jedem meiner Ints $ 1 $ span> hinzu, um eine Lösung für Ihr Problem zu finden. Mein Zieldurchschnitt ist also $ t = 0,9 $ span>.
Ich möchte $ 100 $ span> -Sätze mit jeweils zwischen $ 0 $ span> und $ 3 $ span> Elemente mit einer durchschnittlichen Set-Größe von $ 0,9 $ span>.
Wie ich oben bemerkt habe, bedeutet dies, dass insgesamt $ 100 \ cdot 0.9 = 90 $ span> Elemente vorhanden sein muss Die Sätze. Aus den Zahlen $ 1, 2, \ ldots, 300 $ span> werde ich genau $ 90 $ span> auswählen . Ich kann die ausgewählten angeben, indem ich eine Liste mit 300 Punkten und Xs erstelle:
..X .... X ... XX ...
wobei die obige Liste angibt, dass ich die Nummern 3, 9, 13, 14 und dann viele andere ausgewählt habe, die ich nicht angezeigt habe, weil ich es satt habe zu tippen. :) :)
Ich kann diese Folge von 300 Punkten und Xs in drei Gruppen von jeweils 100 Punkten aufteilen, die ich übereinander anordne, um etwas zu erhalten, das so aussieht:
... X .... X..X ..... X ...
.X ... X ..... X ... X .....
..X ... X.X..X ...... X ..
geht aber für volle 100 Elemente in jeder Zeile weiter. Die Anzahl der X in jeder Zeile kann unterschiedlich sein - es können beispielsweise 35 in der ersten Zeile, 24 in der zweiten und 31 in der dritten Zeile sein, und das ist in Ordnung. [Danke an whuber für den Hinweis, dass ich dies in einem ersten Entwurf falsch gemacht habe!]
Sehen Sie sich nun jede Spalte an: Jede Spalte kann als Satz betrachtet werden, und dieser Satz enthält zwischen 0 und 3 "X". Ich kann die Zahlen unter die Zeilen schreiben, um so etwas zu erhalten:
... X .... X..X ..... X ...
.X ... X ..... X ... X .....
..X ... X.X..X ...... X ..
011101102003000101100
Das heißt, ich habe 100 Zahlen erzeugt, jede zwischen 1 und 3. Und die Summe dieser 100 Zahlen muss die Anzahl der X in allen drei Zeilen sein, die 90 war. Der Durchschnitt muss also sein $ 90/100 = 0.9 $ span> sein, wie gewünscht.
Hier sind die Schritte, um 100 Ganzzahlen zwischen 1 und 4 zu erhalten, deren Durchschnitt genau $ s $ span> ist.
- Lassen Sie $ t = s - 1 $ span>.
- Berechne $ k = 100 t $ span>; So viele Xs platzieren wir insgesamt in den Zeilen.
- Erstellen Sie eine Liste mit 300 Punkten oder Xs, von denen $ k $ span> Xs sind.
- Teilen Sie dies in drei Reihen mit 100 Punkten oder X auf, von denen jede mehr oder weniger etwa ein Drittel der X enthält.
- Ordnen Sie diese in einem Array an und berechnen Sie Spaltensummen, wobei Sie 100 Ganzzahlen zwischen $ 0 $ span> und $ 3 $ span erhalten >. Ihr Durchschnitt ist $ t $ span>.
- Fügen Sie jeder Spaltensumme eine hinzu, um 100 Ganzzahlen zwischen $ 1 $ span> und $ 4 $ span> zu erhalten, deren Durchschnitt ist $ s $ span>.
ol>
Nun ist der schwierige Teil davon wirklich in Schritt 4: Wie wählt man $ 300 $ span> Elemente aus, $ k $ span> von denen sind "X" und die anderen $ 300-k $ span> von denen sind "."? Nun, es stellt sich heraus, dass R eine Funktion hat, die genau das tut.
Und dann sagt Ihnen whuber, wie man es benutzt: Sie schreiben
tabellieren (sample.int ((k-1) * n, s-n) %% n + 1, n)
Für Ihren speziellen Fall ist $ n = 100 $ span> und $ s $ span> die Gesamtzahl Die Anzahl der Elemente in allen kleinen Mengen beträgt $ 100r $ span>, und Sie möchten Zahlen zwischen $ 1 $ span> und $ 4 $ span>, also $ k = 4 $ span>, also $ k -1 $ span> (die größte Größe für eine 'kleine Menge') ist 3, daher wird dies
tabellieren (sample.int (3 * 100, 100r-100) %% 100 + 1, n)
oder
tabellieren (sample.int (3 * 100, 100 * (r-1)) %% 100 + 1, 100)
oder unter Verwendung meines Namens $ t $ span> für $ r - 1 $ span> wird es
tabellieren (sample.int (3 * 100, 100 * t) %% 100 + 1, 100)
Das "+1" am Ende seiner ursprünglichen Formel ist genau der Schritt, der zum Konvertieren von "Zahlen zwischen $ 0 $ span> und $ 3 $ span>" bis "Zahlen zwischen $ 1 $ span> und $ 4 $ span>".
Lassen Sie uns von innen nach außen arbeiten und vereinfachen Sie $ n = 10 $ span>, damit ich Beispielausgaben anzeigen kann:
tabellieren (sample.int (3 * 10, 10 * t) %% 10 + 1, 10)
Und wollen wir $ t = 1.9 $ span> anstreben, also wird dies
tabellieren (sample.int (3 * 10, 10 * 1,9) %% 10 + 1, 10)
Beginnend mit sample.int (3 * 10, 10 * 1.9)
: Dies erzeugt eine Liste von $ 19 $ span> Ganzzahlen zwischen $ 1 $ span> und $ 30 $ span>. (dh es hat das Problem gelöst, $ k $ span> Zahlen aus Ihrer Gesamtzahl auszuwählen - $ 300 $ span> in Ihr eigentliches Problem, $ 30 $ span> in meinem kleineren Beispiel).
Wie Sie sich erinnern werden, möchten wir drei Reihen mit jeweils zehn Punkten und X erzeugen, so etwas wie
X.X.XX.XX.
XXXX.XXX ..
XX.X.XXX ..
Wir können diese von links nach rechts von oben nach unten (d. h. normale Lesereihenfolge) lesen, um eine Liste von Positionen für Xs zu erstellen: Das erste Element ist ein Punkt; Das zweite und dritte sind Xs usw. Unsere Liste der Speicherorte beginnt also mit $ 1, 3, 5, 6, \ ldots $ span>. Wenn wir am Ende einer Zeile angelangt sind, zählen wir einfach weiter hoch. Für das obige Bild wären die X-Positionen $ 1, 3, 5, 6, 8, 9, 11, 12, 13, 14, 16, 17, 18, 21, 22, 24, 26, 27, 28 $ span>. Ist das klar?
Nun, Whubers-Code erzeugt genau diese Liste von Orten mit seinem innersten Abschnitt.
Das nächste Element ist %% 10
; das nimmt eine Zahl und erzeugt seinen Rest bei Division durch zehn. Unsere Liste wird also zu $ 1, 3, 5, 6, 8, 9, 1, 2, 3, 4, 6, 7, 8, 1, 2, 4, 6, 7, 8 $ span>. Wenn wir das in drei Gruppen aufteilen - diejenigen, die aus Zahlen zwischen $ 1 $ span> und $ 10 $ span> stammen, diejenigen, die aus Zahlen von $ 11 $ span> bis $ 20 $ span> stammten, und diejenigen, die aus Zahlen $ 21 $ span> bis $ 30 $ span> erhalten wir $ 1, 3, 5, 6, 8, 9 $ span>, dann $ 1, 2, 3, 4, 6, 7, 8, $ span> und schließlich $ 1, 2, 4, 6, 7, 8 $ span>. Diese sagen Ihnen, wo sich die X in jeder der drei Zeilen befinden. Hier gibt es ein subtiles Problem: Wenn es in Position 10 in der ersten Zeile ein X gegeben hätte, wäre die erste unserer drei Listen $ 1, 3, 5, 6, 8, 9 gewesen , 0 $ span> und die Funktion tabulate
mag "0" nicht. Whuber fügt also 1 zu jedem Element in der Liste hinzu, um $ 2, 4, 6, 7, 9, 10, 1 $ span> zu erhalten. Fahren wir mit der Gesamtberechnung fort:
tabellieren (sample.int (3 * 10, 10 * 1,9) %% 10 + 1, 10)
Hier werden "nach diesen $ 30 $ span> -Nummern gefragt, die jeweils angeben, ob in einer Spalte ein X vorhanden ist. Geben Sie an, wie oft jede Spalte (ab $ 1 $ span> bis $ 10 $ span> --- das sagt Ihnen die letzte" 10 "), dh sagen Sie mir, wie viele Xs vorhanden sind sind in jeder Spalte. Das Ergebnis ist
0 3 2 2 2 1 3 2 3 1
welche (wegen der Verschiebung um eins) Sie lesen müssen als "es gibt keine Xs in der 10. Spalte; es gibt 3 Xs in der ersten Spalte; es gibt 2 Xs in der zweiten Spalte" und so weiter zu "es gibt ein X in der 9. Spalte".
Damit erhalten Sie zehn Ganzzahlen zwischen $ 0 $ span> und $ 3 $ span>, deren Summe $ 19 $ span>, daher der Durchschnitt $ 1,9 $ span>. Wenn Sie jeweils um 1 erhöhen, erhalten Sie zehn Ganzzahlen zwischen $ 1 $ span> und $ 4 $ span>, deren Summe $ 29 $ span>, daher ein Durchschnittswert von $ 2,9 $ span>.
Ich hoffe, Sie können auf $ n = 100 $ span> verallgemeinern.