1) Laplace-Verteilung hat explizite Dichte (siehe here), die eine Funktion von $ \ mathbf {R} $ bis $ [0,1] $ ist, mit Parametern, die Sie daher in c++
als Mitglied implementieren können Funktion einer Klasse, deren Member-Variablen beispielsweise die Parameter der Distribution enthalten würden. Etwas wie:
class LaplaceRandomVariable
{
double _b;
double _mu;
public:
LaplaceRandomVariable(double b, double mu)
{
_b = b;
_mu = mu;
}
double Distribution(double x) const
{
return (0.5/_b) * exp(-abs(x - _mu)/_b); //you'll need error checking for _b could be zero
}
};
, um Ihnen ein Bild zu geben.
2) Was die Normalverteilung betrifft, haben normale Zufallsvariablen Werte in $ \ mathbf {R} $ und damit auch ihre Verteilung. Anstatt double
s zu int
's zu verwenden, würde ich lieber eine diskrete Approximation der normalen Zufallsvariablen mit gegebenem Mittelwert und Varianz durch binäre Zufallsvariablen verwenden. (Siehe zum Beispiel this.) Grob gesagt, würden Sie gerne eine Normalverteilung sehen, würde Ihre Zahl von char
s gegen unendlich neigen. Genau dafür ist die vorgenannte Binomialapproximation vorgesehen.
Genauer gesagt: Betrachten Sie die $ B (n, p) $ - Verteilung (wikipedia Notationen für uns, um eine gemeinsame Basis zu haben). Wenn n gegen $ + \ infty $ konvergiert, tendiert $ B (n, p) $ dazu, sich der Normalverteilung $ N (np, np (1-p)) $ anzunähern. Sie erhalten den Mittelwert m und die Varianz v der Normalverteilung Ihre char
s müssen als verteilt werden. Also m = np und und v = np (1-p). Wie B (n, p) ist mit Werten in der Menge {0, ..., n} und char
s span {97, ..., 122} = {0, ..., 25} +97 (+ eine Translation anzeigen), nehmen Sie n = 25. Dies induziert p = m/25 und v = m * (1-m/25). Sie simulieren also B (m/25, m * (1-m/25)) mit Werten in {0, ..., 25} und erzeugen jeweils int
in {0, ..., 25} Sie werden 97 hinzufügen, und Sie werden static_cast<char>
dieses int, um die entsprechende char
zu erhalten.
An diesem Punkt bleibt es, B (n, p) mit zuvor begründeten Werten für n und p zu simulieren. Und dafür, fühlen Sie sich frei zu verwenden:
http://www.cplusplus.com/reference/random/binomial_distribution/
konstruiert werden Warum nicht eine normale Verteilung von '‚A'' zu '‘ Z'' erstellen (oder deren Nieder- Falläquivalente)? Beachten Sie, dass es nur für z. ASCII oder andere Kodierungen, bei denen die Buchstaben zusammenhängend kodiert sind. –
hast du das schon ausprobiert? Was ist dein Problem mit dieser Lösung? – Hayt
Wenn Sie die Lösung von Boost nicht verwenden können.org, warum denkst du, dass du eine Lösung von StackOverflow.com verwenden kannst? Die Lizenzen sind nicht so unterschiedlich. – MSalters