Forum: Compiler & IDEs Algorithmus für boolsche Randombelegung


von debugger (Gast)


Lesenswert?

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

von Klaus W. (mfgkw)


Lesenswert?

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?

von bebugger (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Stefanie B. (sbs)


Lesenswert?

@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
Noch kein Account? Hier anmelden.