<?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[Array zufällig abgrasen]]></title><description><![CDATA[<p>Hallo,</p>
<p>also ich wusste jetzt nicht ob ich das lieber ins Mathematik forum schreiben sollte, aber da es C++ ist und hier auch fähige Leute lesen, mach ichs einfach mal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Also, ich habe ein bool array mit X einträgen.<br />
Davon sind beliebig viele Einträge == true. Dies bedeutet, dass diese Einträge zur Verarbeitung genutzt werden (eigentlich schaue ich ob ein Eintrag true ist und verwende dann den Index).</p>
<p>Nun, was ich machen möchte ist, die Einträge welche true sind, zufällig abtasten, anstatt linear durch das ganze Array zu gehen. Ganz wichtig dabei ist aber, dass ich alle true Einträge erwische. Dies soll jedoch basierend auf einer Anzahl (K) an Abgrasungen geschehen.</p>
<p>Ein Beispiel:</p>
<pre><code class="language-cpp">const int k = 200;
bool* arr; //hat 120 Einträge, davon sind 75 Einträge true
</code></pre>
<p>so, jetzt möchte ich zufällig diese 75 Einträge finden. Wenn ich jeden einzelnen Eintrag durchgehe, dann komme ich auf 75 Weiterverarbeitungen. Aber es sollen 200 Weiterverarbeitungen geschehen. Heisst also, 1 &quot;true&quot; Eintrag kann auch mehrfach für eine Weiterverarbeitung genutzt werden.</p>
<p>Klar? Hoffentlich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ja, und dafür bräuchte ich irgendwie eine Lösung. Das Problem liegt also darin, dass ich diese Einträge in zufälliger Reihenfolge benötige und ich trotzdem alle 75 &quot;true&quot; Einträge mindestens 1x zur Weiterverarbeitung verwenden muss (sofern k&gt;=75 versteht sich)</p>
<p>Bin für jeden Tipp und Hilfe dankbar!<br />
lg<br />
Sam</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/160158/array-zufällig-abgrasen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 04:39:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/160158.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 Sep 2006 13:32:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Array zufällig abgrasen on Fri, 22 Sep 2006 13:37:11 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>also ich wusste jetzt nicht ob ich das lieber ins Mathematik forum schreiben sollte, aber da es C++ ist und hier auch fähige Leute lesen, mach ichs einfach mal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Also, ich habe ein bool array mit X einträgen.<br />
Davon sind beliebig viele Einträge == true. Dies bedeutet, dass diese Einträge zur Verarbeitung genutzt werden (eigentlich schaue ich ob ein Eintrag true ist und verwende dann den Index).</p>
<p>Nun, was ich machen möchte ist, die Einträge welche true sind, zufällig abtasten, anstatt linear durch das ganze Array zu gehen. Ganz wichtig dabei ist aber, dass ich alle true Einträge erwische. Dies soll jedoch basierend auf einer Anzahl (K) an Abgrasungen geschehen.</p>
<p>Ein Beispiel:</p>
<pre><code class="language-cpp">const int k = 200;
bool* arr; //hat 120 Einträge, davon sind 75 Einträge true
</code></pre>
<p>so, jetzt möchte ich zufällig diese 75 Einträge finden. Wenn ich jeden einzelnen Eintrag durchgehe, dann komme ich auf 75 Weiterverarbeitungen. Aber es sollen 200 Weiterverarbeitungen geschehen. Heisst also, 1 &quot;true&quot; Eintrag kann auch mehrfach für eine Weiterverarbeitung genutzt werden.</p>
<p>Klar? Hoffentlich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ja, und dafür bräuchte ich irgendwie eine Lösung. Das Problem liegt also darin, dass ich diese Einträge in zufälliger Reihenfolge benötige und ich trotzdem alle 75 &quot;true&quot; Einträge mindestens 1x zur Weiterverarbeitung verwenden muss (sofern k&gt;=75 versteht sich)</p>
<p>Bin für jeden Tipp und Hilfe dankbar!<br />
lg<br />
Sam</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142569</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Fri, 22 Sep 2006 13:37:11 GMT</pubDate></item><item><title><![CDATA[Reply to Array zufällig abgrasen on Fri, 22 Sep 2006 13:38:18 GMT]]></title><description><![CDATA[<p>Die Indizes mit true in einen std::vector packen, ein paar mal std::random_shuffle drauf loslassen. Dann der Reihe nach verwenden. Wenn du mit dem Vektor durch bist, einfach noch mal std::random_shuffle und wieder beim ersten Vektor-Eintrag anfangen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142573</guid><dc:creator><![CDATA[Z2]]></dc:creator><pubDate>Fri, 22 Sep 2006 13:38:18 GMT</pubDate></item><item><title><![CDATA[Reply to Array zufällig abgrasen on Fri, 22 Sep 2006 13:42:09 GMT]]></title><description><![CDATA[<p>Z2 schrieb:</p>
<blockquote>
<p>Die Indizes mit true in einen std::vector packen, ein paar mal std::random_shuffle drauf loslassen. Dann der Reihe nach verwenden. Wenn du mit dem Vektor durch bist, einfach noch mal std::random_shuffle und wieder beim ersten Vektor-Eintrag anfangen.</p>
</blockquote>
<p>Das ist erstmal eine gute Idee, danke dafür!</p>
<p>Aber das bedeutet natürlich dass ich erstens durch das komplette Array muss um die Indizes im vector zu speichern und dann noch mehrere Durchgänge des random_shuffle auf den vector. Da ich hier mit arraygrößen von 1.000.000 und mehr arbeite, kann das natürlich ganz schön performance killen.</p>
<p>Hätte ich erwähnen sollen. Gibt es einen schnelleren Weg?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142577</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Fri, 22 Sep 2006 13:42:09 GMT</pubDate></item><item><title><![CDATA[Reply to Array zufällig abgrasen on Fri, 22 Sep 2006 13:51:02 GMT]]></title><description><![CDATA[<p>Warum benutzt du nicht gleich einen Vector? Oder ein bitset?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142591</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Fri, 22 Sep 2006 13:51:02 GMT</pubDate></item><item><title><![CDATA[Reply to Array zufällig abgrasen on Fri, 22 Sep 2006 13:51:09 GMT]]></title><description><![CDATA[<p>Nutze rand für den Zugriff und sieh zu das sich die Zufallswerte im indexbereich befinden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142592</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Fri, 22 Sep 2006 13:51:09 GMT</pubDate></item><item><title><![CDATA[Reply to Array zufällig abgrasen on Fri, 22 Sep 2006 13:52:16 GMT]]></title><description><![CDATA[<blockquote>
<p>Gibt es einen schnelleren Weg?</p>
</blockquote>
<p>Vermutlich eher nicht. Wenn du sichergehen willst, daß jeder Index mindestens einmal verwendet wird, bleibt dir schon mal nichts anderes übrig als das gesamte Array zu durchlaufen.</p>
<p>Und für das multiple random_shuffle wüßte ich auch keine vernünftige Alternative (ok, nach dem ersten Durchlauf brauchst du nicht unbedingt noch mal neu zu shufflen, einfach zufällig einen Index aus dem Index-Array herauspicken tut es auch).</p>
<p>Wenn du nicht durchmischen willst, muß du diejenigen Indizies, die schon verwendet wurden, markieren und diese Markierung dann bei zukünftigen Suchen beachten. Ich habe das jetzt nicht ausprobiert, aber auf den ersten Blick klingt mir das noch aufwändiger als random_shuffle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142593</guid><dc:creator><![CDATA[Z2]]></dc:creator><pubDate>Fri, 22 Sep 2006 13:52:16 GMT</pubDate></item><item><title><![CDATA[Reply to Array zufällig abgrasen on Fri, 22 Sep 2006 13:54:04 GMT]]></title><description><![CDATA[<p>joomoo schrieb:</p>
<blockquote>
<p>Warum benutzt du nicht gleich einen Vector? Oder ein bitset?</p>
<p>mfg.</p>
</blockquote>
<p>Weil ich das Array geschickt bekomme. Das Array wurde vom Hauptprogramm gefüllt und mir übergeben. Und damit muss ich arbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142596</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Fri, 22 Sep 2006 13:54:04 GMT</pubDate></item><item><title><![CDATA[Reply to Array zufällig abgrasen on Fri, 22 Sep 2006 13:55:26 GMT]]></title><description><![CDATA[<p>Knuddlbaer schrieb:</p>
<blockquote>
<p>Nutze rand für den Zugriff und sieh zu das sich die Zufallswerte im indexbereich befinden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Aber woher habe ich die gewissheit, dass ich nicht 10000x rand aufrufen muss bis er einen geeigneten Index findet? Die Einträge sind nicht geordnet als true definiert. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Somit fällt das raus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142598</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Fri, 22 Sep 2006 13:55:26 GMT</pubDate></item><item><title><![CDATA[Reply to Array zufällig abgrasen on Fri, 22 Sep 2006 13:56:48 GMT]]></title><description><![CDATA[<p>Z2 schrieb:</p>
<blockquote>
<blockquote>
<p>Gibt es einen schnelleren Weg?</p>
</blockquote>
<p>Vermutlich eher nicht. Wenn du sichergehen willst, daß jeder Index mindestens einmal verwendet wird, bleibt dir schon mal nichts anderes übrig als das gesamte Array zu durchlaufen.</p>
<p>Und für das multiple random_shuffle wüßte ich auch keine vernünftige Alternative (ok, nach dem ersten Durchlauf brauchst du nicht unbedingt noch mal neu zu shufflen, einfach zufällig einen Index aus dem Index-Array herauspicken tut es auch).</p>
<p>Wenn du nicht durchmischen willst, muß du diejenigen Indizies, die schon verwendet wurden, markieren und diese Markierung dann bei zukünftigen Suchen beachten. Ich habe das jetzt nicht ausprobiert, aber auf den ersten Blick klingt mir das noch aufwändiger als random_shuffle.</p>
</blockquote>
<p>Ok, vielen dank. Dann werde ich erstmal das random_shuffle nutzen. Mal schauen ob es performancemäßig noch vertretbar ist. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Bin natürlich für weitere Wege offen und dankbar!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142599</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Fri, 22 Sep 2006 13:56:48 GMT</pubDate></item><item><title><![CDATA[Reply to Array zufällig abgrasen on Sat, 23 Sep 2006 01:21:54 GMT]]></title><description><![CDATA[<p>Z2 schrieb:</p>
<blockquote>
<p>Die Indizes mit true in einen std::vector packen, ein paar mal std::random_shuffle drauf loslassen. Dann der Reihe nach verwenden. Wenn du mit dem Vektor durch bist, einfach noch mal std::random_shuffle und wieder beim ersten Vektor-Eintrag anfangen.</p>
</blockquote>
<p>und wenns nicht ganz so zufällig sein muß, kann man sich das indexarray sparen und nur zwei zahlen würfeln, einen startpunkt (start) und eine zur arraygröße teilerfremde zahl (step). und dann geht man mit<br />
int i=start;do{tuwas(i);i=(i+step)%size}while(i!=start);<br />
durch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142922</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 23 Sep 2006 01:21:54 GMT</pubDate></item><item><title><![CDATA[Reply to Array zufällig abgrasen on Sat, 23 Sep 2006 03:20:47 GMT]]></title><description><![CDATA[<p>schließ einfach mehrfache überprüfung aus BIS alle trues gefunden werden, wenn du danach weitersuchen lassen willst kannst du die beschränkung ja ab da wieder auflösen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142928</guid><dc:creator><![CDATA[ä]]></dc:creator><pubDate>Sat, 23 Sep 2006 03:20:47 GMT</pubDate></item><item><title><![CDATA[Reply to Array zufällig abgrasen on Sat, 23 Sep 2006 08:33:17 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>und wenns nicht ganz so zufällig sein muß, kann man sich das indexarray sparen und nur zwei zahlen würfeln, einen startpunkt (start) und eine zur arraygröße teilerfremde zahl (step). und dann geht man mit<br />
int i=start;do{tuwas(i);i=(i+step)%size}while(i!=start);<br />
durch.</p>
</blockquote>
<p>oh, das ist eine gute idee (merk ich mir!) aber leider sollten sie schon sehr zufällig sein. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142955</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Sat, 23 Sep 2006 08:33:17 GMT</pubDate></item><item><title><![CDATA[Reply to Array zufällig abgrasen on Sat, 23 Sep 2006 08:34:40 GMT]]></title><description><![CDATA[<p>ä schrieb:</p>
<blockquote>
<p>schließ einfach mehrfache überprüfung aus BIS alle trues gefunden werden, wenn du danach weitersuchen lassen willst kannst du die beschränkung ja ab da wieder auflösen</p>
</blockquote>
<p>Hmm, wie meinst du das genau? Einfach immer indizes überspringen? Das bedeutet aber wieder dass ich nicht vorraussagen kann, wieviele Durchläufe nötig sind und das ist mir zu unsicher. Ich muss wissen, wie sich das Programm in der Performance verhält.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142957</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Sat, 23 Sep 2006 08:34:40 GMT</pubDate></item></channel></rss>