<?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[Algorithmus fürs Bitweise &amp;quot;Zählen&amp;quot; gesucht]]></title><description><![CDATA[<p>Hi liebe Community,<br />
Zerbreche mir gerade den Kopf bei der suche nach einen Algorithmus, der elegant und <strong>constexpr</strong> ist:<br />
Er soll folgendermaßen N bits &quot;abzählen&quot; bzw. setzen, ich gebe ein bespiel an dadurch sollte es sofort klar werden :</p>
<pre><code>N=5

I =&gt; Result
0 =&gt; 0b00000
1 =&gt; 0b00001
2 =&gt; 0b00010
...
5 =&gt; 0b10000
6 =&gt; 0b00011
7 =&gt; 0b00101
...
10=&gt; 0b00110
11=&gt; 0b01010
...
16=&gt; 0b00111
17=&gt; 0b01011
...
31=&gt; 0b11111
</code></pre>
<p>Hat jemand eine Idee wie man dies berechnen könnte, außer durch stupides rekursives &quot;abzählen&quot;?<br />
Rekursives abzählen möchte ich nämlich um jeden Preis vermeiden, da sonst die Kompilierungszeit in die höhe schiest, brauche dies aber zur Implementierung von diversen Expression Templates zur Konstruktion einer bestimmten Algebra</p>
<p>Gruß FuriousByte</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/303638/algorithmus-fürs-bitweise-quot-zählen-quot-gesucht</link><generator>RSS for Node</generator><lastBuildDate>Mon, 10 Aug 2026 07:23:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/303638.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 May 2012 22:43:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Algorithmus fürs Bitweise &amp;quot;Zählen&amp;quot; gesucht on Fri, 18 May 2012 22:43:02 GMT]]></title><description><![CDATA[<p>Hi liebe Community,<br />
Zerbreche mir gerade den Kopf bei der suche nach einen Algorithmus, der elegant und <strong>constexpr</strong> ist:<br />
Er soll folgendermaßen N bits &quot;abzählen&quot; bzw. setzen, ich gebe ein bespiel an dadurch sollte es sofort klar werden :</p>
<pre><code>N=5

I =&gt; Result
0 =&gt; 0b00000
1 =&gt; 0b00001
2 =&gt; 0b00010
...
5 =&gt; 0b10000
6 =&gt; 0b00011
7 =&gt; 0b00101
...
10=&gt; 0b00110
11=&gt; 0b01010
...
16=&gt; 0b00111
17=&gt; 0b01011
...
31=&gt; 0b11111
</code></pre>
<p>Hat jemand eine Idee wie man dies berechnen könnte, außer durch stupides rekursives &quot;abzählen&quot;?<br />
Rekursives abzählen möchte ich nämlich um jeden Preis vermeiden, da sonst die Kompilierungszeit in die höhe schiest, brauche dies aber zur Implementierung von diversen Expression Templates zur Konstruktion einer bestimmten Algebra</p>
<p>Gruß FuriousByte</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212975</guid><dc:creator><![CDATA[FuriousByte]]></dc:creator><pubDate>Fri, 18 May 2012 22:43:02 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus fürs Bitweise &amp;quot;Zählen&amp;quot; gesucht on Fri, 18 May 2012 23:50:30 GMT]]></title><description><![CDATA[<p>Nö sorry, deinen Algorithmus versteh ich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212988</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Fri, 18 May 2012 23:50:30 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus fürs Bitweise &amp;quot;Zählen&amp;quot; gesucht on Sat, 19 May 2012 00:35:46 GMT]]></title><description><![CDATA[<p>Man beginnt mit einer &quot;1&quot;, von rechts nach links zu wandern bis man das N-te Bit erreicht hat, anschliesend, lässt man die &quot;1&quot; beim 1.ten bit und lässt eine zweite &quot;1&quot; vom 2. bis zum N-ten bit Wandern, dann verschiebt man die erste &quot;1&quot; nach links und lässt die zweite &quot;1&quot; vom 3. bis zum N-ten Bit wandern...<br />
Dies tut man solange bis die erste und zweite &quot;1&quot; beim vor-letzten und letzten bit angelangt sind, dann nimmt man eine weitere eins hinzu...</p>
<p>Jedes Bit könnte zb, einen Buchstaben representieren und man könnte nun eine Sortierung, einer speziellen Menge, der bis zu N Buchstabigen geordneten wörtern ohne Doppelte Buchstaben, vornehmen</p>
<pre><code>Beispiel :

0b11111
  EDCBA

0 =&gt; Kein Wort
Einbuchstabige wörter :
Index =&gt; Codierung =&gt; Representant 
1     =&gt;   0b00001 =&gt;      A
2     =&gt;   0b00010 =&gt;      B
3     =&gt;   0b00100 =&gt;      C
4     =&gt;   0b01000 =&gt;      D
5     =&gt;   0b10000 =&gt;      E
Zweibuchstabige wörter :
6     =&gt;   0b00011 =&gt;      BA
7     =&gt;   0b00101 =&gt;      CB
8     =&gt;   0b01001 =&gt;      DC
9     =&gt;   0b10001 =&gt;      ED

10    =&gt;   0b00110 =&gt;      CB
11    =&gt;   0b01010 =&gt;      DB
12    =&gt;   0b10010 =&gt;      EB

13    =&gt;   0b01100 =&gt;      DC
14    =&gt;   0b10100 =&gt;      EC

15    =&gt;   0b11000 =&gt;      ED

Drebuchstabige wörter :
16     =&gt;   0b00111 =&gt;      CBA
17     =&gt;   0b01011 =&gt;      DBA
18     =&gt;   0b10011 =&gt;      EBA

19     =&gt;   0b01101 =&gt;      DCA
20     =&gt;   0b10101 =&gt;      ECA

21     =&gt;   0b11001 =&gt;      EDA

23     =&gt;   0b01110 =&gt;      DCB
24     =&gt;   0b10110 =&gt;      ECB

25     =&gt;   0b11100 =&gt;      EDC

Vierbuchstabige wörter :
26     =&gt;   0b01111 =&gt;      DCBA
27     =&gt;   0b10111 =&gt;      ECBA
28     =&gt;   0b11011 =&gt;      EDBA
29     =&gt;   0b11101 =&gt;      EDCA
30     =&gt;   0b11110 =&gt;      EDCB
Funfbuchstabige wörter :
31     =&gt;   0b11111 =&gt;      EDCBA
</code></pre>
<p>Hoffe mein zweiter Post ausdrucksstärker als der erste ist</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2212992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212992</guid><dc:creator><![CDATA[FuriousByte]]></dc:creator><pubDate>Sat, 19 May 2012 00:35:46 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus fürs Bitweise &amp;quot;Zählen&amp;quot; gesucht on Sat, 19 May 2012 00:43:36 GMT]]></title><description><![CDATA[<p>Da ist mir beim tippen ein kleiner fehler unterlaufen(ist ja schon spät/früh <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>
<pre><code>6     =&gt;   0b00011 =&gt;      BA
7     =&gt;   0b00101 =&gt;      CA
8     =&gt;   0b01001 =&gt;      DA
9     =&gt;   0b10001 =&gt;      EA
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2212993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2212993</guid><dc:creator><![CDATA[FuriousByte]]></dc:creator><pubDate>Sat, 19 May 2012 00:43:36 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus fürs Bitweise &amp;quot;Zählen&amp;quot; gesucht on Sat, 19 May 2012 06:15:27 GMT]]></title><description><![CDATA[<p>Vielleicht kannst du erstmal nur die Zahl der gesetzten Bits zählen. Damit müsste sich wenigstens ein Interval für den gesuchten Index berechnen lassen. Die Intervallgröße ist ja auch bekannt: C(n,k), also &quot;n über k&quot; mit n=Gesamtzahl der Bits und k=Zahl der gesetzten Bits.</p>
<p>Das müsste alles ohne brute force gehen, sagt mir mein Gefühl.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2213004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2213004</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 19 May 2012 06:15:27 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus fürs Bitweise &amp;quot;Zählen&amp;quot; gesucht on Sat, 19 May 2012 10:19:45 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Vielleicht kannst du erstmal nur die Zahl der gesetzten Bits zählen. Damit müsste sich wenigstens ein Interval für den gesuchten Index berechnen lassen. Die Intervallgröße ist ja auch bekannt: C(n,k), also &quot;n über k&quot; mit n=Gesamtzahl der Bits und k=Zahl der gesetzten Bits.</p>
<p>Das müsste alles ohne brute force gehen, sagt mir mein Gefühl.</p>
</blockquote>
<p>Danke, dass die Intervallgröße C(n,k) entspricht ist mir nicht aufgefallen;<br />
Ok daqs bedeutet ich muss festellen für welches x : I € [ f(x) , f(x+1) ] , gilt wobei f(x) := Sum from k= 1 to x C(n,k) ;</p>
<p>ok, aber dann wird es schwierig, das Intervall weiter einzugrenzen...<br />
Aber selbst dann, wenn ich die genauen Intervallverschachtlung zum jeweiligen I kenne, sehe ich noch keine Möglichkeit das Bitmuster, zu ermitteln; welche Information habe ich den, dann genau?</p>
<p>Nach längerem überlegen habe ich festgestellt, dass ich alternativ die inverse meiner gesuchten funktion auch ausreichen würde, das sieht für mich einfacher aus, da dies villeicht über bit-zählen zu berechnen wäre( also den Index aus dem Bitmuster), werde mich heute abend intensiver damit befassen.</p>
<p>Aber je mehr ich nachdenke, desto mehr überlege ich ob Bruteforcen für mein spezielles Problem wirklich so schlecht ist, da ich sowieso 3/4 der berechneten Zuordnungen sowieso wahrscheinlich brauchen werde. Ich könnte also alles in ein Array verfrachten.<br />
Was denk ihr ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2213038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2213038</guid><dc:creator><![CDATA[FuriousByte]]></dc:creator><pubDate>Sat, 19 May 2012 10:19:45 GMT</pubDate></item></channel></rss>