[linux-l] [OT] Gewichtete Wahrscheinlichkeit, Random
Olaf Radicke
olaf_rad at gmx.de
Mo Feb 19 00:52:14 CET 2007
Am Sonntag, 18. Februar 2007 16:35 schrieb Steffen Dettmer:
> * Olaf Radicke wrote on Sat, Feb 17, 2007 at 19:50 +0100:
> > Am Samstag, 17. Februar 2007 18:43 schrieb Olaf Radicke:
> > > Wenn ich mich nicht vertan habe, wird das Array 400 Elemente
> > > lang.
> >
> > ...Mist der Integer ist übergelaufen. Es sind tatsächlich
> > 2.097.151. Verstehe ich nicht. Laut meinen Buch sind bei c# int
> > 2.147.483.647 lang.
> >
> > Wie auch immer. Der Algorithmus sieht jetzt so aus:
> >
> > int[] regengewichtung = new int[2097151];
> > int faktor = 1;
> > ulong gesamt = 0;
> > for(int i = 100; i>=0; i=i-5)
> > {
> > for(int i2 = 0; i2<faktor; i2++)
> > {
> > regengewichtung[gesamt] = i;
> > gesamt = gesamt+1;
> > }
> > faktor = faktor*2;
> > }
> > int niederschlag = regengewichtung[r.Next(0,2097151)];
> > Console.WriteLine("### niederschlag: " + niederschlag);
>
> Was ist denn das?
>
> > Ich hätte auch ein ArrayList nehmen können (wegen der Sicherheit),
> > aber ich hatte angst es wird zu langsam und diese Lösung ist
> > schnell.
>
> Du behauptest, ein Array mit 2 Millionen Elementen zu füllen und dann
> nur ein einziges zufällig auszuwählen um einen von nur 20 möglichen
> Werten zu lesen und auszugeben, sei schnell?!
array vs. ArrayList: Ja. Definitiv.
> int niederschlag = 100-5 * ( ln( r.Next(0,1048576) ) / ln(2) );
Was ist "ln()"?
Gruß
Mehr Informationen über die Mailingliste linux-l