<?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[Vereinigung von int-Arrays: so schnell wie nur möglich]]></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 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 schnelle 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 <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>
<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>
]]></description><link>https://www.c-plusplus.net/forum/topic/189223/vereinigung-von-int-arrays-so-schnell-wie-nur-möglich</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 08:45:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/189223.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 09 Aug 2007 21:47:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Thu, 09 Aug 2007 21:47:34 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 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 schnelle 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 <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>
<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>
]]></description><link>https://www.c-plusplus.net/forum/post/1341921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341921</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Thu, 09 Aug 2007 21:47:34 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Fri, 10 Aug 2007 04:41:46 GMT]]></title><description><![CDATA[<p>was ist in dem bitvector?<br />
ist da das 18te bit gesetzt, wenn eine 18 dabei ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1341958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341958</guid><dc:creator><![CDATA[CaramelLord]]></dc:creator><pubDate>Fri, 10 Aug 2007 04:41:46 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Fri, 10 Aug 2007 07:13:02 GMT]]></title><description><![CDATA[<p>Ich denke, dass die einfachste Lösung auch die schnellste ist. Alle größen addieren, und mit hilfe der so errechneten größe ein neues array anlegen, und dies dann mit den Daten füllen. Wiso ist die geschwindigkeit dennn so wichtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1341977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341977</guid><dc:creator><![CDATA[Krux]]></dc:creator><pubDate>Fri, 10 Aug 2007 07:13:02 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Fri, 10 Aug 2007 07:28:54 GMT]]></title><description><![CDATA[<p>sind die ausgangs-array sortiert?<br />
sollen das ergebnis-array sortiert sein?<br />
hast du einen begrenzten wertebereich, oder ist jeder int-wert erlaubt?<br />
vielleicht wäre es das beste (wenn's schnell sein soll) auf das vereinigen zu verzichten und stattdessen eine spezielle zugriffsfunktion zu basteln.<br />
<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/1341985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341985</guid><dc:creator><![CDATA[Undertaker]]></dc:creator><pubDate>Fri, 10 Aug 2007 07:28:54 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Fri, 10 Aug 2007 07:36:26 GMT]]></title><description><![CDATA[<p>Also wenn das Ergebnis sortiert sein soll, dann würde ich die beiden Ausgangsarrays einfach in n std::set schmeißen.<br />
Und wenn das Ding danach schnell zu handhaben sein soll, dann würde ich das std::set in nen vector übertragen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1341992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341992</guid><dc:creator><![CDATA[Checker*amp*Murckser]]></dc:creator><pubDate>Fri, 10 Aug 2007 07:36:26 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Fri, 10 Aug 2007 08:29:54 GMT]]></title><description><![CDATA[<p>Checker&amp;Murckser schrieb:</p>
<blockquote>
<p>Also wenn das Ergebnis sortiert sein soll, dann würde ich die beiden Ausgangsarrays einfach in n std::set schmeißen.<br />
Und wenn das Ding danach schnell zu handhaben sein soll, dann würde ich das std::set in nen vector übertragen ...</p>
</blockquote>
<p>Also wenn man schon die Standardmittel verwendet, dann würde ich statt<br />
einem vector -&gt; set -&gt; vector, doch eher ein sort, sort, set_union, oder, falls es nicht es nicht allzu viele Duplikate gibt, ein sort + unique vorschlagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342016</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 10 Aug 2007 08:29:54 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Fri, 10 Aug 2007 09:47:17 GMT]]></title><description><![CDATA[<blockquote>
<p>was ist in dem bitvector?<br />
ist da das 18te bit gesetzt, wenn eine 18 dabei ist?</p>
</blockquote>
<p>Also in dem Bitvector sind im Moment nur int werte - er wird zu begin (also vor den for-schleifen) mit 0 initialisiert.<br />
Das mit dem 18Bit verstehe ich leider (noch) nicht. wie wenn eine 18 dabei ist?<br />
Der Bitvector ist C-artig so angelegt:</p>
<p>memset(bitvec, 0, n * sizeof(unsigned int));</p>
<blockquote>
<p>Alle größen addieren, und mit hilfe der so errechneten größe ein neues array anlegen, und dies dann mit den Daten füllen. Wiso ist die geschwindigkeit dennn so wichtig?</p>
</blockquote>
<p>eh....das verstehe ich leider auch nicht -was meinst du mit alle größen addieren und dann ein erg-array anlegen?<br />
Es gilt einen referenz-algorithmus zu schlagen der das eben so macht...an dieser stelle wird sehr viel rechenzeit insgesamt verbraten ....er läuft durchaus 1000 mal an diese stelle und kann dann durchauch 1000 arrays mit jeweils 500 elementen oder mehr haben. Es geht insgesamt um performance...</p>
<blockquote>
<p>sind die ausgangs-array sortiert?<br />
sollen das ergebnis-array sortiert sein?<br />
hast du einen begrenzten wertebereich, oder ist jeder int-wert erlaubt?</p>
</blockquote>
<p>Sorry - das hatte ich vergessen zu sagen <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="🙄"
    /><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 verplanzt 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/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Danke euch vielmals</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342075</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Fri, 10 Aug 2007 09:47:17 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Fri, 10 Aug 2007 10:03:03 GMT]]></title><description><![CDATA[<p>mach es so wie <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-181382-and-highlight-is-contest.html" rel="nofollow">manch andere</a> auch und lass dir die aufgabe einfach loesen indem du es als contest machst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342086</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Fri, 10 Aug 2007 10:03:03 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Fri, 10 Aug 2007 10:16:20 GMT]]></title><description><![CDATA[<p>Mati schrieb:</p>
<blockquote>
<pre><code class="language-cpp">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>
</blockquote>
<p>Was macht das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342097</guid><dc:creator><![CDATA[CaramelLord]]></dc:creator><pubDate>Fri, 10 Aug 2007 10:16:20 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Fri, 10 Aug 2007 10:30:31 GMT]]></title><description><![CDATA[<p>Ich hab mir da mal was aufgemalt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Voraussetzungen:<br />
a) du kennst dei Anzahl der Arrays<br />
b) die Arrays sind sortiert<br />
c) du hast ein ein weiteres Array aus Pointern, die auf das jeweils erste Element der einzelnen Arrays zeigen<br />
d) du kennst die Laenge der einzelnen Arrays</p>
<p>Wie dein Beispiel oben zeigt, ist die Laenge des ergebnis-arrays vorher nicht bekannt, daher verwende ich hier einfach einen stack.</p>
<pre><code class="language-cpp">unsigned int nArrays;
int* firstElem[nArrays];
unsigned int len[nArrays];

std::stack&lt;int&gt; erg;
</code></pre>
<p>Die Idee ist, eine Rekursion laufen zu lassen, Umsetzung wie folgt:</p>
<pre><code class="language-cpp">void push_elems_to_stack(int max, int arrnum)
{
  for ( ;arrnum &lt; nArrays; arrnum++) //alle arrays mit nummer &gt; arrnum
  { 
    while (len[arrnum] &gt; 0) {
      int kleinstes = *firstElem[arrnum];
      //nur elemente &gt; max im array uebrig, while abbrechen      
      if(kleinstes &gt; max) break;  
      if(kleinstes &lt; max) { 
         //kleineres Element gefunden -&gt;Push und rekursion starten
         erg.push(kleinstes);
         push_elems_to_stack(kleinstes, arrnum+1);
      }
      // zeiger auf erstes elem eins vor, restlaenge verkleinern
      // auch fuer kleinste == max, da schon auf dem stack
      ++firstElem[arrnum]; 
      --len[arrnum]; 
    }
  }
}
</code></pre>
<p>Im Hauptprogramm dann nurnoch</p>
<pre><code class="language-cpp">push_elems_to_stack(std::numeric_limits&lt;int&gt;::max(), 0); //fange erstes array an, alle ints ins ergebnis
</code></pre>
<p>Ich hab leider keinen Compiler um das zu testen, mache aber ein kleines Beispiel (folgt gleich)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342108</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 10 Aug 2007 10:30:31 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Fri, 10 Aug 2007 10:34:50 GMT]]></title><description><![CDATA[<p>Die 4 Voraussetzungen von Pumuckl sind erfüllt - nur falls jemand fragen sollte <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>das snippet vom ersten post ist nicht von mir ....<br />
Im grunde wird der bitvector benutzt um eine binärzahl zu bauen die an pos kommt und anhand derer dann geprüft werden kann ob eine Zahl schon mal verwendet wurde (btest!). Falls über UND 0 rauskommt dann nicht und die neue zahl wird übernommen, andernfalls weiterschalten.</p>
<p>das mit den Modulo 32 und shift von 5 verstehe ich auch nicht so ganz...evtl. wegen den int-werten um keinen overflow zu kriegen? in der hinsicht weiß ichs noch nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342111</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Fri, 10 Aug 2007 10:34:50 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Fri, 10 Aug 2007 10:50:12 GMT]]></title><description><![CDATA[<p>nehmen wir an, die Arras sehen wie folgt aus:</p>
<pre><code>arr0: 2 4 8
arr1: 3 6 7 8
arr2: 0 1 4 6
arr3: 1 3 7

Stack: {}
</code></pre>
<p>als erstes wird 2 auf den stack gepusht, und die rekursion mit push_elems_to_stack(max = 2, arrnum = 1) aufgerufen, also wird als naechstes arr1 getestet.<br />
ich nehme den advance des pointers schonmal vorweg, da er gleich nach der rueckkehr der rekursion erfolgt. die uebrigen arrtays sehen jetzt etwa so aus:</p>
<pre><code>arr0:   4 8
arr1: 3 6 7 8
arr2: 0 1 4 6
arr3: 1 3 7

Stack: {2}
</code></pre>
<p>die 3 ist groesser als 2, break wird aufgerufen und arr2 getestet. 0&lt;2, also naechste rekursion. da nichts kleiner oder gleich 0 ist, kehrt diese nach pruefung des ersten elems von arr3 zurueck und der pointer wird vorgeschoben:</p>
<pre><code>arr0:   4 8
arr1: 3 6 7 8
arr2:   1 4 6
arr3: 1 3 7

Stack: {2, 0}
</code></pre>
<p>while geht weiter, 1&lt;2, also push(1) und push_elems_to_stack(max = 1, arr = 3).<br />
Da das erste Element von arr3 == 1 wird einfach ignoriert, der pointer advanced und die rekursion kehrt zurueck. nach dem advance in arr2 siehts so aus:</p>
<pre><code>arr0:   4 8
arr1: 3 6 7 8
arr2:     4 6
arr3:   3 7

Stack: {2, 0, 1}
</code></pre>
<p>Da die 4 in arr2 groesser ist als 2(wir befinden uns wieder im ersten rekursionsaufruf) gehts weiter zu arr3 und direkt danach kerhrt auch diese rekursion zurueck (denn 3&gt;2) und wir landen wieder in arr0. =&gt; push(4)</p>
<pre><code>arr0:     8
arr1: 3 6 7 8
arr2:     4 6
arr3:   3 7

Stack: {2, 0, 1, 4}
</code></pre>
<p>Das spiel geht jetzt so weiter. fuer die 3 gehts nochmal eine rekursion zurueck und so weiter.<br />
Am ende sieht der Stack so aus:</p>
<pre><code>Stack: {2, 0, 1, 4, 3, 8, 6, 7}
</code></pre>
<p>Zur Komplexitaet kann ich nicht so viel sagen, nur dass die Funktion fuer N verschiedene Zahlen im Ergebnisarray genau N+1 mal aufgerufen wird: zu jedem der N pushes ein Aufruf und der urspruengliche Aufruf.<br />
Du kannst auch ohne Probleme aus deinen sortierten Arrays alle Zahlen kleiner als x rausholen indem du statt numeric_limits::max x angibst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342118</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 10 Aug 2007 10:50:12 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Fri, 10 Aug 2007 11:01:42 GMT]]></title><description><![CDATA[<p>danke schon mal an dieser stelle pumuckl....ich bin gerade dabei deinen code zu verstehen <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/1342126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342126</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Fri, 10 Aug 2007 11:01:42 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Fri, 10 Aug 2007 12:11:23 GMT]]></title><description><![CDATA[<p>Also wenn das gegebene Programm das macht, was ich denke, dann wird es nicht viel schneller gehen. Was mich stört ist diese Aussage.</p>
<p>Mati schrieb:</p>
<blockquote>
<p>//der bitvector ist so groß wie das grösste array! Kann als gegeben<br />
//vorausgesetzt werden</p>
</blockquote>
<p>Wenn das großte Array nur 4 Felder groß wäre und bitvec dann auch, wie soll sich dann pos so berechnen lassen?<br />
pos = ptr &gt;&gt; log_nbits_of_int;<br />
Das wäre schnell mehr als 4. Wie groß ist den bitvector?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342169</guid><dc:creator><![CDATA[CaramelLord]]></dc:creator><pubDate>Fri, 10 Aug 2007 12:11:23 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Fri, 10 Aug 2007 12:48:05 GMT]]></title><description><![CDATA[<p>ah deswegen das 18 Bit.<br />
ja bei einem wert von 1e+18 krachts. Mit 17 gehts noch....</p>
<p>ich bin auch am rumüberlegen jetzt....aber so stehts da wirklich....</p>
<p>also bitte um bestätigung: ein unsigned int - damit kann ich doch 2^32 darstellen oder?</p>
<p>wäre ja viel grösser als 2^18</p>
<p>EDIT: Es kracht an einer anderen stelle....jetzt bin ich verwirrt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342185</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Fri, 10 Aug 2007 12:48:05 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Fri, 10 Aug 2007 12:52:05 GMT]]></title><description><![CDATA[<p>Ne, die 18 war nur ein Beispiel.</p>
<p>Wie groß ist den nun bitvec?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342191</guid><dc:creator><![CDATA[CaramelLord]]></dc:creator><pubDate>Fri, 10 Aug 2007 12:52:05 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Fri, 10 Aug 2007 12:53:22 GMT]]></title><description><![CDATA[<p>jetzt glaube ich hab ichs:</p>
<p>also die zahlen die in den arrays auftreten sind immer kleiner als bitvec. D.h bitvec ist so groß wie die grösste Zahl die in den arrays auftreten kann.</p>
<p>Jetzt müsste es passen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342193</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Fri, 10 Aug 2007 12:53:22 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Fri, 10 Aug 2007 14:45:29 GMT]]></title><description><![CDATA[<p>Weiss ja nicht. Vielleicht stehe ich ja auf'n Schlauch. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Wurde hier doch auch schon vorgeschlagen.<br />
Was spricht hier gegen ein einfaches:</p>
<pre><code class="language-cpp">set&lt;int&gt; Result;
set_union(vec1.begin(), vec1.end(),vec2.begin(), vec2.end(),inserter(Result,Result.begin()));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1342261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342261</guid><dc:creator><![CDATA[un_ion]]></dc:creator><pubDate>Fri, 10 Aug 2007 14:45:29 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Fri, 10 Aug 2007 18:25:18 GMT]]></title><description><![CDATA[<p>Wenn das bitvec array kleiner ist, als die anderen arrays zusammen, dann kannst du versuchen den btest und das wert im erg_arr speichern weg lassen.</p>
<pre><code class="language-cpp">//weg  if (! btest( bitvec[pos], bit )) {
        setbit( &amp;bitvec[pos], bit );
//weg    //speichere wert in nächster stelle in erg_arr
</code></pre>
<p>nur am schluss das ganze bitvec array durchlaufen und die gesetzten werte ins erg_arr eintragen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342380</guid><dc:creator><![CDATA[CaramelLord]]></dc:creator><pubDate>Fri, 10 Aug 2007 18:25:18 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Fri, 10 Aug 2007 20:30:53 GMT]]></title><description><![CDATA[<p>CaramelLord schrieb:</p>
<blockquote>
<p>Wenn das bitvec array kleiner ist, als die anderen arrays zusammen, dann kannst du versuchen den btest und das wert im erg_arr speichern weg lassen.</p>
<pre><code class="language-cpp">//weg  if (! btest( bitvec[pos], bit )) {
        setbit( &amp;bitvec[pos], bit );
//weg    //speichere wert in nächster stelle in erg_arr
</code></pre>
<p>nur am schluss das ganze bitvec array durchlaufen und die gesetzten werte ins erg_arr eintragen.</p>
</blockquote>
<p>Oder den ganzen Blödsinn lassen und das set_union nehmen... <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1342439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342439</guid><dc:creator><![CDATA[rolffll]]></dc:creator><pubDate>Fri, 10 Aug 2007 20:30:53 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Sat, 11 Aug 2007 04:44:50 GMT]]></title><description><![CDATA[<p>Ich wette jetzt mal 1000€ das set_union viel langsamer ist, wenn du damit 1000 Array vereinigen willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342554</guid><dc:creator><![CDATA[CaramelLord]]></dc:creator><pubDate>Sat, 11 Aug 2007 04:44:50 GMT</pubDate></item><item><title><![CDATA[Reply to Vereinigung von int-Arrays: so schnell wie nur möglich on Sat, 11 Aug 2007 12:51:56 GMT]]></title><description><![CDATA[<p>Ich erhöhe auf 2000€ das set_union schneller ist. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342700</guid><dc:creator><![CDATA[forser]]></dc:creator><pubDate>Sat, 11 Aug 2007 12:51:56 GMT</pubDate></item></channel></rss>