Hallo zusammen!! Ich bin nun schon längere Zeit daran in C einen Algorithmus zu finden, aber irgendwie komm ich nicht so recht auf eine schöne lösung, und hatte gehofft, ihr könnt mir weiterheilfen. Folgendermaßen: Ich habe ein zweidimensionales Array, das soll mit zufälligen Boolschen Werten befüllt werden. So weit so gut, das wär kein Problem. Jedoch möchte ich gerne einen "Faktor" zwischen 0 und 100 mitgeben, der die Verteilung zwischen True und False bestimmt. also Faktor = 0 ->> Array mit false initialisiert Faktor = 100 ->> Array mit true initialisiert Faktor = 50 ->> Array ca 50/50 verteilt mit true und false initialisiert. Habt ihr eine Idee wie man so etwas realisieren kann? Herzlichen Dank, LG
Ein Zufallszahlengenerator (z.B. rand()) liefert doch Werte zwischen 0 und einem Höchstwert (RAND_MAX). Dein Faktor ist jetzt zwischen 0 und 100. Wenn ich jetzt boolwert = ( rand() < (((long)1+RAND_MAX)*Faktor/100) ) bilde, sollte das doch hinkommen?
debugger schrieb: > und hatte > gehofft schon im/vor dem ersten Post aufzugeben ... da erwarted man nicht viel. hol dir ne Zufallszahl zwischen 0 und 100, und nimm den Faktor als Schwellwert.
debugger schrieb: > Faktor = 50 ->> Array ca 50/50 verteilt mit true und false > initialisiert. und wenns genau 50/50 sein soll, dann befüllt man sein Array mit einer entsprechenden Anzahl an false Werten, mit einer entsprechenden Anzahl an true Werten und benutzt den http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle Algorithmus um diese Werte im Array durchzumischen. Auf die Art kann man dann ganz genau bestimmen, wieviele true Werte im Array vorkommen sollen.
@Klaus, bebugger Damit wird im Mittel die gewünschte Verteilung erreicht. Ich habe die Threadstarter so verstanden: Es sollen exakt 50% oder halt 0% oder 100% oder was auch immer erreicht werden, lediglich die Verteilung ist zufällig. Dann müsste man es ungefähr so lösen:
1 | for (int i=0; i< factor/arraygroesse;++i){ |
2 | while (position=randomPositionInArray() && notTaken(position)); |
3 | array(position)=true; |
4 | }
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.