<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Funktion zur zufälligen Auswahl von Elementen effizienter gestalten]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgende Funktion, wobei random(n) eine zufällige Zahl zwischen 0 und n-1 liefert:</p>
<pre><code class="language-cpp">int rselect(int c,int p)
{
 int s=0;
 for (int i=0;i&lt;c;++i)if (random(100)&lt;p)s++;
 return s;
}
</code></pre>
<p>Meine Frage ist nun, kann man das effizienter machen? Wenn c sehr hoch ist, dauert das ganze viel zu lange.<br />
Gerade wenn ich mir mal die Funktionswerteverteilung von ein paar Millionen Aufrufen ansehe, dann sehe ich, dass der Graph seinen Höhepunkt bei c*p/100 hat und nach beiden Seiten desto steiler abfällt, je kleiner p ist, was mich vermuten lässt, dass die Mathematik da eine bessere Lösung bereithält.<br />
Könnte mir jemand einen Denkanstoß geben?</p>
<p>Danke im voraus,<br />
Nanyuki</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/191952/funktion-zur-zufälligen-auswahl-von-elementen-effizienter-gestalten</link><generator>RSS for Node</generator><lastBuildDate>Wed, 01 Jul 2026 00:33:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/191952.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 08 Sep 2007 16:59:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktion zur zufälligen Auswahl von Elementen effizienter gestalten on Sat, 08 Sep 2007 16:59:53 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgende Funktion, wobei random(n) eine zufällige Zahl zwischen 0 und n-1 liefert:</p>
<pre><code class="language-cpp">int rselect(int c,int p)
{
 int s=0;
 for (int i=0;i&lt;c;++i)if (random(100)&lt;p)s++;
 return s;
}
</code></pre>
<p>Meine Frage ist nun, kann man das effizienter machen? Wenn c sehr hoch ist, dauert das ganze viel zu lange.<br />
Gerade wenn ich mir mal die Funktionswerteverteilung von ein paar Millionen Aufrufen ansehe, dann sehe ich, dass der Graph seinen Höhepunkt bei c*p/100 hat und nach beiden Seiten desto steiler abfällt, je kleiner p ist, was mich vermuten lässt, dass die Mathematik da eine bessere Lösung bereithält.<br />
Könnte mir jemand einen Denkanstoß geben?</p>
<p>Danke im voraus,<br />
Nanyuki</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1361473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1361473</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Sat, 08 Sep 2007 16:59:53 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion zur zufälligen Auswahl von Elementen effizienter gestalten on Sat, 08 Sep 2007 17:40:07 GMT]]></title><description><![CDATA[<p>Tjo, dann waer's nicht schlecht wenn du uns sagen wuerdest, was die Funktion denn machen sollte. Momentan simulierst du im Prinzip die Binomialverteilung, und dafuer gibts auch andere Formeln (siehe Wikipedia).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1361489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1361489</guid><dc:creator><![CDATA[Blue-Tiger]]></dc:creator><pubDate>Sat, 08 Sep 2007 17:40:07 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion zur zufälligen Auswahl von Elementen effizienter gestalten on Sat, 08 Sep 2007 18:02:51 GMT]]></title><description><![CDATA[<p>Ich brauche im Prinzip nur eine allgemeine Funktion, die aus einer Menge von c Elementen jedes mit einer Wahrscheinlichkeit p auswählen kann. Da alle Elemente gleicher Art sind, brauche ich letztendlich nur die Anzahl der ausgewählten Elemente zu wissen.<br />
Aber Binomialverteilung scheint genau das richtige Stichwort zu sein, danke.<br />
Das schau ich mir mal genauer an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1361497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1361497</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Sat, 08 Sep 2007 18:02:51 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion zur zufälligen Auswahl von Elementen effizienter gestalten on Sat, 08 Sep 2007 18:17:03 GMT]]></title><description><![CDATA[<p>Nanyuki schrieb:</p>
<blockquote>
<p>Da alle Elemente gleicher Art sind, brauche ich letztendlich nur die Anzahl der ausgewählten Elemente zu wissen.</p>
</blockquote>
<p>dann koennte ja ein einzelner Aufruf von random() reichen:</p>
<pre><code class="language-cpp">int anzahl_ausgewaehlte_elemente = ANZAHL_ELEMENTE * random(100) / 100.f;
</code></pre>
<p>Sagt dir dann, wieviel Elemente du auswaehlst.</p>
<p>Allerdings ist der Wert normal- statt binomial verteilt. Wenn du eine binomiale Verteilung haben moechtest, kannst ganz einfach die Formel nehmen, die auf Wikipedia steht. Ansonsten hat boost einen Generator, der binomial verteile Zufallszahlen liefert: <a href="http://www.boost.org/libs/random/index.html" rel="nofollow">http://www.boost.org/libs/random/index.html</a> (unter &quot;bernoulli distribuition&quot;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1361504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1361504</guid><dc:creator><![CDATA[Blue-Tiger]]></dc:creator><pubDate>Sat, 08 Sep 2007 18:17:03 GMT</pubDate></item></channel></rss>