[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