OK, dank dem zuvielen ODER und der wohl unglücklich gewählten Position für dat Beispiel war's wohl etwas misverständlich ... du
mußt die 1. Variante nehmen, wenn du
genau 70% willst, denn die 2. Variante gibt nur mit einen zufälligen Wahrscheinlichkeit zufällig 70% aus
Also entweder du legst vorher die 70%ige Verteilung fest, oder du mußt wärdend der Berechnung die tatsächliche Verteilung ermitteln und daran dann die zukünftige Verteilung festlegen.
Delphi-Quellcode:
For i := 0 to 99 do
If i >= 70 Then X[i] := 0 Else X[i] := 1;
For i := 0 to irgendwas do
Tausche(X[Random(100)], X[Random(100)]);
//in X[0..99] steht jetzt die genau 70%-Verteilung
Delphi-Quellcode:
For i := 0 to 99 do
If Random => 0.70 Then X[i] := 0 Else X[i] := 1;
//in X[0..99] steht jetzt eine zufällig 70%ige Verteilung
RANDOM gibt ja "zufällig" Werte mit eine relative gleichmäßigen Verteilung aus, aber das auch nur über eine große Anzahl an Werten.
Hier wäre mal ein Beispiel, wie man eventuell (ist zwar nicht unbedingt do optimal gelöst) die Verteilung wärend der Berechnung beeinflussen kann.
Delphi-Quellcode:
For i := 0 to 99 do Begin
// Verteilung berechnen
If i > 0 Then Begin
A := 0;
For i2 := 0 to i - 1 do
A := A + X[i2];
A := A / i;
End Else A := 0.5;
// anhand der aktuellen Verteilung eventuell die Werte festlegen
If (i >= 70) and (A >= 0.7) Then X[i] := 0
Else (i >= 30) and (A < 0.3) Then X[i] := 1
Else X[i] := Random(2);
End;
die letzte Abfrage sollte man aber eher so machen, daß nicht mit festen Wahrscheinlichkeiten gerechnte wird, sondern mit Dynamische.
Bei :=0/1 ist die Wahrscheinlichkeit ja 100% und bei :=Random(2) ist sie 50%, daß eine bestimmte Zahl (nicht) gezogen wird.
Besser wäre es halt, wenn da je nach aktueller Verteilung nur angegeben wird mit welcher Wahrscheinlichkeit eine bestimmt Zahl als nächstes kommen soll/muß.
So nach dem Motto,
If Random <= A Then X[i] := 0 Else X[i] := 1;
oder so ähnlich.