<?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[Wer liefert schnellste version :) Vereinigung über int-arrays]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich arbeite gerade an einem algorithmus bei dem es vor allem um geschwindigkeit geht.<br />
Ich habe eine stelle die durchaus 5000 mal angesprungen wird an der ich z.B 10 oder aber auch 1000 arrays habe die mit int-werten gefüllt sind.<br />
Es geht jetzt darum ein einziges ergebnisarray zu haben das die vereinigung aller ist sozusagen.</p>
<p>ein Beispiel:</p>
<p>arr1 = {2,4}<br />
arr2 = {1,2,4}<br />
arr3 = {5}</p>
<p>erg_arr = {1,2,4,5}</p>
<p>Hört sich nach ner einfachen aufgabe an - man kann es aber bestimmt mit Bitshifts und schnellen bit-operationen hinbekommen.<br />
Ich hab schon eine variante hier die aber bestimmt noch schneller geht:</p>
<p>Ach ja: Bitte nicht stören lassen an den macros - die kommen natürlich weg</p>
<pre><code class="language-cpp">#define setbit(ptr,bit)  ((*ptr) |= (1 &lt;&lt; (bit)))
#define btest(word,bit)  ((word) &amp; (1 &lt;&lt; (bit)))

  //der bitvector ist so groß wie das grösste array! Kann als gegeben
  //vorausgesetzt werden

  for (//laufe über anzahl arrays) {

    //hole erstes array
        //Länge des arrays ist über eine variable zugänglich also
       //schon gegeben = len

    for (j=0; j&lt;len; j++) {
      ptr = arr[j]; //erster  
      pos = ptr &gt;&gt; log_nbits_of_int; // log_nbits_of_int = 5;
      bit = ptr % nbits_of_int;           //nbits_of_int = 32;
      if (! btest( bitvec[pos], bit )) {
        setbit( &amp;bitvec[pos], bit );
        //speichere wert in nächster stelle in erg_arr
      }
   }
</code></pre>
<p>Also in dem Bitvector sind im Moment nur int werte - er wird zu begin (also vor den for-schleifen) mit 0 initialisiert.<br />
JA- die ausgangs-arrays sind sortiert.<br />
das ergebnisarray muss nicht unbedingt sortiert sein - könnte ja in nem darauffolgenden schritt sortieren - aber wenns schon gleichzeitig geht dann JA. ich werde eine sortierung wohl brauchen.<br />
der wertebereich ist nicht begrenzt. jeder int-wert ist erlaubt.</p>
<p>Ich würde gerne am ende ein &quot;stinknormales&quot; array haben. Also ein int* arr .<br />
Der Grund dafür ist, dass ich das in ne Datenstruktur verpflanzt habe die eben ein solches hat. (Kein Bock auf redesign) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/189248/wer-liefert-schnellste-version-vereinigung-über-int-arrays</link><generator>RSS for Node</generator><lastBuildDate>Wed, 01 Jul 2026 21:16:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/189248.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Aug 2007 10:11:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wer liefert schnellste version :) Vereinigung über int-arrays on Fri, 10 Aug 2007 10:11:56 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich arbeite gerade an einem algorithmus bei dem es vor allem um geschwindigkeit geht.<br />
Ich habe eine stelle die durchaus 5000 mal angesprungen wird an der ich z.B 10 oder aber auch 1000 arrays habe die mit int-werten gefüllt sind.<br />
Es geht jetzt darum ein einziges ergebnisarray zu haben das die vereinigung aller ist sozusagen.</p>
<p>ein Beispiel:</p>
<p>arr1 = {2,4}<br />
arr2 = {1,2,4}<br />
arr3 = {5}</p>
<p>erg_arr = {1,2,4,5}</p>
<p>Hört sich nach ner einfachen aufgabe an - man kann es aber bestimmt mit Bitshifts und schnellen bit-operationen hinbekommen.<br />
Ich hab schon eine variante hier die aber bestimmt noch schneller geht:</p>
<p>Ach ja: Bitte nicht stören lassen an den macros - die kommen natürlich weg</p>
<pre><code class="language-cpp">#define setbit(ptr,bit)  ((*ptr) |= (1 &lt;&lt; (bit)))
#define btest(word,bit)  ((word) &amp; (1 &lt;&lt; (bit)))

  //der bitvector ist so groß wie das grösste array! Kann als gegeben
  //vorausgesetzt werden

  for (//laufe über anzahl arrays) {

    //hole erstes array
        //Länge des arrays ist über eine variable zugänglich also
       //schon gegeben = len

    for (j=0; j&lt;len; j++) {
      ptr = arr[j]; //erster  
      pos = ptr &gt;&gt; log_nbits_of_int; // log_nbits_of_int = 5;
      bit = ptr % nbits_of_int;           //nbits_of_int = 32;
      if (! btest( bitvec[pos], bit )) {
        setbit( &amp;bitvec[pos], bit );
        //speichere wert in nächster stelle in erg_arr
      }
   }
</code></pre>
<p>Also in dem Bitvector sind im Moment nur int werte - er wird zu begin (also vor den for-schleifen) mit 0 initialisiert.<br />
JA- die ausgangs-arrays sind sortiert.<br />
das ergebnisarray muss nicht unbedingt sortiert sein - könnte ja in nem darauffolgenden schritt sortieren - aber wenns schon gleichzeitig geht dann JA. ich werde eine sortierung wohl brauchen.<br />
der wertebereich ist nicht begrenzt. jeder int-wert ist erlaubt.</p>
<p>Ich würde gerne am ende ein &quot;stinknormales&quot; array haben. Also ein int* arr .<br />
Der Grund dafür ist, dass ich das in ne Datenstruktur verpflanzt habe die eben ein solches hat. (Kein Bock auf redesign) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342093</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Fri, 10 Aug 2007 10:11:56 GMT</pubDate></item><item><title><![CDATA[Reply to Wer liefert schnellste version :) Vereinigung über int-arrays on Fri, 10 Aug 2007 10:32:01 GMT]]></title><description><![CDATA[<p>Kommen alle möglichen int-Werte vor oder nur ein eingeschränkter Wertebereich? Das ist ja schonmal entscheidend dafür, ob ein Bitvektor geeignet ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342112</guid><dc:creator><![CDATA[Bashar@work]]></dc:creator><pubDate>Fri, 10 Aug 2007 10:32:01 GMT</pubDate></item><item><title><![CDATA[Reply to Wer liefert schnellste version :) Vereinigung über int-arrays on Fri, 10 Aug 2007 10:45:06 GMT]]></title><description><![CDATA[<p>Wieso postet du das gleiche in verschiedenen Foren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342116</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342116</guid><dc:creator><![CDATA[megaweber]]></dc:creator><pubDate>Fri, 10 Aug 2007 10:45:06 GMT</pubDate></item><item><title><![CDATA[Reply to Wer liefert schnellste version :) Vereinigung über int-arrays on Fri, 10 Aug 2007 11:03:57 GMT]]></title><description><![CDATA[<blockquote>
<p>Kommen alle möglichen int-Werte vor oder nur ein eingeschränkter Wertebereich? Das ist ja schonmal entscheidend dafür, ob ein Bitvektor geeignet ist.</p>
</blockquote>
<p>wie oben beschrieben: es sind alle möglichen int-werte möglich</p>
<blockquote>
<p>Wieso postet du das gleiche in verschiedenen Foren?</p>
</blockquote>
<p>Weil ich insbesondere vom Moderator rapso darauf aufmerksam gemacht worden bin es so zu tun.<br />
Siehe Post #8 auf Seite 1 dort.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342130</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Fri, 10 Aug 2007 11:03:57 GMT</pubDate></item><item><title><![CDATA[Reply to Wer liefert schnellste version :) Vereinigung über int-arrays on Fri, 10 Aug 2007 12:30:11 GMT]]></title><description><![CDATA[<p>ne, nix Crosspost hier. Da hast du rapso falsch verstanden. Geht im alten Thread weiter..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342178</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Fri, 10 Aug 2007 12:30:11 GMT</pubDate></item></channel></rss>