<?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[Zahl mit einer Liste von Bit-Masken abgleichen]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich suche eine Möglichkeit, den folgenden Code besser darzustellen (Laufzeit-Optimierung). Es wird geprüft, ob eine Bit-Maske der Liste in der Zahl x enthalten ist. Hat jemand da vllt. eine Idee??</p>
<pre><code class="language-cpp">bool contains(int x, int* list) {
	for(i=0;i&lt;LISTSIZE;i++)
		if( (x &amp; list[x]) == list[x])
			return true;
	return false;
}
</code></pre>
<p>Für Anregungen bin ich sehr dankbar!</p>
<p>Liebe Grüße</p>
<p>Hendrik</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/286488/zahl-mit-einer-liste-von-bit-masken-abgleichen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 22:22:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/286488.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 11 May 2011 02:42:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zahl mit einer Liste von Bit-Masken abgleichen on Wed, 11 May 2011 02:42:34 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich suche eine Möglichkeit, den folgenden Code besser darzustellen (Laufzeit-Optimierung). Es wird geprüft, ob eine Bit-Maske der Liste in der Zahl x enthalten ist. Hat jemand da vllt. eine Idee??</p>
<pre><code class="language-cpp">bool contains(int x, int* list) {
	for(i=0;i&lt;LISTSIZE;i++)
		if( (x &amp; list[x]) == list[x])
			return true;
	return false;
}
</code></pre>
<p>Für Anregungen bin ich sehr dankbar!</p>
<p>Liebe Grüße</p>
<p>Hendrik</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2061497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2061497</guid><dc:creator><![CDATA[Horschtilein]]></dc:creator><pubDate>Wed, 11 May 2011 02:42:34 GMT</pubDate></item><item><title><![CDATA[Reply to Zahl mit einer Liste von Bit-Masken abgleichen on Wed, 11 May 2011 02:44:25 GMT]]></title><description><![CDATA[<p>Hallo nochmal,</p>
<p>der obere Code ist natürlich falsch, ich meinte:</p>
<pre><code class="language-cpp">bool contains(int x, int* list) {
	for(i=0;i&lt;LISTSIZE;i++)
		if( (x &amp; list[i]) == list[i])
			return true;
	return false;
}
</code></pre>
<p>Liebe Grüße</p>
<p>Hendrik</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2061498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2061498</guid><dc:creator><![CDATA[Horschtilein]]></dc:creator><pubDate>Wed, 11 May 2011 02:44:25 GMT</pubDate></item><item><title><![CDATA[Reply to Zahl mit einer Liste von Bit-Masken abgleichen on Wed, 11 May 2011 07:36:32 GMT]]></title><description><![CDATA[<p>Je nach Datenlage. Du würdest nicht fragen, wenn die Listen weniger als 1000 Elemente hätten.<br />
Also: Die Listen anders darstellen. Wo haben wir eine relle Chance, eine Vorauswahl hinzukriegen? popcount, hashen, bitweiser Binärbaum? Ich denke an einen bitweisen Baum, der so gebaut ist, daß anhand des ersten gesetzten Bits getrennt wird. LISTSIZE klingt danach, als könne man sich viel Vorverarbeitung leisten.</p>
<pre><code class="language-cpp">bool contains(int x, Node* n) {
    if(n==nullptr) return false;
    if((x&amp;n-&gt;mask)==x) return true;
    int fb=getFirstBitSet(x);
    return contains(x,n-&gt;childs[fb]);
}
</code></pre>
<p>Oder vielleicht doch nur nach gesetzten Bits trennen.</p>
<pre><code class="language-cpp">bool contains(int x, int bitpos, Node* n) {
    if(n==nullptr) return false;
    if((x&amp;n-&gt;mask)==x) return true;
    if((x&gt;&gt;bitpos)==1)
       return contains(x,bitpos+1,n-&gt;child1);
    else
       return contains(x,bitpos+1,n-&gt;child1);

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2061560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2061560</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 11 May 2011 07:36:32 GMT</pubDate></item><item><title><![CDATA[Reply to Zahl mit einer Liste von Bit-Masken abgleichen on Wed, 11 May 2011 07:54:01 GMT]]></title><description><![CDATA[<p>Oder die Standardbibliothek nutzen und alle Bitmasken in eine std::set werfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2061569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2061569</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 11 May 2011 07:54:01 GMT</pubDate></item></channel></rss>